ブラウザ経由で OSS オブジェクトにアクセスすると、インラインプレビューではなくダウンロードされる場合があります。本ガイドを使用して原因を特定し、正しいプレビュー動作を設定してください。
トラブルシューティング
オブジェクトがプレビューされずにダウンロードされる場合は、 curl を実行してレスポンスヘッダーを調べ、原因を特定してください。
目的:レスポンスヘッダーに強制ダウンロードを引き起こすフィールドが含まれているかどうかを確認します。
手順: ターミナルで次のコマンドを実行します。<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 が含まれている場合に発生します。
原因: OSS は、特定のファイルタイプ (HTML など) がブラウザーで実行されるのを防ぐために、
x-oss-force-download: trueおよびContent-Disposition: attachmentヘッダーを追加します。このポリシーは、特定の日付以降に作成されたバケット内のオブジェクトに OSS のデフォルトドメイン名 または アクセラレーションエンドポイント を介してアクセスする場合に適用されます。ポリシーの詳細については、「付録: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 タイプ) が欠落しているか、正しくないためです。例えば、Content-Typeがapplication/octet-streamに設定された JPG 画像は、ブラウザがファイルタイプを識別できないためダウンロードされます。解決方法:オブジェクトに正しい
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変更方法:
CopyObjectSDKCopyObjectを使用してオブジェクトをコピーする場合、デフォルトでCOPYメタデータディレクティブが使用されます。このディレクティブは、コピー元オブジェクトのメタデータをコピー先オブジェクトにそのままコピーし、コピー先オブジェクトのファイル名の拡張子に基づいてContent-Typeを自動的に推測または更新しません。この場合、リクエストでx-oss-metadata-directiveをREPLACEに設定せずにContent-Typeのみを指定した場合、その設定は有効にならず、コピー先オブジェクトはコピー元オブジェクトのContent-Typeを保持します。x-oss-metadata-directiveの有効な値:COPY(デフォルト): ソースオブジェクトのメタデータをコピーし、リクエストで指定されたContent-Typeなどのメタデータは無視します。REPLACEは、ソースオブジェクトのメタデータをリクエストで指定されたメタデータに置き換えます。
CopyObjectを呼び出す際、宛先オブジェクトのContent-Typeを指定の値に更新するには、Content-Typeとx-oss-metadata-directive: REPLACEの両方を指定する必要があります。 次のサンプルコードでは、Python SDK を使用します。import oss2 # バケットを初期化します。 auth = oss2.Auth('<your-access-key-id>', '<your-access-key-secret>') bucket = oss2.Bucket(auth, '<your-endpoint>', '<your-bucket-name>') # オブジェクトをコピーする際に Content-Type を設定し、メタデータディレクティブを REPLACE に設定します。 headers = { "Content-Type": "image/jpeg", "x-oss-metadata-directive": "REPLACE" } bucket.copy_object('<source-bucket-name>', 'source-object.png', 'target-object.jpg', headers=headers)別の方法として、
update_object_metaメソッドを使用して既存のオブジェクトのContent-Typeを直接更新するか、put_objectを使用してオブジェクトをアップロードするときにContent-Typeを指定することもできます。
シナリオ4:HTTPSを強制するバケットポリシーによるプレビューの失敗
このシナリオは、HTTP 経由のリクエストで、メッセージ Access denied by bucket policy. を含む 403 AccessDenied エラーが返される場合に発生します。オブジェクトはプレビューもダウンロードもされず、HTTPS 経由でリクエストすると、同じオブジェクトが期待どおりに返されます。
原因: バケットのバケットポリシーに
acs:SecureTransport条件が含まれているため、HTTPS 経由で送信されないリクエストは拒否されます。オブジェクト URL への HTTP リクエストは、オブジェクトが返される前にバケットポリシーによって拒否されるため、ブラウザでプレビューするものがありません。カスタムドメイン名を使用するリクエストは、OSS のデフォルトドメイン名を使用するリクエストと同じバケットポリシーの対象となります。原因の確認:
OSS コンソールにログインします。対象のバケットをクリックし、左側のナビゲーションペインでをクリックします
ポリシーリストに、条件 がアクセス方法を HTTP に制限し、効果 が 拒否 であるポリシーが含まれているかどうかを確認します。
または、コマンドラインからバケットポリシーを照会します。
aliyun ossutil api get-bucket-policy --bucket <bucket-name>
解決策 1 (推奨): HTTPS 経由でオブジェクトにアクセスする。 オブジェクト URL の
http://をhttps://に置き換え、オブジェクトを再度リクエストします。 これにより、オブジェクトがブラウザーでプレビューされ、バケットは引き続き HTTP リクエストを拒否します。解決策 2: バケットポリシーの変更。 業務上 HTTP アクセスが必要な場合は、左側のナビゲーションペインで をクリックし、
acs:SecureTransport条件を含むポリシーを削除または変更します。 HTTP リクエストを許可すると、データがプレーンテキストで送信されるため、送信セキュリティが低下します。 ポリシーを変更する前に、影響を評価してください。
その他のユースケースと解決方法
メタデータの変更が反映されない:CDNキャッシュを確認する
CDN を使用して OSS へのアクセスを高速化する場合、CDN ノードがキャッシュされたバージョンを配信し続けるため、Content-Type や Content-Disposition などのメタデータの変更がすぐに有効にならない場合があります。
解決方法:CDN コンソールで、変更されたファイルの URL の CDN キャッシュをパージします。「リソースの更新とプリフェッチ」をご参照ください。
オブジェクトをプレビューではなく強制的にダウンロードさせる方法
ユーザーがファイルにアクセスした際に常にダウンロードを強制するには、次のいずれかの方法を使用します。
方法 1 (推奨): OSS での設定。 「シナリオ 2」で説明されているように、ファイルの
Content-Dispositionメタデータをattachmentに設定します。 永続的なファイルごとの設定に最適です。方法 2: CDN での設定。 CDN コンソールの [キャッシュ] で、送信レスポンスヘッダーとして
Content-Disposition: attachmentを追加します。これにより、ソースファイルの変更が不要になり、パスまたはファイルタイプによる一括設定もサポートされます。
プレビューに非対応のファイル形式
ブラウザでは、.psd、.ai、.sketch のような特定のプロフェッショナルなフォーマットをプレビューできません。これらのファイルは、OSS と CDN の設定に関係なくダウンロードされます。
解決方法:該当形式のブラウザ拡張機能をインストールするか、WebOffice Online Preview などのドキュメントプレビューサービスを使用します。
付録: OSS 強制ダウンロードルールのクイックリファレンス
レスポンスヘッダーの x-oss-ec の値を確認し、以下の表を使用して一致するルールを特定します。
エラーコード (x-oss-ec):ダウンロードをトリガーしたルールを識別します。
バケット作成時刻:ポリシーは通常、この時刻以降に作成されたバケットにのみ適用されます。従来のバケットは通常影響を受けません。
転送アクセラレーション有効化時刻:ポリシーは通常、この時刻以降に転送アクセラレーションが有効化されたバケットにのみ適用されます。それ以前に転送アクセラレーションが有効化されたバケットは通常影響を受けません。
カスタムドメイン名を使用すると、すべての強制ダウンロードルールを回避できます。
OSSデフォルトドメイン名
ポリシーの発効時刻 | リージョン | 影響を受けるリソース | 影響を受けるファイルタイプ | エラーコード |
2018年9月28日 08:00 | China (Hangzhou)、China (Shanghai)、China (Qingdao)、China (Beijing)、China (Zhangjiakou)、China (Hohhot)、China (Shenzhen)、China (Chengdu) | ポリシー発効後に作成されたバケット | text/html | |
2019年9月25日 12:00 | China (Nanjing - Local Region - Phasing Out)China (Ulanqab)、China (Heyuan)、China (Guangzhou)、US (Silicon Valley)、US (Virginia)、South Korea (Seoul)、Singapore、Malaysia (Kuala Lumpur)、Indonesia (Jakarta)、Philippines (Manila)、Thailand (Bangkok)、UK (London)、UAE (Dubai) | ポリシー発効後に作成されたバケット | text/html | |
2019年11月25日 14:00 | China (Hong Kong) | ポリシー発効後に作成されたバケット | text/html | |
2019年9月23日 17:00 | China (Hohhot) | ポリシー発効後に作成されたバケット | 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 | China (Qingdao)、China (Chengdu) | ポリシー発効後に作成されたバケット | 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 | China (Zhangjiakou) | ポリシー発効後に作成されたバケット | 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 | China (Shanghai)、China (Shenzhen) | ポリシー発効後に作成されたバケット | 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 | China (Beijing) | ポリシー発効後に作成されたバケット | 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 | China (Hangzhou) | ポリシー発効後に作成されたバケット | 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 | China (Ulanqab)、China (Heyuan)、China (Guangzhou)、China (Nanjing - Local Region - Phasing Out) | ポリシー発効後に作成されたバケット | 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 (Dubai) | ポリシー発効後に転送アクセラレーションが有効化されたバケット | ||
2021年1月7日 18:00 | Malaysia (Kuala Lumpur)、UK (London) | ポリシー発効後に転送アクセラレーションが有効化されたバケット | ||
2021年1月8日 18:00 | Japan (Tokyo)、Indonesia (Jakarta)、Germany (Frankfurt) | ポリシー発効後に転送アクセラレーションが有効化されたバケット | ||
2021年1月14日 12:00 | US (Silicon Valley)、US (Virginia)、Singapore | ポリシー発効後に転送アクセラレーションが有効化されたバケット | ||
2021年1月16日 00:00 | China (Hong Kong) | ポリシー発効後に転送アクセラレーションが有効化されたバケット | ||
2022年10月9日 00:00 | 2022年10月9日 00:00以降に初めてOSSを有効化したユーザーによって作成されたバケット | |||
2023年2月1日 00:00 | South Korea (Seoul)、Philippines (Manila)、Thailand (Bangkok) | ポリシー発効後に転送アクセラレーションが有効化されたバケット |