我们有数千个文件存储在Azure blob存储中。这些文件可以是任何类型,但PDF文件,图像和Excel是最常见的。使用锚标记中的blob的URI,我们系统的用户可以直接从Azure将文件下载到用户的计算机。一切都很好。
我们希望blob名称是文件本身的名称,因此当用户下载文件时,原始文件名是完整的。但是,我们必须考虑Container中不可避免的文件名冲突。对blob名称使用GUID是一种可行的解决方案,但是当用户单击以下载文件时,他们将获得文件名作为GUID blob名称(与原始文件名相对)。
有没有办法为blob名称使用GUID,但是当用户单击下载文件时,返回的文件是否具有原始文件名?我意识到我们可以将文件下载到我们的服务器并将正确命名的文件流式传输给用户,但我们正试图将负载从Web服务器上移除以进行文件下载。
那么是否有一个blob的配置设置,可以使用正确的文件名返回文件?我们可以为blob设置MIME类型,我们正在为文件名部分寻找类似的设置。
答案 0 :(得分:1)
有没有办法为blob名称使用GUID,但是当用户使用时 点击下载文件,返回的文件有原文 文件名?我意识到我们可以将文件下载到我们的服务器和流 一个正确命名的用户文件,但我们正在努力保持负载 关闭我们的网络服务器以进行文件下载。
您可以使用blob的Content-Disposition
属性来实现此目的。您可以做的是将blob的名称设置为GUID,但将blob的content-disposition
属性设置为attachment; filename="original-file-name"
。如果希望始终下载文件,则可以永久设置此属性。但是,如果您只想在下载文件时设置此名称,则可以使用Shared Access Signature
权限在Blob上创建Read
并覆盖此标头。我在my blog sometime ago
写了这篇文章。来自我的博文:
假设您希望用户从中下载文件 您的存储帐户,但您想要为这些文件提供用户 友好名称。此外,您希望提示您的用户 保存文件而不是在浏览器中显示文件(比如说 仅在浏览器中自动打开的PDF文件)。至 实现这一点,您需要先从中获取文件 将blob存储到服务器上,然后写入该数据 通过设置“Content-Disposition”标头在响应流中输入文件。 事实上,我上周花了很多时间来实现同样的目标 解。只有我知道此功能即将存储 本身。)
现在你不需要这样做。你能做的是指定一个 blob上的content-disposition属性并将其设置为“附件; filename = yourdesiredfilename“以及当您的用户尝试访问它时 通过浏览器,他们将看到文件下载选项。
现在你可能会问,如果我有一个我想要显示的图像文件怎么办? 内联也可以作为可下载的项目。非常有效 需求。好吧,存储团队中的聪明人已经 想到这个:)。您不仅可以将内容处置设置为 blob属性,但您可以在SAS URL中覆盖此属性(更多内容 它有点)。