You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Blob存储中实现文件下载自定义文件名的技术问询

解决方案:生成带重命名规则的SAS令牌(兼容Blob版本功能)

核心逻辑

要实现下载时自动将abc.txt重命名为xyz.txt,关键是在生成SAS令牌时,为Blob指定Content-Disposition响应头,强制浏览器以目标文件名保存文件。同时结合存储的版本功能,可按需指定访问特定版本的Blob。

具体实现步骤

1. 获取目标Blob的版本ID(按需操作)

如果需要分享Blob的某个历史版本,先获取对应版本的ID:

// .NET示例代码
var blobClient = new BlobClient(connectionString, containerName, "abc.txt");
var versions = blobClient.GetVersions().ToList();
// 示例:取最新版本,也可根据业务逻辑指定特定版本ID
var targetVersionId = versions.First().VersionId;

2. 生成带响应头与版本信息的SAS令牌

通过BlobSasBuilder配置响应头和版本参数,生成符合要求的SAS令牌:

// .NET示例代码
var sasBuilder = new BlobSasBuilder()
{
    BlobContainerName = containerName,
    BlobName = "abc.txt",
    Resource = "b", // 标识资源类型为Blob
    ExpiresOn = DateTimeOffset.UtcNow.AddHours(24), // 设置SAS有效期
    VersionId = targetVersionId, // 启用版本功能时指定,无需特定版本可省略
};

// 添加响应头,强制下载时保存为xyz.txt
sasBuilder.Headers.Add("Content-Disposition", "attachment; filename=\"xyz.txt\"");

// 配置权限:至少需要读权限
sasBuilder.SetPermissions(BlobSasPermissions.Read);

// 生成SAS令牌
var sasToken = sasBuilder.ToSasQueryParameters(storageSharedKeyCredential).ToString();

// 拼接最终下载URL
var downloadUrl = $"{blobClient.Uri}?{sasToken}";

3. 效果验证

将生成的downloadUrl分享给用户后,用户点击链接时浏览器会自动触发下载,保存的文件名即为xyz.txt。若指定了版本ID,用户访问的是对应版本的Blob内容。

注意事项

  • 若无需访问特定版本,可省略VersionId参数,默认访问Blob的当前版本。
  • Content-Disposition中的文件名需用双引号包裹,避免特殊字符导致解析异常。
  • SAS权限必须包含Read,否则用户无法正常下载文件。

内容的提问来源于stack exchange,提问作者dotnetavalanche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:17:10