Azure blob,控制下载时的文件名

Joh*_*ore 4 azure azure-blob-storage

我们的应用程序使用户能够通过网络浏览器上传文件。文件名映射到 GUID,并且 blob 名称成为 GUID。当用户单击我们应用程序中的文件时,它应该使用原始文件名而不是 GUID blob 名称下载到他们的文件系统(显示另存为等)。

我发现这篇文章和类似的文章描述了如何在通过共享访问签名下载时在 blob 上设置内容处置。

公共下载 Azure blob 时的友好文件名

然而,我们的情况有点不同。我们在容器级别设置了一个 SAS(从技术上讲,我相信这称为共享访问策略——在任何给定时间最多可以有 5 个)。下载 blob 时,我们只需将 SAS 附加到 uri 的末尾,然后使用...

window.location.href = blobUri + containerSAS;
Run Code Online (Sandbox Code Playgroud)

...下载 blob。这将下载 blob,但使用 GUID 文件名。

我们如何获取适用于容器的现有 SAS 并将 blob 下载作为原始文件名?

请记住,这与应用于单个 blob 的 SAS 用例略有不同,因为......

  1. SAS 处于容器级别(与每个 blob 的单独 SAS 相比,这似乎是最佳实践)。
  2. 我们从 javascript 下载(相对于可以设置标头的 C# 代码)。

我尝试在上传过程(PUT 操作)期间设置 blob 的 Content-Disposition,但是当我下载 blob 时它似乎没有什么区别。下面,您可以看到为 PUT 请求(来自 Fiddler)设置的 Content-Disposition 标头。

在此输入图像描述

谢谢!

小智 5

这篇文章为我们指明了使用 ContentDisposition 属性 Azure.Storage.Blobs 更改文件名的正确方向

            BlobContainerClient container = OpenContianer(containerName);
            BlobClient blob = container.GetBlobClient(sourceFilename);
            var Builder = new BlobSasBuilder(BlobSasPermissions.Read, DateTimeOffset.Now.AddMinutes(10));
            Builder.ContentDisposition= $"attachment; filename = {destFileName} ";
            var SasUri = blob.GenerateSasUri(Builder);
Run Code Online (Sandbox Code Playgroud)