【问题标题】:How to download Azure Blobs by referencing the file?如何通过引用文件下载 Azure Blob?
【发布时间】:2018-05-04 06:10:51
【问题描述】:

我想使用 C# 从 Azure 下载文件,然后将这些文件流式传输到 MemoryStream 中,然后通过链接(Azure URI - 转到 Azure blob)在前端返回/显示给用户,并且用户将能够在浏览器中查看这些 PDF 文件或下载它们。 Azure 中有多个 blob/文件,所以我想遍历每个文件并下载到流,例如:使用 foreach。

我不确定如何引用这些 blob CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);,因为在这里我可以给出特定文件的名称,但我有多个文件,所以不知道“fileName”应该去哪里。

代码:

var files = container.ListBlobs();

foreach (var file in files)
{
   using (var memoryStream = new MemoryStream())
   {
      CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);
      blockBlob.DownloadToStream(memoryStream);
   }
}

我不确定我现在是否在代码中循环更正并下载每个 blob?

另外,我尝试用file.Uri.Segments.Last() 替换fileName - 我猜哪个得到了 blob 的名称。

我遇到的问题是,每当我尝试使用前端的链接时,这个 foreach 只会给我一个 PDF 文件。那么,我需要知道如何正确地遍历每个文件并下载它们?

【问题讨论】:

  • @ScottChamberlain - 实际上,在完成这项工作之后,我正在考虑使用 SAS,以便用户只能在短时间内使用这些链接,因为容器只有读取权限,但是,如果你有一些其他更好的方式让我知道。
  • 我有一个方法,通过它我可以将每个 blob 的字节 [] 返回给具有内容类型和文件名的用户,所以,首先我想下载到流然后转换这些文件进入 byte[] 然后返回。
  • 当您尝试执行您发布的代码时,您还没有告诉我们出了什么问题。您是否收到错误,意外行为,什么?请编辑您的问题以添加详细信息。
  • 您所说的问题除了将文件复制到内存流然后扔掉之外,对文件没有任何作用,您怎么知道只读取一个文件?您需要创建一个 Minimal, Complete, and Verifiable example 来演示我们可以复制和粘贴并在我们自己的项目中看到的问题。
  • 您确定上传文件正确吗?而且它不是零字节?

标签: c# azure blob azure-blob-storage


【解决方案1】:

那么,我需要知道如何正确地遍历每个文件并下载它们?

我们不能直接从内存中下载多个文件。如果 zip 文件是可接受的,您可以使用压缩文件(例如 zip 文件)来传输多个文件。以下是我的演示代码,它在我这边可以正常工作。

  using (var ms = new MemoryStream())
  {
      using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, true))
      {
           foreach (var file in files)
           {
                if (file.GetType() != typeof(CloudBlockBlob)) continue;
                var blob = (CloudBlockBlob) file;
                var entry = zipArchive.CreateEntry(blob.Name, CompressionLevel.Fastest);
                using (var entryStream = entry.Open())
                {
                    CloudBlockBlob blockBlob = container.GetBlockBlobReference(blob.Name);
                    blockBlob.DownloadToStream(entryStream);

                }
           }
      }
  }

【讨论】:

    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2017-08-20
    • 2018-04-25
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多