OSS ドメイン名を使用してブラウザからファイルにアクセスすると、プレビュー表示されずにファイルがダウンロードされます。このトピックでは、この現象が発生する理由と解決方法について説明します。
問題の説明
OSS ドメイン名を使用してブラウザから Object Storage Service (OSS) に保存されているファイルにアクセスすると、プレビュー表示されずにファイルが自動的にダウンロードされます。
原因
2019年9月29日18:00以降に作成されたバケットでは、OSS は OSS ドメイン名経由でアクセスされるオブジェクトにセキュリティポリシーを適用します。オブジェクトの Content-Type が次のいずれかの値と一致する場合、OSS はブラウザにファイルをインライン表示させるのではなくダウンロードさせるための HTTP レスポンスヘッダーを 2 つ追加します。
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
OSS はレスポンスに次のヘッダーを追加します。
x-oss-force-download: true
Content-Disposition: attachment
Content-Disposition: attachment ヘッダーは、レスポンスをインラインでレンダリングするのではなく、ファイルダウンロードとして扱うようブラウザーに指示します。
問題の例
例えば、2019 年 9 月 29 日 18:00 以降に作成されたバケットに、Content-Type が image/jpeg の apple.jpeg という名前のオブジェクトが含まれているとします。 ブラウザから標準の OSS ドメイン名を使用してこのオブジェクトにアクセスすると、OSS はレスポンスに前述の 2 つのヘッダーを追加します。 標準的なブラウザでは、Content-Disposition: attachment ヘッダーが認識され、プレビューではなくダウンロードが開始されます。
GET /apple.jpeg HTTP/1.1
HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Disposition: attachment
x-oss-force-download: true
ソリューション
OSS が強制ダウンロードのセキュリティポリシーを適用するのは、OSS ドメイン名経由のリクエストに限られます。ブラウザでファイルをプレビュー表示するには、代わりにカスタムドメイン名経由でオブジェクトにアクセスしてください。詳細については、「Map a custom domain name」をご参照ください。