【发布时间】:2020-04-15 13:04:07
【问题描述】:
全部,
我有一个带有嵌套文件名的 blob 容器(模拟文件夹)。
是否可以通过代码(绕过网络服务器)通过 SAS URI 下载一堆以前缀开头的文件? 现在,我正在压缩这些文件并将其发送到下面的流中..
CloudBlobContainer container = GetRootContainer();
CloudBlockBlob caseBlob = container.GetBlockBlobReference(folderPrefix);
await caseBlob.DownloadToStreamAsync(zipStream);
这行得通,我可以以该前缀开头的文件集下载到客户端计算机。然而,这取决于网络服务器的速度和相对较慢的速度。
有没有关于如何通过为文件夹提供 URI 来使用 SAS 下载的示例?这是我从 stackoverflow 的另一篇文章中找到的示例
var sasConstraints = new SharedAccessBlobPolicy();
sasConstraints.SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5);
sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10);
sasConstraints.Permissions = SharedAccessBlobPermissions.Read;
var sasBlobToken = blob.GetSharedAccessSignature(sasConstraints);
return blob.Uri + sasBlobToken;
//Here can the URI point to the prefix??
我可以使用这样的东西吗?
谢谢!
【问题讨论】:
-
我不确定我是否清楚您要做什么。从 blob 存储下载文件,但“绕过服务器”是什么意思?服务器端代码使用 blob 存储 sdk 生成过期的 SAS 链接。您是否需要不会过期并且可以在其他地方静态放置和访问的 SAS 链接?
-
我的网络应用程序在天蓝色服务器上运行,当我下载它时,它会通过服务器下载到本地电脑,因此速度很慢..
-
服务器不就是生成下载链接,然后客户端出去直接从blob存储中获取文件吗?
-
是的,但是如果您必须为客户将多个文件下载到一个文件夹中,您会怎么做?
-
非常类似于用户尝试做的事情here
标签: c# azure asp.net-core azure-blob-storage