ブラウザを使用して Object Storage Service (OSS) のファイルにアクセスすると、オンラインプレビューが表示されずに強制的にダウンロードされることがあります。このトピックでは、その原因を迅速に特定し、正しいプレビュー動作を設定する方法について説明します。
問題のトラブルシューティング
ファイルが強制的にダウンロードされる場合は、curl コマンドを使用してファイルの URL のレスポンスヘッダーを確認できます。これにより、根本原因を迅速に特定できます。
目的:レスポンスヘッダーで強制ダウンロードを引き起こす特定のフィールドを確認します。
手順:お使いのコンピューターでターミナルまたはコマンドラインインターフェイスを開き、次のコマンドを実行します。<your file URL> を実際のファイルの URL に置き換えてください。
curl -I "<your file URL>"結果の分析:コマンドを実行した後、レスポンスヘッダーの x-oss-force-download フィールドと Content-Disposition フィールドを確認します。
レスポンスヘッダーに
x-oss-force-download: trueが含まれる場合:OSS のデフォルトドメイン名に対するセキュリティポリシーがトリガーされました。ソリューションについては、シナリオ 1:OSS セキュリティポリシーによる強制ダウンロードをご参照ください。レスポンスヘッダーに
Content-Disposition: attachmentが含まれ、x-oss-force-downloadが含まれない場合:ファイルのメタデータが添付ファイルとしてダウンロードされるように設定されています。ソリューションについては、シナリオ 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-meta oss://your-bucket/your-object.pdf Content-Disposition:inline
シナリオ 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-meta oss://your-bucket/your-object.jpg Content-Type:image/jpeg
その他のシナリオとソリューション
メタデータの変更が反映されない場合:CDN キャッシュの確認
Alibaba Cloud Content Delivery Network (CDN) を使用して OSS へのアクセスを高速化している場合、Content-Type や Content-Disposition などのファイルメタデータへの変更がすぐに反映されないことがあります。これは、CDN の POP (Point 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 | 韓国 (ソウル)、フィリピン (マニラ)、タイ (バンコク) | 有効化時間以降に転送アクセラレーションが有効になったバケット |