当您通过浏览器访问对象存储(OSS)中的文件时,如果文件被强制下载而不是在线预览,本文将帮助您快速定位原因,并配置正确的文件预览行为。
问题排查
当文件被强制下载时,您可以通过 curl 命令查看文件URL的响应头(HTTP Header),快速判断问题根源。
排查目的:检查响应头中是否包含强制下载的特定字段。
操作步骤: 打开您电脑的终端或命令行工具,执行以下命令。请将<您的文件URL>替换为实际的文件访问地址。
curl -I "<您的文件URL>"结果分析: 执行命令后,关注返回信息中的 x-oss-force-download 和 Content-Disposition 字段。
如果响应头中包含
x-oss-force-download: true: 说明您触发了OSS针对默认域名的安全策略。请直接跳转到场景一:因OSS安全策略导致强制下载。如果响应头中不包含
x-oss-force-download,包含Content-Disposition: attachment: 说明文件的元数据被设置为以附件形式下载。请直接跳转到场景二:因文件元数据(Metadata)设置导致强制下载如果响应头中未包含以上两个字段,但文件依然被下载: 通常是由于浏览器无法识别文件类型所致。请直接跳转到场景三:因Content-Type不正确导致浏览器无法预览。
解决方案
场景一:因OSS安全策略导致强制下载
此场景的特征是响应头中包含 x-oss-force-download: true。
原因:为防止特定类型文件(如HTML)在浏览器中被直接执行而引发潜在安全风险,当您使用OSS默认域名或传输加速域名访问特定时间点之后创建的Bucket时,OSS会针对部分地域、部分文件类型强制添加
x-oss-force-download: true和Content-Disposition: attachment响应头,使浏览器强制下载文件。详细策略请参见本文末尾的附录:OSS域名强制下载规则速查表。
解决方案:使用自定义域名访问OSS资源
操作步骤:
绑定自定义域名到Bucket:登录OSS控制台,在目标Bucket的域名管理页面,将您已完成ICP备案的自定义域名绑定到该Bucket。
配置CNAME解析:前往您的域名解析服务商(如阿里云DNS),为您的自定义域名添加一条CNAME记录,指向OSS提供的CName地址。
使用新域名访问:完成配置后,使用您的自定义域名URL访问文件,即可实现在线预览。
如果您需要全球加速访问,可以将自定义域名绑定到传输加速域名上,这同样能规避强制下载策略并获得加速效果。
详细操作请参见通过自定义域名访问OSS。
场景二:因文件元数据(Metadata)设置导致强制下载
此场景的特征是响应头中包含 Content-Disposition: attachment,但没有 x-oss-force-download 字段。
原因:文件的元数据中
Content-Disposition字段被显式设置为attachment。这个设置会指示浏览器将文件作为附件下载,而不是内联(inline)展示。此设置通常用于生成临时下载链接,如果设置后未被及时清除,会导致该文件后续所有访问都变成下载行为。解决方案:修改文件的
Content-Disposition元数据为inline通过控制台修改
登录OSS管理控制台,进入目标Bucket的页面。
找到目标文件,在其右侧操作列,选择。
在弹出的对话框中,找到
Content-Disposition字段,将其值修改为inline。单击确定保存设置。
通过ossutil工具批量修改
# 将指定文件的Content-Disposition设置为inline ossutil set-meta oss://your-bucket/your-object.pdf Content-Disposition:inline
场景三:因Content-Type不正确导致浏览器无法预览
此场景的特征是响应头正常,但浏览器仍然选择下载。
原因 文件的
Content-Type(也称为MIME类型)元数据设置错误或缺失。例如,将一个JPG图片文件的Content-Type错误地设置为application/octet-stream,浏览器会因无法识别其真实类型而选择下载。解决方案:为文件设置正确的
Content-Type通过控制台修改
登录OSS管理控制台,进入目标Bucket的页面。
找到目标文件,在其右侧操作列,选择。
在弹出的对话框中,找到
Content-Type字段,将其修改为正确的值。单击确定保存设置。
常见文件类型的正确Content-Type示例:
图片:
image/jpeg,image/png,image/gif,image/webp视频:
video/mp4PDF文档:
application/pdfHTML文件:
text/html纯文本:
text/plain
通过ossutil工具批量修改
# 将指定文件的Content-Type设置为image/jpeg ossutil set-meta oss://your-bucket/your-object.jpg Content-Type:image/jpeg
更多场景与解决方案
修改元数据后未生效:检查CDN缓存
如果您在OSS之上使用了内容分发网络CDN进行加速,当您修改了OSS文件的元数据(如 Content-Type 或 Content-Disposition)后,可能因为CDN节点仍缓存着旧的配置而无法立即生效。
解决方案:登录CDN控制台,对修改过的文件URL执行刷新操作,以清除CDN上的缓存。具体操作,请参见刷新和预热资源。
如何强制文件被下载而非预览?
与实现在线预览相反,如果您希望用户访问文件时总是触发下载,可以通过以下方式实现。
方法一(推荐):在OSS侧设置。按照场景二中的方法,将文件的
Content-Disposition元数据设置为attachment即可。此方法适用于对单个文件进行永久性设置。方法二:在CDN侧配置。如果您使用了CDN,可以在CDN控制台通过配置缓存配置的出站响应头,添加
Content-Disposition: attachment。此方法无需修改OSS源站文件,适合对特定路径或文件类型进行批量、灵活的规则配置。
浏览器本身不支持预览该文件格式
某些专业格式的文件(如 .psd、.ai、.sketch 等)本身不被主流浏览器支持在线预览。在这种情况下,即使OSS和CDN配置完全正确,浏览器也只会执行下载操作。
解决方案:为您的浏览器安装支持该文件格式的预览插件。或者,您也可以考虑使用专业的文档预览服务,如WebOffice在线预览。
附录:OSS域名强制下载规则速查表
当您发现文件被强制下载时,请检查 HTTP 响应头中的 x-oss-ec 字段值,并对照下表确认原因。
错误码 (x-oss-ec):规则的唯一标识,用于确认具体是哪条规则导致了下载。
Bucket创建时间:策略通常仅对在该时间之后创建的Bucket生效。在此之前创建的历 Bucket通常不受影响。
无论命中哪条规则,使用自定义域名均可完全规避强制下载。
OSS默认域名
您的Bucket所在地域 | Bucket创建时间 (在此之后创建即受影响) | 受影响的文件类型 | 错误码(x-oss-ec) |
华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华北 3(张家口)、华北5(呼和浩特)、华南1(深圳)、西南1(成都) | 2018年09月28日08:00 | text/html | |
华东5(南京-本地地域-关停中)、华东6(福州-本地地域-关停中)、华中1(武汉-本地地域)、华北6(乌兰察布)、华南2(河源)、华南3(广州)、美国(硅谷)、美国(弗吉尼亚)、 韩国(首尔)、新加坡、马来西亚(吉隆坡)、 印度尼西亚(雅加达)、菲律宾(马尼拉)、泰国(曼谷)、英国(伦敦)、阿联酋(迪拜) | 2019年09月25日12:00 | ||
中国香港 | 2019年11月25日14:00 | ||
华北5(呼和浩特) | 2019年09月23日17:00 |
| |
华北1(青岛)、西南1(成都) | 2019年09月24日11:00 | ||
华北 3(张家口) | 2019年09月24日17:00 | ||
华东2(上海)、华南1(深圳) | 2019年09月29日17:00 | ||
华北2(北京) | 2019年09月29日18:00 | ||
华东1(杭州) | 2019年09月30日15:00 | ||
华东6(福州-本地地域-关停中)、华北6(乌兰察布)、华南2(河源)、华南3(广州)、华东5(南京-本地地域-关停中)、华中1(武汉-本地地域) | 2025年12月22日10:00 |
| |
2022年10月09日00:00 |
传输加速域名
您的Bucket所在地域 | Bucket创建时间 (在此之后创建即受影响) | 受影响的文件类型 | 错误码(x-oss-ec) |
2020年12月31日00:00 | text/html | ||
阿联酋(迪拜) | 2021年01月07日12:00 | ||
马来西亚(吉隆坡)、英国(伦敦) | 2021年01月07日18:00 | ||
日本(东京)、印度尼西亚(雅加达)、德国(法兰克福) | 2021年01月08日18:00 | ||
美国(硅谷)、美国(弗吉尼亚)、新加坡 | 2021年01月14日12:00起 | ||
中国香港 | 2021年01月16日00:00 | ||
韩国(首尔)、菲律宾(马尼拉)、泰国(曼谷) | 2023年02月01日00:00 |