當您通過瀏覽器訪問Object Storage Service中的檔案時,如果檔案被強制下載而不是線上預覽,本文將協助您快速定位原因,並配置正確的檔案預覽行為。
問題排查
當檔案被強制下載時,您可以通過 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訪問檔案,即可實現線上預覽。
如果您需要Global Acceleration訪問,可以將自訂網域名綁定到傳輸加速網域名稱上,這同樣能規避強制下載策略並獲得加速效果。
詳細操作請參見通過自訂網域名訪問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通常不受影響。
開啟傳輸加速時間:開啟傳輸加速後,使用傳輸加速網域名稱時,策略通常僅對在該時間之後開啟傳輸加速的Bucket生效。在此之前開啟傳輸加速的Bucket通常不受影響。
無論命中哪條規則,使用自訂網域名均可完全規避強制下載。
OSS預設網域名稱
策略生效時間 | Bucket所在地區 | 受影響對象 | 受影響的檔案類型 | 錯誤碼 |
2018年09月28日08:00 | 華東1(杭州)、華東2(上海)、華北1(青島)、華北2(北京)、華北 3(張家口)、華北5(呼和浩特)、華南1(深圳)、西南1(成都) | 從策略生效時間起新建立的Bucket | text/html | |
2019年09月25日12:00 | 華東5(南京-本地地區-關停中)華北6(烏蘭察布)、華南2(河源)、華南3(廣州)、美國(矽谷)、美國(維吉尼亞)、 韓國(首爾)、新加坡、馬來西亞(吉隆坡)、 印尼(雅加達)、菲律賓(馬尼拉)、泰國(曼穀)、英國(倫敦)、阿聯酋(杜拜) | 從策略生效時間起新建立的Bucket | text/html | |
2019年11月25日14:00 | 中國香港 | 從策略生效時間起新建立的Bucket | text/html | |
2019年09月23日17:00 | 華北5(呼和浩特) | 從策略生效時間起新建立的Bucket | image/jpeg、image/gif、image/tiff、image/png、image/webp、image/svg+xml、image/bmp、image/x-ms-bmp、image/x-cmu-raster、image/exr、image/x-icon、image/heic、text/html | |
2019年09月24日11:00 | 華北1(青島)、西南1(成都) | 從策略生效時間起新建立的Bucket | image/jpeg、image/gif、image/tiff、image/png、image/webp、image/svg+xml、image/bmp、image/x-ms-bmp、image/x-cmu-raster、image/exr、image/x-icon、image/heic、text/html | |
2019年09月24日17:00 | 華北 3(張家口) | 從策略生效時間起新建立的Bucket | image/jpeg、image/gif、image/tiff、image/png、image/webp、image/svg+xml、image/bmp、image/x-ms-bmp、image/x-cmu-raster、image/exr、image/x-icon、image/heic、text/html | |
2019年09月29日17:00 | 華東2(上海)、華南1(深圳) | 從策略生效時間起新建立的Bucket | image/jpeg、image/gif、image/tiff、image/png、image/webp、image/svg+xml、image/bmp、image/x-ms-bmp、image/x-cmu-raster、image/exr、image/x-icon、image/heic、text/html | |
2019年09月29日18:00 | 華北2(北京) | 從策略生效時間起新建立的Bucket | image/jpeg、image/gif、image/tiff、image/png、image/webp、image/svg+xml、image/bmp、image/x-ms-bmp、image/x-cmu-raster、image/exr、image/x-icon、image/heic、text/html | |
2019年09月30日15:00 | 華東1(杭州) | 從策略生效時間起新建立的Bucket | image/jpeg、image/gif、image/tiff、image/png、image/webp、image/svg+xml、image/bmp、image/x-ms-bmp、image/x-cmu-raster、image/exr、image/x-icon、image/heic、text/html | |
2022年10月09日00:00 | 2022年10月09日00:00起首次開通OSS的使用者新建立的Bucket | |||
2025年12月22日10:00 | 華北6(烏蘭察布)、華南2(河源)、華南3(廣州)、華東5(南京-本地地區-關停中) | 從策略生效時間起新建立的Bucket | image/jpeg、image/gif、image/tiff、image/png、image/webp、image/svg+xml、image/bmp、image/x-ms-bmp、image/x-cmu-raster、image/exr、image/x-icon、image/heic |
傳輸加速網域名稱
策略生效時間 | Bucket所在地區 | 受影響對象 | 受影響的檔案類型 | 錯誤碼 |
2020年12月31日00:00 | 從策略生效時間起開啟傳輸加速的Bucket | text/html | ||
2021年01月07日12:00 | 阿聯酋(杜拜) | 從策略生效時間起開啟傳輸加速的Bucket | ||
2021年01月07日18:00 | 馬來西亞(吉隆坡)、英國(倫敦) | 從策略生效時間起開啟傳輸加速的Bucket | ||
2021年01月08日18:00 | 日本(東京)、印尼(雅加達)、德國(法蘭克福) | 從策略生效時間起開啟傳輸加速的Bucket | ||
2021年01月14日12:00 | 美國(矽谷)、美國(維吉尼亞)、新加坡 | 從策略生效時間起開啟傳輸加速的Bucket | ||
2021年01月16日00:00 | 中國香港 | 從策略生效時間起開啟傳輸加速的Bucket | ||
2022年10月09日00:00 | 2022年10月09日00:00起首次開通OSS的使用者新建立的Bucket | |||
2023年02月01日00:00 | 韓國(首爾)、菲律賓(馬尼拉)、泰國(曼穀) | 從策略生效時間起開啟傳輸加速的Bucket |