【问题标题】:Azure blob storage - controlling name when resource is downloadedAzure Blob 存储 - 下载资源时控制名称
【发布时间】:2016-10-10 20:24:39
【问题描述】:

我们有数千个文件要存储在 Azure Blob 存储中。这些文件可以是任何类型,但最常见的是 PDF 文件、图像和 Excel。使用锚标记中 blob 的 URI,我们系统的用户可以将文件直接从 Azure 下载到用户的计算机。一切都很好。

我们希望 blob 名称是文件本身的名称,因此当用户下载文件时,原始文件名是完整的。但是,我们必须考虑容器中不可避免的文件名冲突。为 blob 名称使用 GUID 是一种可行的解决方案,但是当用户单击下载文件时,他们将获得一个文件名作为 GUID blob 名称(与原始文件名相比)。

有没有办法为 blob 名称使用 GUID,但是当用户单击下载文件时,返回的文件具有原始文件名?我意识到我们可以将文件下载到我们的服务器并将一个正确命名的文件流式传输给用户,但我们正在努力让我们的网络服务器保持文件下载的负载。

那么是否有一个带有 blob 的配置设置可以使文件以正确的文件名返回?我们可以为 blob 设置 MIME 类型,并且我们正在为文件名部分寻找类似的设置。

【问题讨论】:

    标签: azure azure-blob-storage


    【解决方案1】:

    有没有办法为 blob 名称使用 GUID,但是当用户 点击下载文件,返回的文件有原版 文件名?我意识到我们可以将文件下载到我们的服务器并流式传输 给用户一个正确命名的文件,但我们正试图保持负载 关闭我们的网络服务器以下载文件。

    您可以使用 blob 的 Content-Disposition 属性来实现此目的。您可以做的是将 blob 的名称设置为 GUID,但将 blob 的 content-disposition 属性设置为 attachment; filename="original-file-name"。如果您希望文件始终被下载,您可以永久设置此属性。但是,如果您只想在下载文件时设置此名称,您可以在具有 Read 权限的 blob 上创建 Shared Access Signature 并覆盖此标头。我在my blog sometime ago 中写过这个。来自我的博文:

    假设您希望用户从以下位置下载文件 您的存储帐户,但您想将这些文件提供给用户 友好名称。此外,您希望您的用户得到提示 保存文件而不是在浏览器本身中显示文件(比如 仅在浏览器中自动打开的 PDF 文件)。到 完成此操作,您需要先从 您的 blob 存储到您的服务器上,然后写入该数据 通过设置“Content-Disposition”头文件在响应流中。 事实上,我上周花了很大一部分时间来实现相同的 解决方案。只有当我知道此功能即将入库时 本身:)。

    现在你不需要这样做了。你可以做的是指定一个 blob 上的 content-disposition 属性并将其设置为“附件; filename=yourdesiredfilename”以及当您的用户尝试访问该文件时 通过浏览器,他们将看到文件下载选项。

    现在你可能会问,如果我有一个想要显示的图像文件怎么办 inline 也可以作为可下载的项目。非常有效 要求。好吧,存储团队中的聪明人已经 想到了:)。您不仅可以将 content-disposition 设置为 blob 属性,但您可以在 SAS URL 中覆盖此属性(更多关于 稍等)。

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 2012-12-08
      • 2019-12-19
      • 2019-09-05
      • 2021-03-29
      • 1970-01-01
      • 2022-11-11
      • 2021-10-19
      • 1970-01-01
      相关资源
      最近更新 更多