すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:ダウンロードしたオブジェクトの名前を指定する

最終更新日:Feb 21, 2024

オブジェクトの名前は、object Storage Service (OSS) バケット内のオブジェクトを一意に識別します。 多くの場合、OSSのオブジェクトは、UUIDに基づいて、非直感的な方法で名前が付けられます。 オブジェクトのダウンロード時に、より意味のあるわかりやすい名前を付けたい場合は、署名付きURLでresponse-content-dispositionパラメーターを設定して、オブジェクトの特定のダウンロードの名前を指定するか、オブジェクトのContent-Dispositionメタデータヘッダーを変更して、オブジェクトのすべてのダウンロードの名前を指定できます。

ダウンロードしたオブジェクトの命名規則

ダウンロードされたオブジェクトの名前は、次のルールに基づいて決定されます。

  1. response-content-dispositionパラメーターresponse-content-dispositionパラメーターを含む署名付きURLを使用してオブジェクトをダウンロードする場合、ダウンロードされたオブジェクトは、Content-Dispositionメタデータヘッダーの値に関係なく、パラメーターで指定された名前を持ちます。

  2. Metadata header Content-Disposition署名付きURLにresponse-content-dispositionパラメーターが指定されていない場合、OSSはダウンロードされたオブジェクトの名前としてContent-Dispositionメタデータヘッダーの値を使用します。

  3. 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) 

他のプログラミング言語のコード例については、「オブジェクトメタデータの管理」をご参照ください。