PUT Object

バケットにオブジェクトを追加します。
この操作を行うユーザは、オブジェクトを追加するバケットに対しWRITE権限を付与されていなければなりません。
本サービスはオブジェクトの部分保存は行いません。 成功のレスポンスはオブジェクト全体を保存したことを意味します。
同一のオブジェクトに対してほぼ同時に複数の書き込みの要求を受けた場合、最後に書かれた内容で上書きされます。 つまり、通信速度やオブジェクトのサイズによってはリクエストの順と異なる場合が発生します。 本サービスはオブジェクトをロックする機能は提供していません。
通信時にデータが破損していないことを保証するためにContent-MD5ヘッダーを用います。 Content-MD5 を用いることで、あらかじめ計算しておいたMD5ハッシュ値とアップロードしたオブジェクトのMD5ハッシュ値が比較され正しくアップロードされたことを確認できます。 また、返されたETagと計算した値を比較することもできます。

  • PUT Objectを行う際に認証したユーザはオブジェクト所有者となり、常にREAD_ACPおよびWRITE_ACP権限を保持します。
  • オブジェクトのキー名は一連のUnicode文字で、UTF-8にエンコードした時のバイト長の最大サイズは 950 Bytes です。
  • オブジェクト登録の際に100ms以内の遅延が発生する場合があります。PUT Objectの実行後に、同一オブジェクトに対して連続して操作を行い 404 Not Found が返された場合は、操作のリトライをお願い致します。
Bucketに対して、AllUsersグループ( http://acs.dag.iijgio.com/groups/global/AllUsers )にWRITE権限を付与した状態で、匿名(anonymous)ユーザでPUT Objectした場合はAllUsersグループがそのオブジェクトの所有者となります。
このObjectに対しても上記のREAD_ACP・WRITE_ACP権限の暗黙的な保持が適用されるため、全ての匿名(anonymous)ユーザを含む全ての利用者にREAD_ACPおよびWRITE_ACP権限が付与された状態になりますのでご注意ください。

 

リクエスト情報

シンタックス
PUT /{bucket name}/{object key} HTTP/1.1
Host: s3api.iot.iij.jp
Date: {date}
Authorization: {authorization string}

 

リクエストパラメータ

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

リクエストヘッダー

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

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

HTTPヘッダー説明必須
Cache-Control

キャッシュの振る舞いの指定
詳しい情報については rfc2616#sec14.9 をご覧ください。

  • 型:String
  • デフォルト値:なし
×
Content-Disposition

オブジェクトのプレゼンテーショナルな情報の指定
詳しい情報については rfc2616#sec19.5.1 をご覧ください。

  • 型:String
  • デフォルト値:なし
×
Content-Encoding

コンテンツのエンコード方式
詳しい情報については rfc2616#sec14.11 をご覧ください。

  • 型:String
  • デフォルト値:なし
×
Content-MD5

Base64でエンコードされたRFC 1864に準拠した128ビットMD5のダイジェストメッセージ(ヘッダーなし)送信データの保全チェックに用います。

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

100-continueを使用する場合、確認の応答を受信するまで、リクエストボディを送信しません。
リクエストヘッダー部でメッセージが拒否された場合、リクエストボディを送信しません。

  • 型:String
  • デフォルト値:なし
  • 有効な値:100-continue
×
Expires

有効期限
ミリ秒で指定します。

  • 型:Integer
  • デフォルト値:なし
×
x-iijgio-meta-

ユーザーメタデータ

この接頭辞で始まる全てのヘッダーがユーザーメタデータであるとみなされます。 このユーザーメタデータはオブジェクトと共に格納され、オブジェクト取得時に返されます。 HTTPリクエストの合計サイズ(ボディを含まない)は8KB以下でなければなりません。

  • 型:String
  • デフォルト値:なし
×
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 以内でなければなりません。
×

 

Access Control List(ACL)の設定
この操作は、オブジェクトの作成と同時にアカウントやグループ(匿名ユーザなど)に対して Access Control List(ACL) として権限を付与することができます。
ACLを設定する方法として以下の2つが用意されています。ただし、両方を同時に指定することはできません。

 

Canned ACL で指定する場合

表. PUT Object リクエストヘッダー(Canned ACL)

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

オブジェクトのACLを設定する

  • 型:String
  • 有効な値:private | public-read | public-read-write | bucket-owner-read | bucket-owner-full-control
  • デフォルト値:private
×

 

詳細に指定する場合

より詳細に ACL を設定する場合は以下のリクエストヘッダーを指定してください。

表. PUT Object リクエストヘッダー(ACL詳細指定)

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

このオブジェクトの閲覧を許可するアカウントまたはグループのリスト

  • 型:String
  • デフォルト値:なし
×
x-iijgio-grant-read-acp

オブジェクトACLの参照を許可するアカウントまたはグループのリスト

  • 型:String
  • デフォルト値:なし
×
x-iijgio-grant-write-acp

オブジェクトACLの設定を許可するアカウントまたはグループのリスト

  • 型:String
  • デフォルト値:なし
×
x-iijgio-grant-full-control

このオブジェクトに対して全ての権限を付加するアカウントまたはグループのリスト

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

設定するアカウントまたはグループはそれぞれ type=value 形式で指定します。 type には以下のいずれかを指定できます。

  • emailAddress: アカウントのメールアドレス
  • id: アカウントの Show ID
  • url: グループを示す以下のURL

    • http://acs.dag.iijgio.com/groups/global/AllUsers

      • 匿名ユーザも含め、すべてのユーザを表すグループ

x-iijgio-grant-read ヘッダーを指定する例:

x-iijgio-grant-read: emailAddress="taro@dag.iijgio.com", emailAddress="jiro@dag.iijgio.com"

 

サーバサイド暗号化

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

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

名前説明必須
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エンコードした値をセットします。暗号化キーが正しく送られて来たかサービス側で検証するために利用します。
リクエストエレメント

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

 

レスポンス情報

レスポンスヘッダー

この操作では基本レスポンスヘッダーを返します。
オブジェクトを サーバサイド暗号化 で暗号化した場合、追加で以下のヘッダを返します。 

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

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

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

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

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

  • 型:String
レスポンスエレメント

この操作はレスポンスエレメントを返しません。

エラー情報

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

表. PUT Object エラーコード一覧

コードステータス内容
InvalidAccessKeyId403 Forbidden指定のアクセスキーIDを持つユーザが存在しません。
SignatureDoesNotMatch403 Forbidden指定されたリクエストのシグネチャが一致しません。
AccessDenied403 Forbiddenバケットに対するWRITE権限がありません。
NoSuchBucket404 Not Found指定のバケットが存在しません。
EntityTooSmall400 Bad Requestファイルが許容最低サイズよりも小さいです。
EntityTooLarge400 Bad Requestファイルが許容最大サイズよりも大きいです。
KeyTooLong400 Bad Requestオブジェクトのkeyが許容サイズを超えています。
MetadataTooLarge400 Bad Requestメタデータのサイズが許容サイズを超えています。
InvalidArgument400 Bad Request

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

InvalidEncryptionAlgorithmError400 Bad Requestx-iijgio-server-side-encryption-customer-algorithに誤った値が指定されています。

 

サンプル 

サンプル1: オブジェクトmy-image.jpgをバケットmybucketに追加する
リクエスト
PUT /mybucket/my-image.jpg HTTP/1.1
Host: s3api.iot.iij.jp
Date: Wed, 12 Oct 2009 17:50:00 GMT
Authorization: IIJGIO 15B4D3461F177624206A:xQE0diMbLRepdf3YB+FIEXAMPLE=
Content-Type: text/plain
Content-Length: 11434
Expect: 100-continue

[11434 bytes of object data]
レスポンス
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
x-iijgio-id-2: LriYPLdmOdAiIfgSm/F1YsViT1LW94/xUQxMsF7xiEb1a0wiIOIxl+zbwZ163pt7
x-iijgio-request-id: 0A49CE4060975EAC
Date: Wed, 12 Oct 2009 17:50:00 GMT
ETag: "1b2cf535f27731c974343645a3985328"
Content-Length: 0
Server: s3api.iot.iij.jp

 

サンプル2: オブジェクトmy-image.jpgをバケットmybucketに、サーバサイド暗号化で暗号化しながら追加するサンプル
リクエスト
PUT /mybucket/my-image.jpg HTTP/1.1
Host: s3api.iot.iij.jp
Date: Wed, 12 Oct 2009 17:50:00 GMT
Authorization: IIJGIO 15B4D3461F177624206A:xQE0diMbLRepdf3YB+FIEXAMPLE=
x-iijgio-server-side-encryption-customer-algorithm: AES256
x-iijgio-server-side-encryption-customer-key: MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=
x-iijgio-server-side-encryption-customer-key-md5: dnF5x6K/8ZZRzpfSlMMM+w==
Content-Type: text/plain
Content-Length: 11434
Expect: 100-continue

[11434 bytes of object data]
レスポンス
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
x-iijgio-id-2: LriYPLdmOdAiIfgSm/F1YsViT1LW94/xUQxMsF7xiEb1a0wiIOIxl+zbwZ163pt7
x-iijgio-request-id: 0A49CE4060975EAC
x-iijgio-server-side-encryption-customer-algorithm: AES256
x-iijgio-server-side-encryption-customer-key-md5: dnF5x6K/8ZZRzpfSlMMM+w==
Date: Wed, 12 Oct 2009 17:50:00 GMT
ETag: "7510dc34e6d7b31a30bd83c81a570274"
Content-Length: 0
Server: s3api.iot.iij.jp