PUT Object (Copy)

既に保管されているオブジェクトを複製します。
この操作はGET操作を実行して、次にPUT操作を実行した時と結果は同じです。
リクエストヘッダーにx-iijgio-copy-sourceを加えると、ソースオブジェクトを目的のバケットに複製します。
オブジェクトを複製時に、メタデータとして複製元のメタデータを設定するか、全く新しいメタデータを設定するかを選択できます。 複製元のメタデータを設定する場合、メタデータの大部分は保存できますが、ACLは複製されません(デフォルト値としてprivateが設定されます)。
ACLの設定を行う(デフォルト値を無効にする)には、リクエスト生成時にx-iijgio-aclヘッダーを使用し、新たにACLを設定します。
この操作を行うユーザは、コピー元のオブジェクトに対しREAD権限が付与され、コピー先のバケットに対しWRITE権限が付与されていなければなりません。
リクエストヘッダーに特定の条件(ETagがマッチするか、オブジェクトが指定の日時以降(以前)に更新されていないか等)を設定することができます。
リクエストを受信した時点、またはファイルコピーの実行中にエラーを返す可能性があります。 リクエスト受信時の場合、標準のエラーコードを返します。実行中のエラーの場合、エラーは200レスポンスの中に埋め込まれます。

 

リクエスト情報

シンタックス
PUT /{destination bucket name}/{destination object key} HTTP/1.1
Host: s3api.iot.iij.jp
Date: date
x-iijgio-copy-source: /{source bucket name}/{source object key}
x-iijgio-metadata-directive: {metadata directive}
x-iijgio-copy-source-if-match: {etag}
x-iijgio-copy-source-if-none-match: {etag}
x-iijgio-copy-source-if-unmodified-since: {time stamp}
x-iijgio-copy-source-if-modified-since: {time stamp}
<request metadata>
Authorization: {authorization string}

 

リクエストパラメータ

この操作ではリクエストパラメータは使用しません。

リクエストヘッダー

この操作では基本リクエストヘッダーに加え、以下のヘッダーを使用します。

表. PUT Object(Copy) リクエストヘッダー一覧

HTTPヘッダー 説明 必須
x-iijgio-acl

ACLの設定

  • 型:String
  • 有効な値:private, public-read, public-read-write, bucket-owner-read, bucket-owner-full-control
  • デフォルト値:private
×
x-iijgio-copy-source

バケット名とオブジェクトキー
バケット名とオブジェクトのキーはスラッシュ(/)で区切ります。

  • 型:String
  • デフォルト値:なし

制約

この文字列はURLエンコードされていなければなりません。また、ユーザはソースオブジェクトに対してREAD権限が必要です。

x-iijgio-metadata-directive

メタデータをオブジェクトからコピーした値にするか、リクエストで提供した値にするかの指定

  • 型:String
  • デフォルト値:COPY
  • 有効な値:COPY, REPLACE

制約

COPYまたはREPLACE以外の値の場合、400エラーレスポンスが返ります。REPLACE を指定しながらMetadataDirectiveヘッダーが設定されていない場合、コピーを実行することができません。

×
x-iijgio-copy-source-if-match

ETagが指定のタグと一致する場合コピーを実行します。
一致しない場合には412 ステータスエラー(precondition failed)を返します。

  • 型:String
  • デフォルト値:なし

制約

このヘッダーはx-iijgio-copy-source-if-unmodified-sinceヘッダーと併用できますが、他のコピー条件指定のヘッダーとは併用できません。

×
x-iijgio-copy-source-if-none-match

ETagが指定のタグとマッチしない場合コピーを実行します。
マッチする場合には412 ステータスエラー(precondition failed)を返します。

  • 型:String
  • デフォルト値:なし

制約

このヘッダーはx-iijgio-copy-source-if-modified-sinceヘッダーと併用できますが、他のコピー条件指定のヘッダーとは併用できません。

×
x-iijgio-copy-source-if-unmodified-since

指定された時間以降にオブジェクトが更新されていなければ、コピーを実行し、その他の場合には412 ステータスエラー(precondition failed)を返します。

  • 型:String
  • デフォルト値:None

制約

  • この文字列はHTTPで有効なDateでなければなりません。このヘッダーはx-iijgio-copy-source-if-matchヘッダーと併用できますが、他のコピー条件指定のヘッダーとは併用できません。
×
x-iijgio-copy-source-if-modified-since

指定された時間以降にオブジェクトが更新されていれば、コピーを実行し、その他の場合には412 ステータスエラー(precondition failed)を返します。

  • 型:String
  • デフォルト値:None

制約

この文字列はHTTPで有効なDateでなければなりません。このヘッダーはx-iijgio-copy-source-if-none-matchヘッダーと併用できますが、他のコピー条件指定のヘッダーとは併用できません。

×
x-iijgio-website-redirect-location

このオブジェクトに対するリクエストのリダイレクト先URL

このヘッダー要素は、指定のバケットのウェブサイトサポートが有効な場合に限り指定することができます。 同じバケットの異なるオブジェクトへのリダイレクトであれば以下のようなURLを指定します。

x-iijgio-website-redirect-location: /another_object 

また、外部のウェブサイトであれば以下のように絶対URLを指定します。

x-iijgio-website-redirect-location: http://www.example.com/
  • 型:String
  • デフォルト値:なし

制約

この値は / または http:// , https:// で始まる文字列でなければなりません。この値のサイズは 2KB 以内でなければなりません。

×

 

サーバサイド暗号化

サーバサイド暗号化 でオブジェクトを暗号化する場合、以下のヘッダを指定します。

 

暗号化キーは本サービス内に保存されません。暗号化実施後に破棄します。暗号化キーはお客様が管理する必要があります。
暗号化キーが不明となった場合、オブジェクトの取得が出来なくなります。

表. PUT Object(Copy) リクエストヘッダー(サーバサイド暗号化)一覧

名前 説明 必須
x-iijgio-server-side-encryption-customer-algorithm 暗号化で使用するアルゴリズムを指定します。値は”AES256”である必要があります。
x-iijgio-server-side-encryption-customer-key 暗号化で使用する暗号化キーを指定します。Base64でエンコードした値をセットします。暗号化キーの長さはBase64エンコード前で256ビットである必要があります。 暗号化キーは対象オブジェクトの暗号化後に速やかに破棄されます。
x-iijgio-server-side-encryption-customer-key-MD5 暗号化キーをMD5(128bit)でダイジェストし、Base64エンコードした値をセットします。暗号化キーが正しく送られて来たかサービス側で検証するために利用します。

 

ソースオブジェクト(x-iijgio-copy-sourceで指定したオブジェクト)が サーバサイド暗号化で暗号化されている場合、以下のヘッダを指定します。

表. PUT Object(Copy) リクエストヘッダー(サーバサイド暗号化 - Copy) 一覧
名前 説明 必須
x-iijgio-copy-source-server-side-encryption-customer-algorithm ソースオブジェクトの復号に用いるアルゴリズムを指定します。値は”AES256”である必要があります。
x-iijgio-copy-source-server-side-encryption-customer-key ソースオブジェクトの復号に用いる暗号化キーを指定します。Base64でエンコードした値をセットします。暗号化キーの長さはBase64エンコード前で256ビットである必要があります。 暗号化キーは対象オブジェクトの複号後に速やかに破棄されます。
x-iijgio-copy-source-server-side-encryption-customer-key-MD5 ソースオブジェクトの暗号化キーをMD5(128bit)でダイジェストし、Base64エンコードした値をセットします。暗号化キーが正しく送られて来たかサービス側で検証するために利用します。
リクエストエレメント

この操作ではリクエストエレメントは使用しません。

 

レスポンス情報

レスポンスヘッダー

この操作では基本レスポンスヘッダーを返します。

オブジェクトを サーバサイド暗号化 で暗号化した場合、追加で以下のヘッダを返します。 

表. PUT Object(Copy) レスポンスヘッダー(サーバサイド暗号化)一覧

HTTPヘッダー 説明
x-iijgio-server-side-encryption-customer-algorithm

暗号化に利用したアルゴリズムを返します。

  • 型:String
x-iijgio-server-side-encryption-customer-key-MD5

暗号化に利用した暗号化キーのMD5値を返します。

  • 型:String

コピー元のオブジェクトが サーバサイド暗号化 で暗号化されていた場合、追加で以下のヘッダを返します。

表. PUT Object(Copy) レスポンスヘッダー(サーバサイド暗号化)一覧

HTTPヘッダー 説明
x-iijgio-copy-source-server-side-encryption-customer-algorithm

ソースオブジェクトの復号に用いたアルゴリズムを返します。

  • 型:String
x-iijgio-copy-source-server-side-encryption-customer-key-MD5

ソースオブジェクトの復号に用いた暗号化キーのMD5値を返します。

  • 型:String

 

レスポンスエレメント

この操作では以下のレスポンスエレメントを返します。

表. PUT Object(Copy) レスポンスエレメント一覧

名前 説明
CopyObjectResult

全てのレスポンスエレメントのためのコンテナ

  • 型:Container
  • 親:なし
ETag

新しいオブジェクトから生成されたMD5ハッシュ値ETagはメタデータの変更を反映せず、オブジェクトの変更のみ反映します。

  • 型:String
  • 親:CopyObjectResult
LastModified

最終更新日時

  • 型:String
  • 親:CopyObjectResult

 

エラー情報

この操作では以下のエラーを返します。

表. PUT Object(Copy) エラーコード一覧

コード ステータス 内容
InvalidAccessKeyId 403 Forbidden 指定のアクセスキーIDを持つユーザが存在しません。
SignatureDoesNotMatch 403 Forbidden 指定されたリクエストのシグネチャが一致しません。
AccessDenied 403 Forbidden Objrctに対するREAD権限がない、またはバケットに対するWRITE権限がありません。
NoSuchBucket 404 Not Found 指定のバケットが存在しません。
NoSuchKey 404 Not Found 指定keyのオブジェクトが存在しません。
KeyTooLong 400 Bad Request オブジェクトのkeyが許容サイズを超えています。
InvalidArgument 400 Bad Request

以下のいずれかが原因です。サーバサイド暗号化用のヘッダの指定に誤りがありますソースオブジェクトの暗号化に用いた暗号化キーと、リクエストの暗号キーが一致しませんhttpsで通信をしていません

InvalidEncryptionAlgorithmError 400 Bad Request x-iijgio-server-side-encryption-customer-algorith,x-iijgio-copy-source-server-side-encryption-customer-algorithに誤った値が指定されています。
InvalidArgument 400 Bad Request

以下のいずれかが原因です。サーバサイド暗号化用のヘッダの指定に誤りがありますhttpsで通信をしていません

InvalidEncryptionAlgorithmError 400 Bad Request x-iijgio-server-side-encryption-customer-algorithに誤った値が指定されています。

 

サンプル 

my-image.jpgを複製し、my-second-image.jpgというキー名でbucketに追加するサンプル

リクエスト
PUT /bucket/my-second-image.jpg HTTP/1.1
Host: s3api.iot.iij.jp
Date: Wed, 28 Oct 2009 22:32:00 GMT
x-iijgio-copy-source: /bucket/my-image.jpg
レスポンス
HTTP/1.1 200 OK
x-iijgio-id-2: eftixk72aD6Ap51TnqcoF8eFidJG9Z/2mkiDFu8yU9AS1ed4OpIszj7UDNEHGran
x-iijgio-request-id: 318BC8BC148832E5
x-iijgio-copy-source-version-id: 3/L4kqtJlcpXroDTDmJ+rmSpXd3dIb
rHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo
x-iijgio-version-id: QUpfdndhfd8438MNFDN93jdnJFkdmqnh893
Date: Wed, 28 Oct 2009 22:32:00 GMT
Server: s3api.iot.iij.jp
<CopyObjectResult>
  <LastModified>2009-10-28T22:32:00</LastModified>
  <ETag>9b2cf535f27731c974343645a3985328</ETag>
</CopyObjectResult>