オブジェクトのコンテンツを変更することなく、ソースバケットから同じリージョンにあるターゲットバケットにオブジェクトをコピーできます。
制限事項
異なるリージョンにあるバケット間でオブジェクトをコピーすることはできません。 たとえば、中国 (杭州) リージョンのバケットから中国 (上海) リージョンのバケットにオブジェクトをコピーすることはできません。
追加可能なオブジェクトはコピーできません。
使用上の注意
大量のオブジェクトをコピーし、宛先オブジェクトのストレージクラスをDeep Cold Archiveに設定する場合、高いPUTリクエスト料金が発生します。 ライフサイクルルールを設定して、オブジェクトのストレージクラスをDeep Cold Archiveに変換することを推奨します。 これにより、PUTリクエスト料金を削減できます。 ライフサイクルルールの詳細については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。
ソースオブジェクトに対する読み取り権限と、宛先バケットに対する読み取りおよび書き込み権限が必要です。 それ以外の場合、コピー操作は失敗します。
ソースバケットとターゲットバケットに保持ポリシーが設定されていないことを確認します。 それ以外の場合、次のエラーメッセージが返されます: 指定したオブジェクトは不変です。
デフォルトでは、宛先バケット内の既存のオブジェクトと同じ名前のオブジェクトをコピーすると、コピーされたオブジェクトは宛先バケット内の既存のオブジェクトを上書きします。 次のいずれかの方法を使用して、オブジェクトが予期せず上書きされるのを防ぎます。
宛先バケットのバージョン管理の有効化
宛先バケットのバージョン管理が有効になっている場合、宛先バケット内の削除および上書きされたオブジェクトは以前のバージョンとして保存されます。 以前のバージョンはいつでも回復できます。 詳細については、「概要」をご参照ください。
コピー要求にx-oss-forbid-overwriteヘッダーを含める
コピーリクエストにx-oss-forbid-overwriteヘッダーを含め、ヘッダーをtrueに設定してオブジェクトの上書きを無効にすることができます。 ターゲットバケット内の既存のオブジェクトと同じ名前のオブジェクトをコピーすると、オブジェクトのコピーに失敗し、
FileAlreadyExists
エラーコードが返されます。
手順
ossbrowserの使用
ossbrowserを使用してオブジェクトをコピーする場合、オブジェクトのサイズは5 GB未満である必要があります。 ossbrowserを使用してオブジェクトをコピーする方法の詳細については、「ossbrowserの使用」をご参照ください。
OSS SDKの使用
次のコードは、一般的なプログラミング言語のOSS SDKを使用して、CopyObject操作を呼び出してサイズが1 GB未満のオブジェクトをコピーする方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してサイズが1 GB未満のオブジェクトをコピーする方法、およびUploadPartCopy操作を呼び出してサイズが1 GBを超えるオブジェクトをコピーする方法の詳細については、「概要」をご参照ください。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
public classデモ {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// ソースバケットの名前を指定します。
文字列sourceBucketName = "srcexamplebucket";
// ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。
文字列sourceKey = "srcexampleobject.txt";
// 宛先バケットの名前を指定します。 宛先バケットは、ソースバケットと同じリージョンに配置する必要があります。
文字列destinationBucketName = "desexamplebucket";
// 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。
文字列destinationKey = "desexampleobject.txt";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// CopyObjectRequestオブジェクトを作成します。
CopyObjectRequest copyObjectRequest = new CopyObjectRequest(sourceBucketName, sourceKey, destinationBucketName, destinationKey);
// オブジェクトの新しいメタデータを設定します。
ObjectMetadata meta = new ObjectMetadata();
meta.setContentType("text/plain");
// 同じ名前のオブジェクトをCopyObject操作で上書きするかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。これは、同じ名前のオブジェクトを上書きしないことを指定します。
// meta.setHeader("x-oss-forbid-overwrite" 、"true");
// ソースオブジェクトのパスを指定します。
// meta.setHeader(OSSHeaders.COPY_OBJECT_SOURCE, "/examplebucket/recode-test.txt");
// ソースオブジェクトのETag値がリクエストで指定されたETag値と同じ場合、OSSはオブジェクトをコピーしてOK 200を返します。
// meta.setHeader(OSSHeaders.COPY_OBJECT_SOURCE_IF_MATCH、"5B3C1A2E053D763E1B002CC607C5 ****");
// ソースオブジェクトのETag値がリクエストで指定されたETag値と異なる場合、OSSはオブジェクトをコピーしてOK 200を返します。
// meta.setHeader(OSSHeaders.COPY_OBJECT_SOURCE_IF_NONE_MATCH、"5B3C1A2E053D763E1B002CC607C5 ****");
// リクエストで指定された時間がオブジェクトの変更時間と同じかそれ以降の場合、OSSはオブジェクトをコピーしてOK 200を返します。
// meta.setHeader(OSSHeaders.COPY_OBJECT_SOURCE_IF_UNMODIFIED_SINCE、"2021-12-09T07:01:56.000Z");
// リクエストで指定された時間後にソースオブジェクトが変更された場合、OSSはオブジェクトをコピーします。
// meta.setHeader(OSSHeaders.COPY_OBJECT_SOURCE_IF_MODIFIED_SINCE、"2021-12-09T07:01:56.000Z");
// ターゲットオブジェクトのメタデータを設定するために使用されるメソッドを指定します。 この例では、メソッドはCOPYに設定され、ソースオブジェクトのメタデータがコピー先オブジェクトにコピーされることを指定します。
// meta.setHeader(OSSHeaders.COPY_OBJECT_METADATA_DIRECTIVE、"COPY");
// オブジェクトの作成時に宛先オブジェクトの暗号化に使用されるサーバー側の暗号化アルゴリズムを指定します。
// meta.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
// key Management Service (KMS) によって管理されるカスタマーマスターキー (CMK) を指定します。 このパラメーターは、x-oss-server-side-encryptionをKMSに設定した場合にのみ有効になります。
// meta.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION_KEY_ID、"9468da86-3509-4f8d-a61e-6eab1eac ****");
// 宛先オブジェクトのアクセス制御リスト (ACL) を指定します。 この例では、ACLはprivateに設定されています。これは、オブジェクトの所有者と承認されたユーザーのみがオブジェクトに対する読み取りおよび書き込み権限を持つことを指定します。
// meta.setHeader(OSSHeaders.OSS_OBJECT_ACL、CannedAccessControlList.Private);
// 宛先オブジェクトのストレージクラスを指定します。 この例では、ストレージクラスはStandardに設定されています。
// meta.setHeader(OSSHeaders.OSS_STORAGE_CLASS、StorageClass.Standard);
// 宛先オブジェクトのタグを指定します。 オブジェクトに対して一度に複数のタグを指定できます。
// meta.setHeader(OSSHeaders.OSS_TAGGING, "a:1");
// ターゲットオブジェクトのタグを設定するために使用されるメソッドを指定します。 この例では、メソッドはCOPYに設定され、ソースオブジェクトのタグが宛先オブジェクトにコピーされることを指定します。
// meta.setHeader(OSSHeaders.COPY_OBJECT_TAGGING_DIRECTIVE、"COPY");
copyObjectRequest.setNewObjectMetadata (メタ);
// ソースオブジェクトをコピーします。
CopyObjectResult result = ossClient.copyObject(copyObjectRequest);
System.out.println("ETag: " + result.getETag() + "LastModified: " + result.getLastModified());
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数を指定していることを確認してください。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
// ソースバケットの名前を指定します。 例: srcexamplebucket.
$from_bucket = "srcexamplebucket";
// ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: srcdir/exampleobject.txt。
$from_object = "srcdir/exampleobject.txt";
// 宛先バケットの名前を指定します。 宛先バケットは、ソースバケットと同じリージョンにある必要があります。 例: destexamplebucket。
// バケット内のオブジェクトをコピーする場合は、必ずソースバケットとターゲットバケットに同じバケット名を指定してください。
$to_bucket = "destexamplebucket";
// 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: destdir/exampleobject.txt。
$to_object = "destdir/exampleobject.txt";
$options=配列 (
'header'=> 配列 (
// CopyObject操作で、ソースバケットと同じ名前のオブジェクトを上書きするかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。 値trueは、操作がソースバケットと同じ名前のオブジェクトを上書きしないことを示します。
// 'x-oss-forbid-overwrite' => 'true' 、
// リクエストで指定したETag値がソースオブジェクトのETag値と同じ場合、OSSはオブジェクトをコピーしてOK 200を返します。
// 'x-oss-copy-source-if-match' => '5B3C1A2E053D763E1B002CC **** '、
// リクエストで指定したETag値がソースオブジェクトのETag値と異なる場合、OSSはオブジェクトをコピーしてOK 200を返します。
// 'x-oss-copy-source-if-none-match' => '5B3C1A2E053D763E1B002CC **** '、
// リクエストで指定された時間がオブジェクトの変更時間と同じかそれ以降の場合、OSSはオブジェクトをコピーしてOK 200を返します。
// 'x-oss-copy-source-if-unmodified-since' => gmdate('2021-12-09T07:01:56.000Z') 、
// リクエストで指定された時刻が、オブジェクトが変更された実際の時刻よりも早い場合、OSSはオブジェクトをコピーしてOK 200を返します。
// 'x-oss-copy-source-if-modified-ince' => gmdate('2021-12-09T07:01:56.000Z') 、
// ターゲットオブジェクトのメタデータを設定するために使用されるメソッドを指定します。 メソッドをCOPYに設定すると、ソースオブジェクトのメタデータがターゲットオブジェクトにコピーされます。
// 'x-oss-metadata-directive' => 'COPY' 、
// OSSがオブジェクトを作成するときに、ターゲットオブジェクトの暗号化に使用されるサーバー側の暗号化アルゴリズムを指定します。
// 'x-oss-server-side-encryption' => 'KMS' 、
// KMSによって管理されるCMKを指定します。 このパラメーターは、x-oss-server-side-encryptionがKMSに設定されている場合にのみ有効です。
// 'x-oss-server-side-encryption-key-id' => '9468da86-3509-4f8d-a61e-6eab **** '、
// OSSがオブジェクトを作成するときに、宛先オブジェクトのACLを指定します。 この例では、ACLはPrivateに設定されています。これは、オブジェクトの所有者と許可されたユーザーのみがオブジェクトに対する読み取りおよび書き込み権限を持っていることを示します。
// 'x-oss-object-acl' => 'private' 、
// 宛先オブジェクトのストレージクラスを指定します。 この例では、ストレージクラスはStandardに設定されています。
// 'x-oss-storage-class' => 'Standard' 、
// オブジェクトのタグを指定します。 オブジェクトに複数のタグを同時に指定できます。
// 'x-oss-tagging' => 'k1=v1&k2=v2&k3=v3' 、
// ターゲットオブジェクトのタグを設定するために使用されるメソッドを指定します。 メソッドをCOPYに設定すると、ソースオブジェクトのタグがターゲットオブジェクトにコピーされます。
// 'x-oss-tagging-directive' => 'COPY' 、
),
);
try {
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
$ossClient->copyObject($from_bucket、$from_object、$to_bucket、$to_object);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage()) 。 "\n");
戻ります。}
print(__FUNCTION__) 。 ": OK" 。 "\n");
const OSS = require('ali-OSS ');
const client = new OSS({
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。
リージョン: 'yourRegion' 、
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID、
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET、
// バケットの名前を指定します。 例: examplebucket.
bucket: 'examplebucket' 、
// HTTPSを有効にするかどうかを指定します。 secureをtrueに設定すると、HTTPSが有効になります。
// secure: true
})
// バケット内のオブジェクトをコピーします。
async関数copySmallObjectInSameBucket () {
try {
// ソースオブジェクトと宛先オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めないでください。
// 宛先オブジェクトのHTTPヘッダーとメタデータを指定します。
const result = await client.copy('destexampleobject.txt ', 'srcexampleobject.txt', {
// headersパラメーターを設定して、宛先オブジェクトのHTTPヘッダーを指定します。 headersパラメーターを設定しない場合、宛先オブジェクトのHTTPヘッダーはソースオブジェクトのHTTPヘッダーと同じになります。 ソースオブジェクトのHTTPヘッダーがコピーされます。
ヘッダー:{
「キャッシュ制御」: 「キャッシュなし」、
// ソースオブジェクトのETag値がリクエストで指定されたETag値と同じ場合、OSSはオブジェクトをコピーしてOK 200を返します。
'if-match': '5B3C1A2E053D763E1B002CC607C5 **** '、
// リクエストで指定したETag値がソースオブジェクトのETag値と異なる場合、OSSはオブジェクトをコピーしてOK 200を返します。
'if-none-match': '5B3C1A2E053D763E1B002CC607C5 **** '、
// リクエストで指定された時刻が、オブジェクトが変更された時刻よりも早い場合、OSSはオブジェクトをコピーしてOK 200を返します。
'if-modified-since ': '2021-12-09T07:01:56.000Z' 、
// リクエストで指定された時間がオブジェクトが変更された時間よりも遅い場合、OSSはオブジェクトをコピーしてOK 200を返します。
'if-unmodified-since ': '2021-12-09T07:01:56.000Z' 、
// 宛先オブジェクトのアクセス制御リスト (ACL) を指定します。 この例では、ACLはprivateに設定されています。これは、オブジェクトの所有者と許可されたユーザーのみがオブジェクトに対する読み取りおよび書き込み権限を持っていることを示します。
'x-oss-object-acl': 'private' 、
// オブジェクトのタグを指定します。 オブジェクトに複数のタグを同時に指定できます。
'x-oss-tagging ': 'Tag1=1&Tag2=2' 、
// 同じ名前の既存のオブジェクトをCopyObject操作で上書きするかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。これは、CopyObject操作が同じ名前の既存のオブジェクトを上書きしないことを指定します。
'x-oss-forbid-overwrite': 'true' 、
},
// メタパラメーターを設定して、ターゲットオブジェクトのメタデータを指定します。 metaパラメーターを設定しない場合、ターゲットオブジェクトのメタデータはソースオブジェクトのメタデータと同じになります。 ソースオブジェクトのメタデータがコピーされます。
meta: {
場所: 'hangzhou' 、
年: 2015,
人々: 「メアリー」、
},
});
console.log (結果);
} catch (e) {
console.log(e);
}
}
copySmallObjectInSameBucket ()
# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# ソースバケットの名前を指定します。 例: srcexamplebucket.
src_bucket_name = 'srcexamplebucket'
# 宛先バケットの名前を指定します。 宛先バケットは、ソースバケットと同じリージョンにある必要があります。 例: destexamplebucket。
# バケット内のオブジェクトをコピーする場合は、送信元バケットと送信先バケットに同じバケット名を指定してください。
dest_bucket_name = 'destexamplebucket'
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', dest_bucket_name)
# ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: srcexampleobject.txt。
src_object_name = 'srcexampleobject.txt'
# 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: destexampleobject.txt。
dest_object_name = 'destexampleobject.txt'
# headers = dict()
# CopyObject操作で同じ名前のオブジェクトを上書きするかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。これは、同じ名前のオブジェクトを上書きしないことを指定します。
# headers['x-oss-forbid-overwrite'] = 'true'
# ソースオブジェクトのパスを指定します。
# headers[OSS_COPY_OBJECT_SOURCE] = '/example-bucket-by-util/recode-test.txt'
# ソースオブジェクトのETag値がリクエストで指定されたETag値と同じ場合、OSSはオブジェクトをコピーしてOK 200を返します。
# headers['x-oss-copy-source-if-match'] = '5B3C1A2E053D763E1B002CC607C5 ****'
# ソースオブジェクトのETag値がリクエストで指定されたETag値と異なる場合、OSSはオブジェクトをコピーしてOK 200を返します。
# headers['x-oss-copy-source-if-none-match'] = '5B3C1A2E053D763E1B002CC607C5 ****'
# リクエストで指定された時間がオブジェクトの実際の変更時間以降の場合、OSSはオブジェクトをコピーしてOK 200を返します。
# headers['x-oss-copy-source-if-unmodified-since'] = '2021-12-09T07:01:56.000Z'
# リクエストで指定された時間後にソースオブジェクトが変更された場合、OSSはオブジェクトをコピーします。
# headers['x-oss-copy-source-if-modified-since'] = '2021-12-09T07:01:56.000Z'
# 宛先オブジェクトのメタデータを構成するために使用されるメソッドを指定します。 メソッドをCOPYに設定すると、ソースオブジェクトのメタデータがターゲットオブジェクトにコピーされます。
# headers[OSS_METADATA_DIRECTIVE] = 'COPY'
# OSSが宛先オブジェクトを作成するときに、宛先オブジェクトを暗号化するために使用されるサーバー側の暗号化アルゴリズムを指定します。
# headers[OSS_SERVER_SIDE_ENCRYPTION] = 'KMS'
# key Management Service (KMS) が管理するカスタマーマスターキー (CMK) を指定します。 このパラメーターは、x-oss-server-side-encryptionがKMSに設定されている場合にのみ有効です。
# headers['x-oss-server-side-encryption-key-id'] = '9468da86-3509-4f8d-a61e-6eab1eac ****'
# 宛先オブジェクトのアクセス制御リスト (ACL) を指定します。 この例では、このパラメーターはOBJECT_ACL_PRIVATEに設定されます。これは、オブジェクトの所有者と承認されたユーザーのみがオブジェクトに対する読み取りおよび書き込み権限を持っていることを示します。
# headers[OSS_OBJECT_ACL] = oss2.OBJECT_ACL_PRIVATE
# 宛先オブジェクトのストレージクラスを指定します。 この例では、ストレージクラスはStandardに設定されています。
# headers['x-oss-storage-classs'] = oss2.BUCKET_STORAGE_CLASS_STANDARD
# オブジェクトのタグを指定します。 オブジェクトに複数のタグを同時に指定できます。
# headers[OSS_OBJECT_TAGGING] = 'k1=v1&k2=v2&k3=v3'
# ターゲットオブジェクトのタグを設定するために使用されるメソッドを指定します。 メソッドをCOPYに設定すると、ソースオブジェクトのタグがターゲットオブジェクトにコピーされます。
# headers[OSS_OBJECT_TAGGING_COPY_DIRECTIVE] = 'COPY'
# result = bucket.copy_object(src_bucket_name, src_object_name, dest_object_name, headers=headers)
# オブジェクトをソースバケットから宛先バケットにコピーします。
result = bucket.copy_object(src_bucket_name, src_object_name, dest_object_name)
# レスポンスを表示します。 HTTPステータスコード200が返された場合、操作は成功です。
Aliyun.OSSを使用した
Aliyun.OSS.Common; を使用
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// ソースバケットの名前を指定します。 例: srcexamplebucket.
var sourceBucket = "srcexamplebucket";
// ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: srcdir/scrobject.txt。
var sourceObject = "srcdir/scrobject.txt";
// 宛先バケットの名前を指定します。 宛先バケットは、ソースバケットと同じリージョンにある必要があります。 例: destbucket。
var targetBucket = "destbucket";
// 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: destdir/destobject.txt。
var targetObject = "destdir/destobject.txt";
// OSSClientインスタンスを作成します。
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
var metadata = new ObjectMetadata();
// ユーザーメタデータを指定します。 ユーザーメタデータは、キーと値のペアとして保存されます。 たとえば、キーはmk1で、値はmv1です。
metadata.AddHeader("mk1", "mv1");
metadata.AddHeader("mk2", "mv2");
var req = new CopyObjectRequest(sourceBucket, sourceObject, targetBucket, targetObject)
{
// NewObjectMetadataの値がnullの場合、COPYモードが使用され、ソースオブジェクトのメタデータがターゲットオブジェクトにコピーされます。 NewObjectMetadataの値がnullでない場合、REPLACEモードが使用され、ターゲットオブジェクトのメタデータがリクエストで指定されたメタデータによって上書きされます。
NewObjectMetadata = metadata
};
// オブジェクトをコピーします。
client.CopyObject(req);
Console.WriteLine("オブジェクトのコピー成功");
}
キャッチ (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID: {2} \tHostID: {3}"、
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
キャッチ (例外ex)
{
Console.WriteLine("Failed with error info: {0}" 、メッセージなど);
}
の印刷 ('result.status:', result.status)
// ソースバケットの名前を指定します。
文字列srcBucketName = "srcbucket";
// ソースオブジェクトのフルパスを指定します。
文字列srcObjectKey = "dir1/srcobject.txt";
// 宛先バケットの名前を指定します。 宛先バケットは、ソースバケットと同じリージョンにある必要があります。
文字列destBucketName = "destbucket";
// 宛先オブジェクトのフルパスを指定します。
文字列destObjectKey = "dir2/destobject.txt";
// オブジェクトをコピーするリクエストを作成します。
CopyObjectRequest copyObjectRequest = new CopyObjectRequest(srcBucketName, srcObjectKey, destBucketName, destObjectKey);
// ObjectMetadata objectMetadata=新しいObjectMetadata();
// オブジェクトのアクセス制御リスト (ACL) を設定します。 この例では、ACLはprivateに設定されています。
// objectMetadata.setHeader("x-oss-object-acl", "private");
// オブジェクトのストレージクラスを指定します。 この例では、ストレージクラスはStandardに設定されています。
// objectMetadata.setHeader("x-oss-storage-class", "Standard");
// CopyObject操作で同じ名前のオブジェクトを上書きするかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。これは、同じ名前のオブジェクトを上書きできないことを示します。
// objectMetadata.setHeader("x-oss-forbid-overwrite", "true");
// ソースオブジェクトのETag値がリクエストで指定されたETag値と同じ場合、OSSはオブジェクトをコピーします。
// objectMetadata.setHeader("x-oss-copy-source-if-match", "5B3C1A2E053D763E1B002CC607C5 ****");
// ソースオブジェクトのパスを指定します。
// objectMetadata.setHeader("x-oss-copy-source", "/examplebucket/recode-test.txt");
// ソースオブジェクトのETag値がリクエストで指定されたETag値と異なる場合、OSSはオブジェクトをコピーします。
// objectMetadata.setHeader("x-oss-copy-source-if-none-match", "5B3C1A2E053D763E1B002CC607C5 ****");
// リクエストで指定された時間が、オブジェクトが変更された時間以降の場合、OSSはオブジェクトをコピーします。
// objectMetadata.setHeader("x-oss-copy-source-if-unmodified-since" 、"2021-12-09T07:01:56.000Z");
// リクエストで指定された時間後にソースオブジェクトが変更された場合、OSSはオブジェクトをコピーします。
// objectMetadata.setHeader("x-oss-copy-source-if-modified-since", "2021-12-09T07:01:56.000Z");
// ターゲットオブジェクトのメタデータを設定するために使用されるメソッドを指定します。 この例では、メソッドはCOPYに設定され、ソースオブジェクトのメタデータが宛先オブジェクトにコピーされることを示します。
// objectMetadata.setHeader("x-oss-metadata-directive", "COPY");
// 宛先オブジェクトの暗号化に使用されるサーバー側の暗号化アルゴリズムを指定します。
// objectMetadata.setHeader("x-oss-server-side-encryption" 、"SSE-KMS");
// key Management Service (KMS) によって管理されるカスタマーマスターキー (CMK) を指定します。 このパラメーターは、x-oss-server-side-encryptionをKMSに設定した場合にのみ有効になります。
// objectMetadata.setHeader("x-oss-server-side-encryption-key-id", "9468da86-3509-4f8d-a61e-6eab1eac ****");
// オブジェクトのタグを指定します。 一度に複数のタグを指定できます。
// objectMetadata.setHeader("x-oss-tagging", "a:1");
// ターゲットオブジェクトのタグを設定するために使用されるメソッドを指定します。 この例では、メソッドはCOPYに設定されています。これは、ソースオブジェクトのタグが宛先オブジェクトにコピーされることを示します。
// objectMetadata.setHeader("x-oss-tagging-directive", "COPY");
// 非同期モードでオブジェクトをコピーします。
OSSAsyncTask copyTask = oss.asyncCopyObject(copyObjectRequest, new OSSCompletedCallback<CopyObjectRequest, CopyObjectResult>() {
@オーバーライド
public void onSuccess(CopyObjectRequest request, CopyObjectResult result) {
Log.d("copyObject" 、"copy success!");
}
@オーバーライド
public void onFailure(CopyObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// リクエスト例外を処理します。
if (clientExcepion != null) {
// ネットワークエラーなどのクライアント側の例外を処理します。
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// サーバー側の例外を処理します。
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
パッケージメイン
import (import (import)
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
「時間」
)
func main() {
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットの名前を指定します。 例: examplebucket.
bucketName := "examplebucket"
// ソースオブジェクトのフルパスを指定します。 例: srcdir/srcobject.jpg
objectName := "srcdir/srcobject.jpg"
// 宛先オブジェクトのフルパスを指定します。 例: destdir/destobject.jpg
destObjectName := "destdir/destobject.jpg"
// バケット情報を取得します。
bucket, err := client.Bucket(bucketName)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 宛先オブジェクトのメタデータを指定します。
expires := time.Date(2049, time.January, 10, 23, 0, 0, 0, time.UTC)
tag1 := oss.Tag {
キー: "a" 、
値: "1" 、
}
taggingInfo := oss.Tagging {
タグ: []oss.Tag{tag1},
}
options := []oss.Option{
oss.MetadataDirective(oss.MetaReplace),
oss.Expires(expires),
oss.SetTagging(taggingInfo),
// ソースオブジェクトのタグをターゲットオブジェクトにコピーします。
// oss.TaggingDirective(oss.TaggingCopy) 、
// OSSが宛先オブジェクトを作成するときに、宛先オブジェクトのアクセス制御リスト (ACL) をprivateに設定します。
// oss.ObjectACL(oss. ACLDrivate) 、
// key Management Service (KMS) によって管理されるカスタマーマスターキー (CMK) を指定します。 このパラメーターは、x-oss-server-side-encryptionがKMSに設定されている場合にのみ有効です。
// oss.ServerSideEncryptionKeyID("9468da86-3509-4f8d-a61e-6eab1eac ****") 、
// OSSがオブジェクトを作成するときに、ターゲットオブジェクトの暗号化に使用されるサーバー側の暗号化アルゴリズムを指定します。
// oss.ServerSideEncryption("AES256") 、
// ソースオブジェクトのメタデータを宛先オブジェクトにコピーします。
// oss.MetadataDirective(oss.MetaCopy) 、
// CopyObject操作で、ソースバケットと同じ名前のオブジェクトを上書きするかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。 値trueは、操作がソースバケットと同じ名前のオブジェクトを上書きしないことを示します。
// oss.ForbidOverWrite(true) 、
// リクエストで指定したETag値がソースオブジェクトのETag値と同じ場合、OSSはオブジェクトをコピーしてOK 200を返します。
// oss.CopySourceIfMatch("5B3C1A2E053D763E1B002CC607C5 ****") 、
// リクエストで指定したETag値がソースオブジェクトのETag値と異なる場合、OSSはオブジェクトをコピーしてOK 200を返します。
// oss.CopySourceIfNoneMatch("5B3C1A2E053D763E1B002CC607C5 ****") 、
// リクエストで指定された時間が、オブジェクトが変更された実際の時間よりも早い場合、OSSはオブジェクトをコピーしてOK 200を返します。
// oss.CopySourceIfModifiedSince(2021-12-09T07:01:56.000Z) 、
// リクエストで指定された時間がオブジェクトの変更時間と同じかそれ以降の場合、OSSはオブジェクトをコピーしてOK 200を返します。
// oss.CopySourceIfUnmodifiedSince(2021-12-09T07:01:56.000Z) 、
// 宛先オブジェクトのストレージクラスを指定します。 この例では、ストレージクラスはStandardに設定されています。
// oss.StorageClass("Standard") 、
}
// リクエストで指定したメタデータを使用して、ソースオブジェクトのメタデータを上書きします。
_, err = bucket.CopyObject(objectName, destObjectName, options...)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new];
// ソースバケットの名前を指定します。
copy.sourceBucketName = @ "sourcebucket";
// ソースオブジェクトのフルパスを指定します。
copy.sourceObjectKey = @ "dir1/srcobject.txt";
// 宛先バケットの名前を指定します。
copy.bucketName = @ "destbucket";
// 宛先オブジェクトのフルパスを指定します。
copy.objectKey = @ "dir2/destobject.txt";
NSMutableDictionary * objectMeta = [NSMutableDictionary];
// 宛先オブジェクトのアクセス制御リスト (ACL) を指定します。 この例では、宛先オブジェクトのACLはprivateに設定されています。
[objectMeta setValue:@ "x-oss-object-acl" forKey:@ "public-read"];
// 宛先オブジェクトのストレージクラスを指定します。 この例では、宛先オブジェクトのストレージクラスはStandardに設定されています。
[objectMeta setValue:@ "x-oss-storage-class" forKey:@ "Standard"];
// 同じ名前の既存のオブジェクトを上書きするかどうかを指定します。 既定では、x-oss-forbid-overwriteが指定されていない場合、同じ名前の既存のオブジェクトが上書きされます。
// x-oss-forbid-overwriteがfalseに設定されている場合、同じ名前の既存のオブジェクトが上書きされます。 x-oss-forbid-overwriteがtrueに設定されている場合、同じ名前の既存のオブジェクトは上書きされません。 既存のオブジェクトが同じ名前の場合、エラーが報告されます。
[objectMeta setValue:@ "x-oss-forbid-overwrite" forKey:@ "true"];
// ソースオブジェクトのETag値がリクエストで指定したETag値と同じ場合、オブジェクトはコピーされます。
[objectMeta setValue:@ "x-oss-copy-source-if-match" forKey:@ "5B3C1A2E053D763E1B002CC607C5 ****"];
// ソースオブジェクトのETag値がリクエストで指定したETag値と異なる場合、オブジェクトはコピーされます。
[objectMeta setValue:@ "x-oss-copy-source-if-none-match" forKey:@ "5B3C1A2E053D763E1B002CC607C5 ****"];
// UTCで2021年12月09日07:01:56.000以前にオブジェクトが変更された場合、オブジェクトはコピーされます。
[objectMeta setValue:@ "x-oss-copy-source-if-unmodified-since" forKey:@ "2021-12-09T07:01:56.000Z"];
// UTCで2021年12月15日07:01:56.000以降にオブジェクトが変更された場合、オブジェクトはコピーされます。
[objectMeta setValue:@ "x-oss-copy-source-if-modified-since" forKey:@ "2021-12-15T07:01:56.000Z"];
// ソースオブジェクトのメタデータを宛先オブジェクトにコピーします。
[objectMeta setValue:@ "x-oss-metadata-directive" forKey:@ "COPY"];
// ソースオブジェクトのタグをターゲットオブジェクトにコピーします。
[objectMeta setValue:@ "x-oss-tagging-directive" forKey:@ "Copy"];
// OSSがオブジェクトを作成するときに、ターゲットオブジェクトの暗号化に使用されるサーバー側の暗号化アルゴリズムを指定します。
[objectMeta setValue:@ "x-oss-server-side-encryption" forKey:@ "KMS"];
// key Management Service (KMS) によって管理されるカスタマーマスターキー (CMK) を指定します。 このパラメーターは、x-oss-server-side-encryptionがKMSに設定されている場合にのみ有効です。
[objectMeta setValue:@ "x-oss-server-side-encryption-key-id" forKey:@ "9468da86-3509-4f8d-a61e-6eab1eac ****"];
copy.objectMeta = objectMeta;
OSSTask * task = [client copyObject:copy];
[task continueWithBlock:^ id(OSSTask * task) {
if (!task.error) {
NSLog(@ "オブジェクトのコピー成功!");
} else {
NSLog(@ "copy object failed, error: % @" , task.error);
}
nilを返します。}];
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
/* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
std::stringエンドポイント="https://oss-cn-hangzhou.aliyuncs.com";
/* ソースバケットの名前を指定します。 例: srcexamplebucket. */
std::string SourceBucketName = "srcexamplebucket";
/* 宛先バケットの名前を指定します。 宛先バケットは、ソースバケットと同じリージョンに配置する必要があります。 例: destbucket。 */
std::string CopyBucketName = "destbucket";
/* ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: srcdir/scrobject.txt。 */
std::string SourceObjectName = "srcdir/scrobject.txt";
/* 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: destdir/destobject.txt。 */
std::string CopyObjectName = "destdir/destobject.txt";
/* ネットワークリソースなどのリソースを初期化します。 */
InitializeSdk();
ClientConfiguration conf;
/* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClientクライアント (Endpoint, credentialsProvider, conf);
CopyObjectRequestリクエスト (CopyBucketName, CopyObjectName);
request.setCopySource(SourceBucketName, SourceObjectName);
/* オブジェクトをコピーします。 */
auto outcome = client.CopyObject (リクエスト);
if (!outcome.isSuccess()) {
/* 例外を処理します。 */
std::cout << "CopyObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースなどのリソースを解放します。 */
ShutdownSdk();
0を返します。}
#include "oss_api.h"
# 「aos_http_io.h」を含める
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 * /
const char * endpoint = "yourEndpoint";
/* ソースバケットの名前を指定します。 * /
const char * source_bucket_name = "yourSourceBucketName";
/* ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 * /
const char * source_object_name = "yourSourceObjectName";
/* 宛先バケットの名前を指定します。 宛先バケットは、ソースバケットと同じリージョンにある必要があります。 * /
const char * dest_bucket_name = "yourDestBucketName";
/* 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 * /
const char * dest_object_name = "yourDestObjectName";
void init_options(oss_request_options_t * オプション)
{
options->config = oss_config_create(options->pool);
/* char * stringを使用して、aos_string_t型のデータを初期化します。 */
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
/* CNAMEを使用するかどうかを指定します。 値0は、CNAMEが使用されないことを示す。 */
options->config->is_cname = 0;
/* タイムアウト時間などのネットワークパラメーターを指定します。 */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char * argv[])
{
/* main() でaos_http_io_initializeメソッドを呼び出して、ネットワークリソースやメモリリソースなどのグローバルリソースを初期化します。 */
if (aos_http_io_initialize(NULL, 0))! =AOSE_OK) {
exit(1);
}
/* メモリを管理するためのメモリプールを作成します。 aos_pool_tはapr_pool_tと同じです。 メモリプールの作成に使用されるコードは、APRライブラリに含まれています。 */
aos_pool_t *pool;
/* メモリプールを作成します。 2番目のパラメーターの値はNULLです。 この値は、プールが他のメモリプールを継承しないことを示します。 */
aos_pool_create(&pool, NULL);
/* Create and initialize options. このパラメーターには、エンドポイント、access_key_id、access_key_secret、is_cname、curlなどのグローバル構成情報が含まれます。 */
oss_request_options_t *oss_client_options;
/* メモリプール内のメモリリソースをオプションに割り当てます。 */
oss_client_options = oss_request_options_create(pool);
/* oss_client_optionsを初期化します。 */
init_options(oss_client_options);
/* パラメーターを初期化します。 */
aos_string_t source_bucket;
aos_string_t source_object;
aos_string_t dest_bucket;
aos_string_t dest_object;
aos_table_t *headers = NULL;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_str_set(&source_bucket, source_bucket_name);
aos_str_set(&source_object, source_object_name);
aos_str_set(&dest_bucket, dest_bucket_name);
aos_str_set(&dest_object, dest_object_name);
headers = aos_table_make(pool, 0);
/* オブジェクトをコピーします。 */
resp_status = oss_copy_object(oss_client_options, &source_bucket, &source_object, &dest_bucket, &dest_object, headers, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("copy object succeeded\n");
} else {
printf("copy object failed\n");
}
/* メモリプールを解放します。 この操作により、リクエストに割り当てられたメモリリソースが解放されます。 */
aos_pool_destroy(pool);
/* 割り当てられたグローバルリソースを解放します。 */
aos_http_io_deinitialize();
0を返します。}
'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)
ossutilの使用
ossutilを使用してオブジェクトをコピーする方法の詳細については、「オブジェクトのコピー」をご参照ください。
OSS APIの使用
ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「CopyObject」をご参照ください。