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

Azure Media Services:如何强制视频下载而非浏览器内播放?

解决Azure Media Services下载定位器强制浏览器下载视频的问题

核心原因

浏览器直接打开视频而非触发下载,本质是Blob存储返回的Content-Type为video/mp4,且默认Content-Disposition头为inline(在线预览);再加上前端download标签对跨域重定向资源存在生效限制,导致无法强制下载。

可行解决方案

1. 生成SAS时指定Content-Disposition响应头

在后端生成Blob SAS URL的环节,主动添加Content-Disposition头并设置为attachment; filename="自定义视频名.mp4",让Blob存储返回响应时明确告知浏览器直接下载文件。

以.NET为例,代码示例:

var sasBuilder = new BlobSasBuilder(BlobSasPermissions.Read, DateTimeOffset.UtcNow.AddHours(1))
{
    BlobContainerName = "你的容器名",
    BlobName = "你的视频文件名.mp4",
    ContentDisposition = "attachment; filename=\"自定义视频名.mp4\""
};

var sasToken = sasBuilder.ToSasQueryParameters(存储账户凭据).ToString();
var downloadUrl = $"https://{存储账户名}.blob.core.windows.net/{容器名}/{视频文件名}?{sasToken}";

如果用Azure CLI生成SAS:

az storage blob generate-sas \
    --account-name <存储账户名> \
    --container-name <容器名> \
    --name <视频文件名> \
    --permissions r \
    --expiry <过期时间,比如2024-12-31T23:59:59Z> \
    --content-disposition "attachment; filename='自定义视频名.mp4'"

2. 前端配合优化

当后端生成的SAS URL已包含Content-Disposition头后,前端a标签可保留download属性(进一步明确下载行为):

<a href="https://你的SAS下载链接" download="自定义视频名.mp4">
    <i role="none" class="Icon Icon-download"></i>
</a>
> 注意:如果后端是重定向到SAS URL,必须确保重定向后的最终响应头包含`Content-Disposition: attachment`,否则前端`download`标签可能因跨域或重定向规则失效。

#### 3. 后端代理下载(备选方案)
如果无法修改SAS生成逻辑,可在后端做一层代理:接收前端下载请求后,自行请求Blob SAS资源,再将响应转发给前端时,强制设置`Content-Disposition`和`Content-Type`头。

以Node.js Express为例:
```javascript
app.get('/proxy-download', async (req, res) => {
    const sasUrl = await 你的SAS生成函数(); // 调用现有生成SAS URL的逻辑
    const blobResponse = await fetch(sasUrl);
    
    res.setHeader('Content-Disposition', 'attachment; filename="自定义视频名.mp4"');
    res.setHeader('Content-Type', 'application/octet-stream');
    
    blobResponse.body.pipe(res);
});

前端直接调用代理接口:

<a href="/proxy-download" download="自定义视频名.mp4">
    <i role="none" class="Icon Icon-download"></i>
</a>

关键提示

  • Content-Disposition: attachment是强制下载的核心,优先级高于前端download标签,必须确保最终返回给浏览器的响应头包含该字段。
  • 若前端download标签失效,优先排查跨域或重定向后的响应头设置,而非仅调整前端代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:20:26