【发布时间】:2017-01-08 18:07:23
【问题描述】:
我们的应用程序允许用户通过网络浏览器上传文件。文件名映射到 GUID,并且 blob 名称成为 GUID。当用户在我们的应用程序中单击文件时,它应该使用原始文件名而不是 GUID blob 名称下载到他们的文件系统(显示另存为等)。
我找到了这篇文章,以及描述通过共享访问签名下载时如何在 blob 上设置 Content-Disposition 的类似文章。
Friendly filename when public download Azure blob
但是,我们的情况有点不同。我们在容器级别设置了一个 SAS(从技术上讲,我相信这称为共享访问策略——在任何给定时间最多可以有 5 个)。下载 blob 时,我们只需将 SAS 附加到 uri 的末尾,然后使用...
window.location.href = blobUri + containerSAS;
...下载 blob。这会下载 blob,但使用 GUID 文件名。
我们如何获取适用于容器的现有 SAS 并将 blob 下载作为原始文件名?
请记住,这与应用于单个 blob 的 SAS 的用例略有不同...
- SAS 处于容器级别(与每个 blob 的单个 SAS 相比,这似乎是最佳实践)。
- 我们正在从 javascript 下载(与您可以设置标头的 C# 代码相比)。
我曾尝试在上传过程(PUT 操作)期间设置 blob 的 Content-Disposition,但下载 blob 时似乎没有任何区别。下面,您可以看到为 PUT 请求设置的 Content-Disposition 标头(来自 Fiddler)。
谢谢!
【问题讨论】:
-
您是否可以使用容器访问策略在 blob 上生成 SAS,还是必须使用容器 SAS 令牌?