ブラウザで Object Storage Service (OSS) のオブジェクトにアクセスすると、オンラインでプレビューされずにダウンロードされることがあります。このトピックでは、その原因を特定し、オブジェクトの正しいプレビュー動作を設定する方法について説明します。
問題のトラブルシューティング
オブジェクトがダウンロードされる場合は、curl コマンドを使用してオブジェクト URL の応答ヘッダーを確認することで、根本原因を迅速に特定できます。
目的:応答ヘッダーに強制ダウンロードを引き起こす特定のフィールドが含まれているかどうかを確認します。
手順:お使いのコンピューターでターミナルまたはコマンドラインインターフェイス (CLI) を開き、次のコマンドを実行します。<your-object-url> を実際のオブジェクト URL に置き換えてください。
curl -I "<your-object-url>"結果の分析:コマンドを実行した後、応答内の x-oss-force-download フィールドと Content-Disposition フィールドを確認します。
応答ヘッダーに
x-oss-force-download: trueが含まれる場合:OSS のデフォルトドメイン名に対するセキュリティポリシーがトリガーされています。解決策については、「シナリオ 1:OSS のセキュリティポリシーによる強制ダウンロード」をご参照ください。応答ヘッダーに
x-oss-force-downloadは含まれず、Content-Disposition: attachmentが含まれる場合:オブジェクトのメタデータが、添付ファイルとしてダウンロードするように設定されています。解決策については、「シナリオ 2:オブジェクトのメタデータ設定による強制ダウンロード」をご参照ください。応答ヘッダーに前述のフィールドのいずれも含まれていないにもかかわらず、オブジェクトがダウンロードされる場合:ブラウザがオブジェクトのファイル形式を認識できない可能性があります。解決策については、「シナリオ 3:Content-Type が不適切なため、ブラウザがオブジェクトをプレビューできない」をご参照ください。
ソリューション
シナリオ 1:OSS のセキュリティポリシーによる強制ダウンロード
このシナリオは、応答ヘッダーに x-oss-force-download: true が含まれる場合に発生します。
原因:HTML などの特定のファイルタイプがブラウザで直接実行されることによるセキュリティリスクを防ぐため、OSS はセキュリティポリシーを適用しています。OSS のデフォルトドメイン名またはアクセラレーションエンドポイントを使用して、特定の時刻以降に作成されたバケット内のオブジェクトにアクセスすると、OSS は応答に
x-oss-force-download: trueヘッダーとContent-Disposition: attachmentヘッダーを追加します。これにより、ブラウザはオブジェクトを強制的にダウンロードします。ポリシーの詳細については、このトピックの最後にある「付録:OSS 強制ダウンロードルールのクイックリファレンス」をご参照ください。
解決策:カスタムドメイン名を使用して OSS リソースにアクセスします。
手順:
カスタムドメイン名をバケットにマッピングする:OSS コンソールにログインします。対象バケットの [ドメイン] ページで、ICP 登録済みのカスタムドメイン名をバケットにマッピングします。
CNAME レコードを設定する:Alibaba Cloud DNS などのドメイン名プロバイダーに移動します。カスタムドメイン名を OSS が提供する CNAME アドレスに向ける CNAME レコードを追加します。
新しいドメイン名を使用してオブジェクトにアクセスする:設定が完了したら、カスタムドメイン名の URL を使用してオブジェクトにアクセスします。これにより、オブジェクトをオンラインでプレビューできるようになります。
グローバルアクセスアクセラレーションが必要な場合は、カスタムドメイン名をアクセラレーションエンドポイントにマッピングできます。これにより、強制ダウンロードポリシーをバイパスし、高速アクセスを提供します。
詳細については、「カスタムドメイン名を使用した OSS へのアクセス」をご参照ください。
シナリオ 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 が不適切なため、ブラウザがオブジェクトをプレビューできない
このシナリオは、応答ヘッダーは正常であるにもかかわらず、ブラウザがオブジェクトをダウンロードする場合に発生します。
原因:オブジェクトの
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/mp4PDF ドキュメント:
application/pdfHTML ファイル:
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 キャッシュの確認
Alibaba Cloud Content Delivery Network (CDN) を使用して OSS へのアクセスを高速化している場合、Content-Type や Content-Disposition などのオブジェクトメタデータへの変更がすぐに反映されないことがあります。これは、CDN の POP (Points of Presence) が、古い設定のキャッシュされたバージョンを提供し続けている可能性があるためです。
解決策:CDN コンソールにログインし、変更されたオブジェクトの URL のキャッシュをパージします。詳細については、「リソースの更新とプリフェッチ」をご参照ください。
オブジェクトをプレビューせずに強制的にダウンロードさせる方法
ユーザーがオブジェクトにアクセスした際に常に強制的にダウンロードさせたい場合は、以下のいずれかの方法を使用できます。
方法 1 (推奨):OSS での設定。「シナリオ 2」で説明したように、オブジェクトの
Content-Dispositionメタデータをattachmentに設定します。この方法は、単一のオブジェクトに永続的な設定を適用するのに最適です。方法 2:CDN での設定。CDN を使用している場合は、CDN コンソールで
Content-Disposition: attachmentヘッダーを追加できます。これは、[キャッシュ設定] で送信レスポンスヘッダーとして設定できます。この方法は OSS のソースオブジェクトを変更する必要がなく、特定のパスやファイルタイプに基づいた柔軟な一括設定に役立ちます。
ブラウザがプレビュー用のファイル形式をサポートしていない
主要なブラウザは、.psd、.ai、.sketch などの一部の専門的なファイル形式のオンラインプレビューをサポートしていません。この場合、OSS と CDN の設定が正しくても、ブラウザはファイルをダウンロードします。
解決策:ファイル形式のプレビューをサポートするブラウザプラグインをインストールするか、WebOffice オンラインプレビューなどの専門的なドキュメントプレビューサービスを使用できます。
付録:OSS 強制ダウンロードルールのクイックリファレンス
オブジェクトがダウンロードされる場合は、HTTP 応答ヘッダーの x-oss-ec フィールドの値を確認します。その後、次の表を使用して原因を特定できます。
エラーコード (x-oss-ec):ダウンロードを引き起こしたルールの一意の ID。
バケット作成時刻:デフォルトドメイン名を使用する場合、このポリシーは通常、この時刻以降に作成されたバケットにのみ適用されます。この時刻より前に作成されたバケットは、通常影響を受けません。
転送アクセラレーション有効化時刻:転送アクセラレーションを有効にした後、このポリシーは通常、この時刻以降に転送アクセラレーションが有効になったバケットにのみ適用されます。この時刻より前に転送アクセラレーションが有効になったバケットは、通常影響を受けません。
カスタムドメイン名を使用すると、すべての強制ダウンロードルールがバイパスされます。
OSS のデフォルトドメイン名
ポリシーの有効期間 | バケットリージョン | 影響を受けるオブジェクト | 影響を受けるファイルタイプ | エラーコード |
2018年9月28日 08:00 | 中国 (杭州)、中国 (上海)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (深セン)、中国 (成都) | ポリシー発効後に作成されたバケット | text/html | |
2019年9月25日 12:00 | 中国 (南京-ローカルリージョン) (段階的廃止)中国 (ウランチャブ)、中国 (河源)、中国 (広州)、米国 (シリコンバレー)、米国 (バージニア)、韓国 (ソウル)、シンガポール、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、フィリピン (マニラ)、タイ (バンコク)、イギリス (ロンドン)、UAE (ドバイ) | ポリシー発効後に作成されたバケット | text/html | |
2019年11月25日 14:00 | 中国 (香港) | ポリシー発効後に作成されたバケット | text/html | |
2019年9月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年9月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年9月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年9月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年9月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年9月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月9日 00:00 | 2022年10月9日 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, image/heic |
アクセラレーションエンドポイント
ポリシーの有効期間 | バケットリージョン | 影響を受けるオブジェクト | 影響を受けるファイルタイプ | エラーコード |
2020年12月31日 00:00 | ポリシー発効後に転送アクセラレーションが有効化されたバケット | text/html | ||
2021年1月7日 12:00 | UAE (ドバイ) | ポリシー発効後に転送アクセラレーションが有効化されたバケット | ||
2021年1月7日 18:00 | マレーシア (クアラルンプール)、イギリス (ロンドン) | ポリシー発効後に転送アクセラレーションが有効化されたバケット | ||
2021年1月8日 18:00 | 日本 (東京)、インドネシア (ジャカルタ)、ドイツ (フランクフルト) | ポリシー発効後に転送アクセラレーションが有効化されたバケット | ||
2021年1月14日 12:00 | 米国 (シリコンバレー)、米国 (バージニア)、シンガポール | ポリシー発効後に転送アクセラレーションが有効化されたバケット | ||
2021年1月16日 00:00 | 中国 (香港) | ポリシー発効後に転送アクセラレーションが有効化されたバケット | ||
2022年10月9日 00:00 | 2022年10月9日 00:00 以降に初めて OSS をアクティベートしたユーザーによって作成されたバケット | |||
2023年2月1日 00:00 | 韓国 (ソウル)、フィリピン (マニラ)、タイ (バンコク) | ポリシー発効後に転送アクセラレーションが有効化されたバケット |