オブジェクトの名前は、object Storage Service (OSS) バケット内のオブジェクトを一意に識別します。 多くの場合、OSSのオブジェクトは、UUIDに基づいて、非直感的な方法で名前が付けられます。 オブジェクトのダウンロード時に、より意味のあるわかりやすい名前を付けたい場合は、署名付きURLでresponse-content-disposition
パラメーターを設定して、オブジェクトの特定のダウンロードの名前を指定するか、オブジェクトのContent-Disposition
メタデータヘッダーを変更して、オブジェクトのすべてのダウンロードの名前を指定できます。
ダウンロードしたオブジェクトの命名規則
ダウンロードされたオブジェクトの名前は、次のルールに基づいて決定されます。
response-content-disposition
パラメーターresponse-content-disposition
パラメーターを含む署名付きURLを使用してオブジェクトをダウンロードする場合、ダウンロードされたオブジェクトは、Content-Dispositionメタデータヘッダーの値に関係なく、パラメーターで指定された名前を持ちます。Metadata header
Content-Disposition
署名付きURLにresponse-content-dispositionパラメーターが指定されていない場合、OSSはダウンロードされたオブジェクトの名前としてContent-Dispositionメタデータヘッダーの値を使用します。OSSオブジェクトキー response-content-dispositionとContent-Dispositionが指定されていない場合、ダウンロードされたオブジェクトはOSSのオブジェクトキーと同じ名前になります。
署名付きURLを使用して、オブジェクトの特定のダウンロードの名前を指定します。
署名付きURLは、OSSのプライベートオブジェクトへの時間制限付きアクセスをユーザーに許可します。 response-content-disposition
パラメーターをオブジェクトの署名付きURLに追加して、オブジェクトのContent-Disposition
メタデータヘッダーを変更する必要なく、URLを使用してダウンロードするときにオブジェクトの別の名前を指定できます。
シナリオ
オブジェクト共有: 署名付きURLを使用してオブジェクトを別のユーザーと共有し、ユーザーがオブジェクトをダウンロードしたときに表示される名前を指定できます。 この方法では、元のオブジェクトキーは公開されません。
パーソナライズされたダウンロード: 署名付きURLを使用して、ダウンロードしたオブジェクトのパーソナライズされた名前を異なるユーザーに表示できます。 たとえば、ダウンロードしたオブジェクトの名前をユーザー名または注文番号でカスタマイズできます。
テストとプレビュー: 署名付きURLを使用して、元のオブジェクトダウンロード名またはデフォルトのオブジェクトダウンロード名を変更せずに、テストまたはプレビュー用のオブジェクトを共有できます。
権限
オブジェクトダウンロード用の署名付きURLを生成するには、oss:GetObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
使用上の注意
署名付きURLを作成するときに、
response-content-disposition
パラメーターを指定できます。 このパラメーターは、署名付きURLにのみ適用されます。特殊文字によるエラーを避けるため、必ずURLエンコードされたオブジェクト名を指定してください。
署名付きURLには有効期間があり、有効期限が切れた後は使用できません。 署名付きURLをユーザーに提供する場合は、URLの有効期間を考慮してください。
Content-Disposition
メタデータヘッダーがオブジェクトに指定され、response-content-disposition
パラメーターを含む署名付きURLを使用してオブジェクトがダウンロードされた場合、Content-Dispositionメタデータヘッダーは無視され、response-content-dispositionパラメーターの値はダウンロードされたオブジェクトの名前として使用されます。
サンプルコード
Pythonの次のサンプルコードは、署名付きURLを作成するときにresponse-content-disposition
パラメーターを指定する方法の例を示しています。
# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
urllib.parseインポート見積もりから
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', '<bucket_name>')
# オブジェクトのフルパスを指定します。 例: exampledir/exampleobject.txt。 バケット名をフルパスに含めないでください。
object_name = 'exampledir/exampleobject.txt'
# オブジェクトのダウンロード時に表示するオブジェクト名を作成します。 名前をURLエンコードする必要があります。
download_filename = quote('desired-filename.txt ')
# ダウンロードしたオブジェクトの名前を指定します。 この名前は、ダウンロード要求に対する応答のContent-Dispositionヘッダーの値です。
params = {'response-content-disposition': f'attachment; filename="{download_filename}" '}
# 署名付きURLの有効期間を3,600秒に設定します。
# slash_safeパラメーターをTrueに設定して、OSSがオブジェクトのフルパスのスラッシュ (/) をエスケープ文字として識別しないようにします。 これにより、生成された署名付きURLを使用してオブジェクトをダウンロードできます。
url = bucket.sign_url('GET', object_name, 3600, params=params, slash_safe=True)
print ('Signed URL:', url)
他のプログラミング言語のコード例については、「オブジェクトとオブジェクトURLの共有」をご参照ください。
オブジェクトメタデータを設定して、オブジェクトのすべてのダウンロードの名前を指定します。
Content-Disposition
メタデータヘッダーは、ダウンロード時のオブジェクトのデフォルト名を指定します。 オブジェクトをダウンロードするためのすべてのリクエストに対してオブジェクトに新しい名前を付ける場合は、Content-Disposition
メタデータヘッダーを新しい名前に設定できます。 Content-Disposition
ヘッダーで指定された新しい名前は、response-content-disposition
パラメーターを含まないすべてのダウンロードリクエストに適用されます。
シナリオ
長期データ共有: オブジェクトが毎回同じオブジェクト名で複数回ダウンロードされることが予想される場合、この目標を達成するためにメタデータヘッダーを変更できます。
アーカイブ: パブリックドキュメントライブラリまたはリソースセンターのシナリオでは、すべてのドキュメントまたはリソースに、識別とアーカイブを容易にするための固定されたわかりやすい名前が必要になる場合があります。
定期的な更新: ユーザーが同じURLを使用し、一貫した名前で定期的に更新される最新バージョンのドキュメントまたはソフトウェアをダウンロードしたい場合は、OSSでドキュメントまたはソフトウェアのメタデータヘッダーを設定できます。
権限
オブジェクトメタデータを変更するには、oss:PutObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
使用上の注意
Content-Disposition
ヘッダーを設定するときに、オブジェクト名に含まれる可能性のある特殊文字を考慮してください。 URLエンコードの使用を推奨します。Content-Disposition
ヘッダーの変更は、PUTメソッドを使用して既存のオブジェクトメタデータを上書きすることによって実装されます。 オブジェクトのContent-Disposition
ヘッダーのみを更新し、他のすべてのメタデータヘッダーを変更しない場合は、オブジェクトの既存のメタデータを照会し、ヘッダーを更新し、更新されたメタデータコレクションを使用してPUTリクエストを開始する必要があります。オブジェクトの再アップロードを回避し、既存のデータを上書きするリスクを減らすために、
PutObject
の代わりにupdate_object_meta
を使用してオブジェクトメタデータを更新することを推奨します。
サンプルコード
Pythonの次のサンプルコードは、Content-Disposition
ヘッダーの値を変更する方法の例を示しています。
# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
urllib.parseインポート見積もりから
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', '<bucket_name>')
# オブジェクトのフルパスを指定します。 例: exampledir/exampleobject.txt。 バケット名をフルパスに含めないでください。
object_name = 'exampledir/exampleobject.txt'
# オブジェクトのダウンロード時に表示するオブジェクト名を作成します。 名前をURLエンコードする必要があります。
download_filename = quote('desired-filename.txt ')
# メタデータを更新して、ダウンロードしたオブジェクトの名前を指定します。
# 注意: この更新操作は、オブジェクトのすべてのメタデータヘッダーを上書きします。
# 他のすべての既存のメタデータヘッダーの値を保持する場合は、最初に既存のメタデータヘッダーを取得する必要があります。
# 次に、目的のヘッダーを変更し、変更したメタデータコレクションを使用してオブジェクトのメタデータを更新します。
headers = {'Content-Disposition': f'attachment; filename="{download_filename}" '}
bucket.update_object_meta(object_name, headers)
他のプログラミング言語のコード例については、「オブジェクトメタデータの管理」をご参照ください。