ブラウザで Object Storage Service (OSS) のオブジェクトにアクセスすると、表示されずに自動的にダウンロードされることがあります。このトピックでは、その原因を特定し、意図したプレビュー動作を設定する方法について説明します。
問題のトラブルシューティング
オブジェクトが自動的にダウンロードされる場合は、curl コマンドを使用してその HTTP レスポンスヘッダーを調査し、原因を特定します。
目的:HTTP レスポンスヘッダーに、ダウンロードを強制する特定のフィールドが含まれているかどうかを確認します。
手順:ターミナルまたはコマンドプロンプトを開き、次のコマンドを実行します。<your-object-URL> を実際のオブジェクトの URL に置き換えてください。
curl -I "<your-object-URL>"
結果の分析:コマンドを実行した後、レスポンスで x-oss-force-download フィールドと Content-Disposition フィールドを確認します。
-
レスポンスヘッダーに
x-oss-force-download: trueが含まれる場合:これは、デフォルトドメイン名に対する OSS のセキュリティポリシーがトリガーされたことを意味します。シナリオ 1:セキュリティポリシーによる強制ダウンロードをご参照ください。 -
レスポンスヘッダーに
x-oss-force-downloadは含まれず、Content-Disposition: attachmentが含まれる場合:これは、オブジェクトのメタデータが明示的にダウンロードを指定していることを意味します。シナリオ 2:オブジェクトメタデータによる強制ダウンロードをご参照ください。 -
レスポンスヘッダーに上記のいずれのフィールドも含まれていないが、オブジェクトが依然としてダウンロードされる場合:これは通常、ブラウザがオブジェクトのコンテンツタイプを認識できないために発生します。シナリオ 3:不正な Content-Type によるプレビューの失敗をご参照ください。
ソリューション
シナリオ 1:セキュリティポリシーによる強制ダウンロード
このシナリオは、レスポンスヘッダーに x-oss-force-download: true が含まれる場合に適用されます。
-
原因:HTML などの特定の種類のファイルがブラウザで直接実行されることによる潜在的なセキュリティリスクを防ぐため、OSS は
x-oss-force-download: trueおよびContent-Disposition: attachmentレスポンスヘッダーを追加してファイルのダウンロードを強制します。この動作は、OSS のデフォルトドメイン名または転送アクセラレーションドメイン名を使用して、特定の時点以降に作成されたバケットにアクセスする際に、一部のリージョンの一部のファイルタイプに適用されます。ポリシーの詳細については、「付録:OSS の強制ダウンロードルール」をご参照ください。
-
解決策:カスタムドメイン名を使用して OSS リソースにアクセスする。
-
手順:
-
バケットにカスタムドメイン名をバインドする:OSS コンソールにログインします。対象バケットの [ドメイン名] ページで、有効な ICP 登録があるカスタムドメイン名をバケットにバインドします。
-
CNAME レコードを設定する:Alibaba Cloud DNS などの DNS プロバイダーに移動し、カスタムドメイン名を OSS が提供する CNAME アドレスにマッピングする CNAME レコードを追加します。
-
新しいドメイン名を使用してオブジェクトにアクセスする:設定が完了したら、カスタムドメイン名の URL を使用してオブジェクトにアクセスします。これにより、オブジェクトはブラウザでプレビューされます。
-
-
グローバルなアクセスアクセラレーションのためには、カスタムドメイン名を転送アクセラレーションドメイン名にバインドしてください。このアプローチは、強制ダウンロードポリシーをバイパスし、アクセラレーションの利点を提供します。
-
詳細な手順については、「カスタムドメイン名のマッピング」をご参照ください。
シナリオ 2:オブジェクトメタデータによる強制ダウンロード
このシナリオは、レスポンスヘッダーに Content-Disposition: attachment が含まれるが、x-oss-force-download フィールドが含まれない場合に適用されます。
-
原因:オブジェクトのメタデータ内の
Content-Dispositionフィールドが明示的にattachmentに設定されています。この設定は、ブラウザに対してオブジェクトをインラインで表示するのではなく、添付ファイルとしてダウンロードするように指示します。この設定は、一時的なダウンロードリンクを生成するためによく使用されます。削除されない場合、後続のすべてのアクセス試行でダウンロードがトリガーされます。 -
解決策:オブジェクトの
Content-Dispositionメタデータをinlineに変更する。-
コンソールでの変更
-
OSS コンソールにログインし、対象バケットの ページに移動します。
-
対象のオブジェクトを見つけます。[操作] 列で、 を選択します。
-
表示されたダイアログボックスで、
Content-Dispositionフィールドを見つけ、その値をinlineに変更します。 -
[OK] をクリックして設定を保存します。
-
-
ossutil を使用した一括更新
# 指定されたオブジェクトの Content-Disposition を inline に設定します。 ossutil set-props oss://your-bucket/your-object.pdf --content-disposition inline --metadata-directive update
-
シナリオ 3:不正な Content-Type によるプレビューの失敗
このシナリオでは、HTTP レスポンスヘッダーは正常ですが、ブラウザは依然としてオブジェクトをダウンロードします。
-
原因:オブジェクトのメタデータ内の
Content-Type(MIME タイプとも呼ばれる) が正しくないか、欠落しています。たとえば、JPG イメージのContent-Typeがapplication/octet-streamの場合、ブラウザはコンテンツタイプを認識できないため、オブジェクトをダウンロードします。 -
解決策:オブジェクトに正しい
Content-Typeを設定する。-
コンソールでの変更
-
OSS コンソールにログインし、対象バケットの ページに移動します。
-
対象のオブジェクトを見つけます。[操作] 列で、 を選択します。
-
表示されたダイアログボックスで、
Content-Typeフィールドを見つけ、その値を正しいものに変更します。 -
[OK] をクリックして設定を保存します。
一般的なオブジェクトタイプに対する正しい Content-Type 値の例:
-
イメージ:
image/jpeg、image/png、image/gif、image/webp -
ビデオ:
video/mp4 -
PDF ドキュメント:
application/pdf -
HTML ファイル:
text/html -
プレーンテキスト:
text/plain
-
-
ossutil を使用した一括更新
# 指定されたオブジェクトの Content-Type を image/jpeg に設定します。 ossutil set-props oss://your-bucket/your-object.jpg --content-type image/jpeg --metadata-directive update
-
その他のシナリオとソリューション
メタデータの変更が反映されない:CDN キャッシュの確認
Content Delivery Network (CDN) を使用して OSS へのアクセスを高速化している場合、Content-Type や Content-Disposition などのオブジェクトメタデータへの変更がすぐに反映されないことがあります。これは、CDN ノードが古いヘッダーを持つキャッシュされたコンテンツを提供し続けているためです。
解決策:CDN コンソールにログインし、変更されたオブジェクトの URL をパージして CDN キャッシュをクリアします。詳細な手順については、「リソースのパージとプリフェッチ」をご参照ください。
オブジェクトの強制ダウンロード
オブジェクトをプレビューせずに強制的にダウンロードさせるには、次のいずれかの方法を使用します。
-
方法 1 (推奨):OSS 側での設定。シナリオ 2で説明したように、オブジェクトの
Content-Dispositionメタデータをattachmentに設定します。この方法は、個々のオブジェクトに永続的なダウンロード設定を適用するのに最適です。 -
方法 2: CDN 側の構成。CDN を使用する場合、[キャッシュ設定] で HTTP レスポンスヘッダーを構成することにより、CDN コンソールに
Content-Disposition: attachmentヘッダーを追加できます。この方法では、OSS オリジン内のオブジェクトを変更する必要はなく、特定のパスまたはファイルタイプに対してバッチおよび柔軟なルール構成が可能です。
ブラウザプレビューでサポートされていないフォーマット
主要なブラウザは、.psd、.ai、.sketch などの一部の特殊なオブジェクトフォーマットのプレビューをネイティブにサポートしていません。これらの場合、OSS と CDN の設定が正しくても、ブラウザはオブジェクトをダウンロードします。
解決策:特定のオブジェクトフォーマットのプレビューをサポートするブラウザ拡張機能またはプラグインをインストールします。あるいは、WebOffice オンラインプレビューなどの専門的なドキュメントプレビューサービスを使用することもできます。
付録:OSS の強制ダウンロードルール
オブジェクトが予期せずダウンロードされる場合、HTTP レスポンスヘッダーの x-oss-ec フィールドを確認し、以下の表で一致するエントリを見つけて原因を特定してください。
-
エラーコード (x-oss-ec):ダウンロードをトリガーしたルールの一意の識別子。
-
バケット作成時間:デフォルトドメイン名の場合、ポリシーはポリシーの有効開始時刻以降に作成されたバケットに適用されます。この時刻より前に作成されたバケットは通常影響を受けません。
-
転送アクセラレーション有効化時刻:転送アクセラレーションドメイン名の場合、ポリシーはポリシーの有効開始時刻以降に機能が有効化されたバケットに適用されます。この時刻より前に転送アクセラレーションが有効化されていたバケットは通常影響を受けません。
どのルールに一致するかにかかわらず、カスタムドメイン名を使用することで、すべての強制ダウンロードをバイパスできます。
OSS のデフォルトドメイン名
|
有効開始時刻 |
バケットリージョン |
影響を受けるオブジェクト |
影響を受けるオブジェクトタイプ |
エラーコード |
|
2018-09-28 08:00 |
中国 (杭州)、中国 (上海)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (深セン)、および中国 (成都) |
有効開始時刻以降に作成されたバケット |
text/html |
|
|
2019-09-25 12:00 |
中国 (南京-ローカルリージョン、サービス終了予定)中国 (ウランチャブ)、中国 (河源)、中国 (広州)、米国 (シリコンバレー)、米国 (バージニア)、韓国 (ソウル)、シンガポール、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、フィリピン (マニラ)、タイ (バンコク)、イギリス (ロンドン)、および UAE (ドバイ) |
有効開始時刻以降に作成されたバケット |
text/html |
|
|
2019-11-25 14:00 |
香港 (中国) |
有効開始時刻以降に作成されたバケット |
text/html |
|
|
2019-09-23 17:00 |
中国 (フフホト) |
有効開始時刻以降に作成されたバケット |
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 |
中国 (青島) および中国 (成都) |
有効開始時刻以降に作成されたバケット |
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 |
中国 (張家口) |
有効開始時刻以降に作成されたバケット |
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 |
中国 (上海) および中国 (深セン) |
有効開始時刻以降に作成されたバケット |
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 |
中国 (北京) |
有効開始時刻以降に作成されたバケット |
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 |
中国 (杭州) |
有効開始時刻以降に作成されたバケット |
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 を有効にしたユーザーによって作成されたバケット |
|||
|
2025-12-22 10:00 |
中国 (ウランチャブ)、中国 (河源)、中国 (広州)、中国 (南京-ローカルリージョン、サービス終了予定) |
有効開始時刻以降に作成されたバケット |
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, and image/heic |
|
|
2026-03-25 10:00 |
有効開始時刻以降に作成されたバケット |
ファイル名が .xml で終わるオブジェクト、または Content-Type が application/xml または text/xml のオブジェクト |
N/A |
転送アクセラレーションドメイン名
|
有効開始時刻 |
バケットリージョン |
影響を受けるオブジェクト |
影響を受けるオブジェクトタイプ |
エラーコード |
|
2020-12-31 00:00 |
有効開始時刻以降に転送アクセラレーションが有効化されたバケット |
text/html |
||
|
2021-01-07 12:00 |
UAE (ドバイ) |
有効開始時刻以降に転送アクセラレーションが有効化されたバケット |
||
|
2021-01-07 18:00 |
マレーシア (クアラルンプール) およびイギリス (ロンドン) |
有効開始時刻以降に転送アクセラレーションが有効化されたバケット |
||
|
2021-01-08 18:00 |
日本 (東京)、インドネシア (ジャカルタ)、およびドイツ (フランクフルト) |
有効開始時刻以降に転送アクセラレーションが有効化されたバケット |
||
|
2021-01-14 12:00 |
米国 (シリコンバレー)、米国 (バージニア)、およびシンガポール |
有効開始時刻以降に転送アクセラレーションが有効化されたバケット |
||
|
2021-01-16 00:00 |
香港 (中国) |
有効開始時刻以降に転送アクセラレーションが有効化されたバケット |
||
|
2022-10-09 00:00 |
2022-10-09 00:00 以降に初めて OSS を有効にしたユーザーによって作成されたバケット |
|||
|
2023-02-01 00:00 |
韓国 (ソウル)、フィリピン (マニラ)、およびタイ (バンコク) |
有効開始時刻以降に転送アクセラレーションが有効化されたバケット |