Azure Cosmos 发布文件以在逻辑应用程序中使用

问题描述 投票:0回答:1

您好,我正在尝试从我的 Cosmos 数据库中提取数据,然后对其进行修改,然后通过电子邮件将其发送给用户,其中包含制表符分隔的数据文本文档附件。

到目前为止,我已经设置了逻辑应用程序来接收数据和查询来获取数据以及将数据更改为我想要的格式的方法。我需要找出一种方法来创建制表符分隔文件并将其发送到我的逻辑应用程序。我只能获取一个字符串来发送到我的所有数据的逻辑应用程序。 这是我正在使用的代码:

string query = $"Select * from c";
        var restrictions = await _cosmosService.QueryItemsAsync<Data>(Database, query);

        if (restrictions == null)
            return new NoContentResult();
        string tabDelimitedText = ConvertToTabDelimited(restrictions);

        byte[] tabDelimitedBytes = System.Text.Encoding.UTF8.GetBytes(tabDelimitedText);

        MemoryStream stream = new MemoryStream(tabDelimitedBytes);
        var rtn = new FileStreamResult(stream, "text/plain");

        await _client.PostAsync(EmailTriggerUrl, new StringContent(rtn, Encoding.UTF8, "application/text"));
        return rtn;

private string GetTabDelimitedText(List<Person> people)
    {
        StringWriter textWriter = new StringWriter();
        textWriter.WriteLine("Name\tAge\tCity");
        foreach (var person in people)
        {
            textWriter.WriteLine($"{person.Name}\t{person.Age}\t{person.City}");
        }
        return textWriter.ToString();
    }

我知道我需要从 StringContent 更改 PostAsync,但我不确定需要做什么

azure azure-cosmosdb
1个回答
0
投票

我正在尝试从我的 Cosmos 数据库中提取数据,然后修改它,然后通过电子邮件将其发送给用户。

  • 我使用
    cosmosClient
    从 Cosmos Db 中提取数据,并使用以下代码将其作为
    Delimited-Text
    文件存储在 Blob 容器中。然后我使用 Logic Apps 发送邮件。

以下是我遵循的步骤:

  • cosmosDbEP
    cosmosDbKey
    创建了一个名为
    cosmosClient
    的实例,用于与 Cosmos DB 交互。
    query
    用于从数据库检索数据。

  • blobServClient
    使用
    blobConnStr
    创建,用于与 Azure Blob 存储帐户交互。

  • GetTabDelimitedText
    方法采用
    Data
    作为参数。它使用字符串插值来创建一个字符串,其中数据由制表符分隔
    \t

  • blobName
    用于为 cosmos db 中的每个项目生成唯一的 blob 名称,并且
    tab-delimited
    数据以文本文件的形式上传到 Blob 存储。

下面是我尝试过的代码:

CosmosClient cosmosClient = new CosmosClient(cosmosDbEP, cosmosDbKey);
var cont = cosmosClient.GetContainer(dbId, contId);
var query = new QueryDefinition("SELECT * FROM c");
var queryIterator = cont.GetItemQueryIterator<Data>(query);

BlobServiceClient blobServClient = new BlobServiceClient(blobConnStr);
BlobContainerClient contClient = blobServClient.GetBlobContainerClient(blobContName);

while (queryIterator.HasMoreResults)
{
    var response = await queryIterator.ReadNextAsync();

    foreach (var item in response)
    {
        string tabDelimitedContent = GetTabDelimitedText(item); 

        string blobName = Guid.NewGuid().ToString() + ".txt";

        BlobClient blobClient = contClient.GetBlobClient(blobName);

        using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(tabDelimitedContent)))
        {
            await blobClient.UploadAsync(stream, new BlobUploadOptions { HttpHeaders = new BlobHttpHeaders { ContentType = "text/plain" } });
        }
        Console.WriteLine($"Uploaded item to Blob Storage: {blobName}");
    }
}
Console.WriteLine("Data transfer completed.");

输出:

Uploaded item to Blob Storage: 8ee63e0d-cc6d-47b6-ad69-af40097c9134.json
Uploaded item to Blob Storage: 5f24d20c-baff-4f43-a226-e784d333ac72.json
Uploaded item to Blob Storage: 52f0fc8c-6ab8-412b-a700-d36f7ba3aae8.json
Uploaded item to Blob Storage: ca9f2958-0a2c-4eae-9734-605490ccad3d.json
Uploaded item to Blob Storage: e97888ca-3ef2-4c8e-994c-369cd01ad24b.json
Data transfer completed.

存储在Blob中的数据:

1   Balaji  23  Male
2   Pavan   20  Male
3   Likitha 24  Female
4   Sai 24  Female
5   Venkatesh   25  Male

逻辑应用程序中的设计:

  • Logic Apps 中,存储在 Blob 容器中的数据是通过提及容器名称
    /tbalaji
    添加的。现在,数据可以发送到逻辑应用中的邮件,如下所示。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.