从Azure计时器触发器功能访问位于Azure Blob中的文件

时间:2017-12-28 06:43:05

标签: c# .net azure azure-storage-blobs

我有一个Azure Timer Trigger功能,它生成一个excel文件,我需要通过电子邮件发送它作为附件。 我已成功完成以下任务 -

  
      
  1. 创建文件并将其上传到azure blob
  2.   
  3. 发送没有附件的电子邮件(使用SmtpClient和MailMessage)
  4.   

如何从Azure Blob获取文件并将其作为附件发送?

P.S。 当我将文件存储在Azure的本地存储功能中时,我能够将其作为附件发送。但是,我想将文件的存储移动到Azure Blob

2 个答案:

答案 0 :(得分:1)

  

如何从Azure Blob获取文件并将其作为附件发送?

根据我的理解,您可以将blob下载到函数中的临时本地文件中,如下所示:

// Save blob contents to a file.
using (var fileStream = System.IO.File.OpenWrite(@"path\myfile"))
{
    blockBlob.DownloadToStream(fileStream);
}

然后,您可以按如下方式构建Attachment

System.Net.Mail.Attachment attach = new System.Net.Mail.Attachment("{file-path}");

或者您可以直接将blob下载到MemoryStream中,如下所示:

using (var memoryStream = new MemoryStream())
{
    blockBlob2.DownloadToStream(memoryStream);
    memoryStream.Position = 0;
    System.Net.Mail.Attachment attach = new System.Net.Mail.Attachment(memoryStream , "{contentType}");
}

您可以关注Download blobs的详细信息。

答案 1 :(得分:0)

        var blob_Archive = Environment.GetEnvironmentVariable("blobName", EnvironmentVariableTarget.Process);
        var archiveSheetFile = $"{blob_Archive}/FileName-{DateTime.UtcNow:ddMMyyyy_hh.mm}.csv";

        using (var txReader = await binder.BindAsync<TextReader>(
        new BlobAttribute(file2read, FileAccess.Read)))
        {
            if(txReader != null)
            sBlobNotification = await txReader.ReadToEndAsync();
        }
        log.LogInformation($"{sBlobNotification}");

您可以在计时器触发功能中编写以上代码,并获取blob内容。 这有帮助吗!