【发布时间】: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