Azure Cosmos发布要在Logic应用中使用的文件

oxf4rvwz  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(99)

你好,我正试图从我的宇宙数据库拉数据,然后修改它,然后通过电子邮件发送给用户,其中有一个标签分隔的数据文本文件的附件。
到目前为止,我已经设置了逻辑应用程序来接收数据和查询以获取数据,并将数据更改为我想要的格式。我需要找出一种方法来创建一个制表符分隔的文件,并发送到我的逻辑应用程序。我只能得到一个字符串发送到我的逻辑应用程序的所有数据。下面是我使用的代码:

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,但我不确定需要什么

wbgh16ku

wbgh16ku1#

我试图从我的宇宙数据库中提取数据,然后修改它,然后通过电子邮件发送给用户。

  • 我使用cosmosClient从Cosmos Db提取数据,并使用以下代码将其存储为Blob容器中的Delimited-Text文件。然后我用Logic Apps发送邮件。
    以下是我的步骤:
  • cosmosDbEPcosmosDbKey创建了一个名为cosmosClient的示例,用于与Cosmos DB进行交互。query用于从数据库中检索数据。
  • blobServClient是使用blobConnStr创建的,用于与Azure Blob存储帐户交互。
  • GetTabDelimitedText方法以Data作为参数。它使用字符串插值来创建一个字符串,其中数据由制表符\t分隔。
  • blobName用于为cosmosdb中的每个项目生成唯一的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中:
Logic Apps中的设计:

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

相关问题