このトピックでは、バケット内または同じリージョン内のバケット間でObject Storage Service (OSS) オブジェクトをコピーする方法について説明します。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。
オブジェクトをコピーするには、ソースオブジェクトに対する読み取り権限と、宛先バケットに対する読み取りおよび書き込み権限が必要です。
ソースバケットとターゲットバケットに保持ポリシーが設定されていないことを確認します。 それ以外の場合、エラーメッセージ指定したオブジェクトは不変です。 が返されます。
ソースバケットと宛先バケットは同じリージョンにある必要があります。 たとえば、中国 (杭州) リージョンにあるバケットから中国 (青島) リージョンにある別のバケットにオブジェクトをコピーすることはできません。
例
bucket.copy_object
操作を呼び出してオブジェクトをコピーし、:meta_ディレクティブ
パラメーターを使用してオブジェクトメタデータを指定します。 オブジェクトをコピーすると、メタパラメーターが指定されているかどうかに基づいて、宛先オブジェクトのメタデータが決定されます。
metaパラメーターが指定されていない場合、ソースオブジェクトのメタデータがターゲットオブジェクトにコピーされます。
metaパラメーターが指定されている場合、指定されたオブジェクトメタデータが宛先オブジェクトのメタデータとして使用されます。
次のコードは、オブジェクトをコピーする方法の例を示しています。
'aliyun/oss 'が必要です
client = Aliyun::OSS::Client.new (
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
エンドポイント: 'https:// oss-cn-hangzhou.aliyuncs.com '、
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
access_key_id: ENV['OSS_ACCESS_KEY_ID '] 、
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET ']
)
# バケットの名前を指定します。 例: examplebucket.
bucket = client.get_bucket('examplebucket')
# オブジェクトとオブジェクトのメタデータをコピーします。
bucket.copy_object (
# この例では、ソースバケットのsrcobject.txtは、ターゲットバケットのdestobject.txtにコピーされます。
'destobject.txt '、'srcobject.txt' 、
: meta_directive => Aliyun::OSS::MetaDirective::COPY)
# オブジェクトをコピーし、元のメタデータを上書きします。
bucket.copy_object (
'destobject.txt '、'srcobject.txt' 、
: metas => {'year' => '2017'} 、
: meta_directive => Aliyun::OSS::MetaDirective::REPLACE)
参考資料
オブジェクトをコピーするために呼び出すことができるAPI操作の詳細については、「CopyObject」をご参照ください。