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

Object Storage Service:PostObject

最終更新日:Mar 05, 2024

HTMLフォームを使用してオブジェクトをバケットにアップロードします。

使用上の注意

  • HTMLフォームを使用してオブジェクトをバケットにアップロードするには、oss:PutObject権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

  • PostObject操作を呼び出してアップロードするオブジェクトのサイズは、5 GBを超えることはできません。

  • バケットへのPostObjectリクエストを開始するには、バケットに対する書き込み権限が必要です。 PostObjectリクエストを開始するバケットのアクセス制御リスト (ACL) がpublic-read-writeの場合、PostObjectリクエストに署名する必要はありません。 それ以外の場合、Object Storage Service (OSS) はリクエスト内の署名情報を検証します。

  • PutObject操作とは異なり、PostObject操作はAccessKeyシークレットを使用してポリシーフォームフィールドの署名を計算します。 計算された署名文字列は、署名フォームフィールドの値として使用されます。 OSSはこの値をチェックして、署名の有効性を検証します。

  • 送信されたフォームのURLは、バケットのドメイン名です。 URLでバケットにアップロードするオブジェクトを指定する必要はありません。 リクエスト行の形式は、POST /ObjectName HTTP/1.1ではなくPOST / HTTP/1.1です。

  • OSSは、PostObjectリクエストのヘッダーまたはURLの署名情報をチェックしません。

バージョン管理

バージョン管理が有効なバケットに対してPostObjectリクエストを開始すると、アップロードされたオブジェクトに対して一意のバージョンIDが生成され、レスポンスのx-OSS-version-IDヘッダーの値としてバージョンidが返されます。

バージョン管理が一時停止されたバケットに対してPostObjectリクエストを開始すると、OSSはアップロードされたオブジェクトのバージョンID nullを生成し、レスポンスのx-oss-version-IDヘッダーの値としてバージョンidを返します。 オブジェクトは、IDがnullのバージョンを1つだけ持つことができます。

リクエスト構文

POST / HTTP/1.1
ホスト: BucketName.oss-cn-hangzhou.aliyuncs.com
ユーザーエージェント: browser_data
Content-Length: ContentLength
Content-Type: multipart/form-data; boundary=9431149156168
-- 9431149156168
Content-Disposition: フォームデータ; name="key"
キー
-- 9431149156168
Content-Disposition: フォームデータ; name="success_action_redirect"
success_redirect
-- 9431149156168
Content-Disposition: フォームデータ; name="Content-Disposition"
添付ファイル; filename=oss_download.jpg
-- 9431149156168
Content-Disposition: form-data; name="x-oss-meta-uuid"
myuuid
-- 9431149156168
Content-Disposition: フォームデータ; name="x-oss-meta-tag"
mytag
-- 9431149156168
Content-Disposition: フォームデータ; name="OSSAccessKeyId"
access-key-id
-- 9431149156168
Content-Disposition: フォームデータ; name="policy"
encoded_policy
-- 9431149156168
Content-Disposition: フォームデータ; name="Signature"
署名
-- 9431149156168
Content-Disposition: form-data; name="file"; filename="MyFilename.jpg"
コンテンツタイプ: image/jpeg
file_content
-- 9431149156168
Content-Disposition: フォームデータ; name="submit"
OSSへのアップロード
-9431149156168- 

リクエストヘッダー

重要
  • PostObjectリクエストの本文は、multipart/form-data形式でエンコードされます。 PostObject操作では、パラメーターはフォームフィールドとしてリクエスト本文に渡されますが、パラメーターはHTTPリクエストヘッダーとしてPutObject操作で渡されます。

  • PostObject操作中にx-oss-taggingリクエストヘッダーを渡してオブジェクトにタグを追加することはできません。 PostObject操作の完了後、PutObjectTagging操作を呼び出してオブジェクトにタグを追加できます。

ヘッダー

データ型

必須

説明

コンテンツタイプ

String

任意

アップロードするオブジェクトのタイプと、webページのエンコード形式。 ブラウザは、ヘッダーの値に基づいてオブジェクトの読み取り方法とエンコード方法を決定します。

PostObject操作で送信されるフォームは、multipart/form-data形式でエンコードする必要があります。 Content-Typeヘッダーは、multipart/form-data;boundary=xxxxxx形式である必要があります。

この形式では、境界はフォームによってランダムに生成される境界文字列です。 境界文字列を指定する必要はありません。 OSS SDKを使用してフォームを作成する場合、SDKはランダムな境界文字列も生成します。

x-oss-object-acl

String

任意

アップロードするオブジェクトのACL。

リクエストヘッダーとフォームフィールドでx-oss-object-aclを指定した場合、フォームフィールドで指定されたACLが、リクエストヘッダーで指定されたACLよりも優先されます。

有効な値:

  • default (デフォルト): オブジェクトのACLは、オブジェクトが格納されているバケットのACLと同じです。

  • private: オブジェクトのACLがprivateです。 オブジェクトの読み取りおよび書き込み権限を持つのは、オブジェクトの所有者および許可されたユーザーのみです。

  • public-read: オブジェクトのACLはpublic-readです。 オブジェクトの読み取りおよび書き込み権限を持つのは、オブジェクトの所有者および許可されたユーザーのみです。 他のユーザーには、オブジェクトに対する読み取り権限のみがあります。 オブジェクトACLをこの値に設定する場合は注意してください。

  • public-read-write: オブジェクトのACLはpublic-read-writeです。 すべてのユーザーは、オブジェクトに対する読み取りおよび書き込み権限を持っています。 オブジェクトACLをこの値に設定する場合は注意してください。

詳細については、「オブジェクトACL」をご参照ください。

PostObjectリクエストの一般的なリクエストヘッダー (ホストや日付など) の詳細については、「一般的なリクエストヘッダー」をご参照ください。

リクエスト要素

重要
  • 最後のフォームフィールドはファイルでなければなりません。 他のフォームフィールドに特別な注文は必要ありません。

  • フォームフィールドのキーは8 KBを超えることはできません。また、フォームフィールドの値は2 MBを超えることはできません。

要素

データ型

必須

説明

キャッシュ制御

String

任意

オブジェクトがダウンロードされたときのwebページのキャッシュ動作。 詳細については、「RFC 2616」をご参照ください。

この要素はデフォルトでは空です。

コンテンツ処理

String

任意

オブジェクトがダウンロードされたときのオブジェクトの名前。 詳細については、「RFC 2616」をご参照ください。

この要素はデフォルトでは空です。

コンテンツエンコーディング

String

任意

オブジェクトがダウンロードされたときのオブジェクトのコンテンツエンコード形式。 詳細については、「RFC 2616」をご参照ください。

この要素はデフォルトでは空です。

有効期限

String

任意

キャッシュされたデータの有効期限。 詳細については、「RFC 2616」をご参照ください。

この要素はデフォルトでは空です。

OSSAccessKeyId

String

条件付き

バケットを所有するアカウントのAccessKey ID。

この要素はデフォルトでは空です。

条件: このフォームフィールドは、バケットACLがpublic-read-writeでない場合、またはポリシーまたは署名フォームフィールドがリクエストで指定されている場合に必要です。

policy

String

条件付き

リクエスト内のフォームフィールドの有効性。 ポリシーフォームフィールドを含まないリクエストは、匿名のリクエストと見なされ、ACLがパブリック読み書きであるバケットにのみアクセスできます。

この要素はデフォルトでは空です。

条件: このフォームフィールドは、バケットACLがpublic-read-writeでない場合、またはOSSAccessKeyIdまたはSignatureフォームフィールドがリクエストで指定されている場合に必要です。

重要

フォームとポリシーフォームフィールドをUTF-8-encodedする必要があります。 ポリシーフォームフィールドもBase64-encodedする必要があります。

Signature

String

条件付き

AccessKeyシークレットとポリシーフォームフィールドに基づいて計算される署名情報。 OSSは署名情報をチェックして、PostObjectリクエストの有効性を検証します。 詳細については、「付録: 署名」をご参照ください。

この要素はデフォルトでは空です。

条件: このフォームフィールドは、バケットACLがpublic-read-writeでない場合、またはOSSAccessKeyIdまたはpolicyフォームフィールドがリクエストで指定されている場合に必要です。

説明

フォームフィールドは大文字と小文字が区別されませんが、値は大文字と小文字が区別されます。

x-oss-server-side-encryption-key-id

String

任意

key Management Service (KMS) によって管理されるカスタマーマスターキー (CMK) のID。 この要素は、x-oss-server-side-encryption要素がKMSに設定されている場合にのみ設定できます。

x-oss-content-type

String

任意

x-oss-content-typeフォームフィールドをPostObjectリクエストの本文に追加して、アップロードするオブジェクトのコンテンツタイプを指定できます。 x-oss-content-typeフォームフィールドで指定されたコンテンツタイプは、ブラウザーによって自動的に生成されるファイルフォームフィールドで指定されたコンテンツタイプよりも優先されます。

コンテンツタイプの優先順位は、x-oss-content-typeフォームフィールド> ブラウザによって自動的に生成されるファイルフォームフィールドで指定されたcontent-Typeの順です。

この要素はデフォルトでは空です。

x-oss-forbid-overwrite

String

任意

PostObject操作で、同じ名前の既存のオブジェクトを上書きするかどうかを指定します。

オブジェクトをアップロードするバケットのバージョン管理が有効または一時停止されている場合、x-oss-forbid-overwriteは有効になりません。 この場合、PostObject操作を呼び出してアップロードされたオブジェクトは、同じ名前の既存のオブジェクトを上書きします。

  • x-oss-forbid-overwriteが指定されていない場合、またはx-oss-forbid-overwritefalseに設定されている場合、PostObject操作を呼び出してアップロードされたオブジェクトは、同じ名前の既存のオブジェクトを上書きします。

  • x-oss-forbid-overwritetrueに設定されている場合、PostObject操作を呼び出してアップロードされたオブジェクトは、同じ名前の既存のオブジェクトを上書きしません。

x-oss-forbid-overwriteを指定すると、OSSの1秒あたりのクエリ (QPS) パフォーマンスが低下する可能性があります。 x-oss-forbid-overwriteを使用して多数の操作 (QPSが1,000を超える) を実行する場合は、テクニカルサポートにお問い合わせください。

x-oss-object-acl

String

任意

アップロードするオブジェクトのACL。 リクエストヘッダーとフォームフィールドで、アップロードするオブジェクトのACLを指定できます。

リクエストヘッダーとフォームフィールドでx-oss-object-aclを指定した場合、フォームフィールドで指定されたACLが、リクエストヘッダーで指定されたACLよりも優先されます。

有効な値:

  • default (デフォルト): オブジェクトのACLは、オブジェクトが格納されているバケットのACLと同じです。

  • private: オブジェクトのACLがprivateです。 オブジェクトの読み取りおよび書き込み権限を持つのは、オブジェクトの所有者および許可されたユーザーのみです。

  • public-read: オブジェクトのACLはpublic-readです。 オブジェクトの読み取りおよび書き込み権限を持つのは、オブジェクトの所有者および許可されたユーザーのみです。 他のユーザーには、オブジェクトに対する読み取り権限のみがあります。 オブジェクトACLをこの値に設定する場合は注意してください。

  • public-read-write: オブジェクトのACLはpublic-read-writeです。 すべてのユーザーは、オブジェクトに対する読み取りおよび書き込み権限を持っています。 オブジェクトACLをこの値に設定する場合は注意してください。

詳細については、「オブジェクトACL」をご参照ください。

x-oss-storage-class

String

任意

オブジェクトのストレージクラス。

オブジェクトをアップロードするときにx-oss-storage-classを指定した場合、オブジェクトがアップロードされるバケットのストレージクラスに関係なく、アップロードされたオブジェクトのストレージクラスは指定された値になります。 たとえば、低頻度アクセス (IA) バケットにオブジェクトをアップロードするときにx-oss-storage-classヘッダーを標準に設定すると、オブジェクトは標準オブジェクトとして保存されます。

有効な値:

  • 標準

  • IA

  • アーカイブ

  • ColdArchive

  • DeepColdArchive

    重要

    多数のオブジェクトをアップロードし、オブジェクトのストレージクラスをDeep Cold Archiveに設定する場合は、高いPUTリクエスト料金が請求されます。 オブジェクトのアップロード時にオブジェクトのストレージクラスを標準に設定し、標準オブジェクトのストレージクラスをDeep Cold Archiveに変換するようにライフサイクルルールを設定することを推奨します。 これにより、PUTリクエスト料金が削減されます。

詳細については、「概要」をご参照ください。

キー

String

必須

アップロードするオブジェクトの名前。 オブジェクト名をエンコードする必要はありません。 オブジェクト名にdestfolder/example.jpgなどのパスが含まれている場合、OSSは対応するディレクトリを作成します。

この要素はデフォルトでは空です。

success_action_redirect

String

任意

オブジェクトのアップロード後にクライアントがリダイレクトされるURL。 このフォームフィールドが指定されていない場合、返される結果はsuccess_action_statusフォームフィールドによって指定されます。 アップロードが失敗した場合、OSSはエラーコードを返し、クライアントはURLにリダイレクトされません。

この要素はデフォルトでは空です。

success_action_status

String

任意

success_action_redirectフォームフィールドが指定されておらず、オブジェクトがアップロードされた場合にクライアントに返されるHTTPステータスコード。

有効な値: 200、201、204 デフォルト値: 204

  • このフォームフィールドが200または204に設定されている場合、OSSは空のファイルとHTTPステータスコードの200または204を返します。

  • このフォームフィールドが201に設定されている場合、OSSはXMLファイルとHTTPステータスコード201を返します。

  • このフォームフィールドが指定または無効な値に設定されていない場合、OSSは空のファイルとHTTPステータスコード204を返します。

x-oss-meta-*

String

任意

オブジェクトのユーザーメタデータ。

この要素はデフォルトでは空です。

リクエストにx-oss-meta-プレフィックスを含む名前のフォームフィールドが含まれている場合、そのフォームフィールドはオブジェクトのユーザーメタデータと見なされます。 例: x-oss-meta-location

説明

オブジェクトは、名前にx-oss-meta-プレフィックスを含む複数のフォームフィールドを持つことができます。 ただし、オブジェクトのすべてのユーザーメタデータの合計サイズは8 KBを超えることはできません。

x-oss-security-token

String

任意

一時的なアクセス許可のセキュリティトークン。 Security Token Service (STS) から一時的なアクセス資格情報を取得し、リクエストに一時的なアクセス資格情報を使用する場合は、このフォームフィールドをセキュリティトークンに設定し、OSSAccessKeyIdを一時的なアクセス資格情報のAccessKey IDに設定する必要があります。 一時的なAccessKey IDを使用するリクエストの署名は、AccessKey IDを使用するリクエストの署名を計算するのと同じ方法で計算できます。

この要素はデフォルトでは空です。

詳細については、「STSが提供する一時的な資格情報を使用したOSSへのアクセス」をご参照ください。 AssumeRole操作を呼び出すか、さまざまなプログラミング言語のSTS SDKを使用して、一時的なアクセス資格情報を取得できます。

ファイル

String

必須

ファイルまたはテキストの内容。 コンテンツをエンコードする必要はありません。 ブラウザは、ファイルタイプに基づいてContent-Typeフォームフィールドを自動的に追加し、content-typeヘッダーで指定されたコンテンツタイプを上書きします。 PostObjectリクエストを使用してアップロードできるオブジェクトは1つだけです。

この要素はデフォルトでは空です。

重要

最後のフォームフィールドはファイルでなければなりません。

レスポンスヘッダー

ヘッダー

データ型

説明

x-oss-server-side-encryption

String

KMS

サーバー側でオブジェクトを暗号化するために使用されるアルゴリズム。 リクエストにx-oss-server-side-encryptionが指定されている場合、レスポンスにはこのヘッダーが含まれます。

Content-MD5

String

1B2M2Y8AsgTpgAmY7PhC ****

オブジェクトのMD5ハッシュ。

重要

オブジェクトのMD5ハッシュは、クライアントがオブジェクトをアップロードした後に取得されます。 オブジェクトのMD5ハッシュは、レスポンスボディのMD5ハッシュではありません。

x-oss-hash-crc64ecma

String

316181249502703 ****

オブジェクトのCRC-64値。

x-oss-version-id

String

CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0 ****

オブジェクトのバージョンID。 このヘッダーは、バージョン管理が有効なバケットにオブジェクトをアップロードした場合にのみ返されます。

PostObjectリクエストへのレスポンスの一般的なレスポンスヘッダー (Dateやx-oss-request-idなど) の詳細については、「一般的なレスポンスヘッダー」をご参照ください。

レスポンス要素

要素

データ型

説明

PostResponse

Container

PostObjectリクエストの結果を格納するコンテナー。

子ノード: バケット、ETag、キー、および場所

Bucket

String

バケットの名前です。

親ノード: PostResponse

ETag

String

オブジェクトのアップロード時に作成されるエンティティタグ (ETag) 。 PostObject操作を呼び出してオブジェクトが作成された場合、ETag値はオブジェクトコンテンツのMD5ハッシュではなく、特定のルールに基づいて計算された一意の値になります。 オブジェクトのETag値を使用して、オブジェクトの内容が変更されているかどうかを確認できます。

親ノード: PostResponse

場所

String

アップロードされたオブジェクトへのアクセスに使用されるURL。

親ノード: PostResponse

  • リクエストの例

    POST / HTTP/1.1
    ホスト: oss-example.oss-cn-hangzhou.aliyuncs.com
    コンテンツ-長さ: 344606
    Content-Type: multipart/form-data; boundary=9431149156168
    -- 9431149156168
    Content-Disposition: フォームデータ; name="key"
    /user/a/objectName.txt
    -- 9431149156168
    Content-Disposition: フォームデータ; name="success_action_status"
    200
    -- 9431149156168
    Content-Disposition: フォームデータ; name="Content-Disposition"
    content_disposition
    -- 9431149156168
    Content-Disposition: form-data; name="x-oss-meta-uuid"
    uuid
    -- 9431149156168
    Content-Disposition: フォームデータ; name="x-oss-meta-tag"
    メタデータ
    -- 9431149156168
    Content-Disposition: フォームデータ; name="OSSAccessKeyId"
    44CF9590006BF252 ****
    -- 9431149156168
    Content-Disposition: フォームデータ; name="policy"
    eyJleHBpcmF0aW9uIjoiMjAxMy0xMi0wMVQxMjowMDowMFoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsIDAsIDEwNDg1NzYwXSx7ImJ1Y2tldCI6ImFoYWhhIn0sIHsiQSI6ICJhIn0seyJrZXkiOiAiQUJDIn1dfQ==
    -- 9431149156168
    Content-Disposition: フォームデータ; name="Signature"
    kZoYNv66bsmc10 + dcGKw5x2P ****
    -- 9431149156168
    Content-Disposition: form-data; name="file"; filename="MyFilename.txt"
    Content-Type: text/plain
    abcdefg
    -- 9431149156168
    Content-Disposition: フォームデータ; name="submit"
    OSSへのアップロード
    -9431149156168- 
  • 通常のレスポンス例

    HTTP/1.1 200 OK
    x-oss-request-id: 61d2042d-1b68-6708-5906-33d81921362e
    日付: 2月24日金曜日2014 06:03:28 GMT
    ETag: "5B3C1A2E053D763E1B002CC607C5 ****"
    接続: キープアライブ
    コンテンツ長: 0
    x-oss-hash-crc64ecma: 316181249502703 ****
    Content-MD5: 1B2M2Y8AsgTpgAmY7PhC ****
    サーバー: AliyunOSS 

エラーコード

エラーコード

HTTPステータスコード

説明

FieldItemTooLong

400

フォームフィールドキーのサイズが8 KBを超えるか、フォームフィールド値のサイズが2 MBを超えています。

InvalidArgument

400

OSSAccessKeyId、policy、およびSignatureフォームフィールドの1つが指定されていますが、バケットのACLがpublic-read-writeであるかどうかに関係なく、他の2つのフォームフィールドはリクエストで指定されていません。

InvalidDigest

400

リクエストボディに基づいてOSSによって計算されるContent-MD5値は、リクエストヘッダーに指定されているContent-MD5値とは異なります。

EntityTooLarge

400

PostObjectリクエストボディの合計サイズが5 GBを超えています。

InvalidEncryptionAlgorithmError

400

x-oss-server-side-encryptionヘッダーが以外の値に設定されています。 AES256またはKMS。 x-oss-server-side-encryptionヘッダーは、AES256またはKMSにのみ設定できます。

IncorrectNumberOfFilesInPOSTRequest

400

PostObjectリクエスト内のオブジェクトの数が無効です。 PostObjectリクエストには、ファイルフォームフィールドを1つだけ含めることができます。

FileAlreadyExists

409

リクエストにはx-oss-forbid-overwrite=true要素が含まれていますが、同じ名前のオブジェクトはすでに存在しています。

KmsServiceNotEnabled

403

x-oss-server-side-encryptionヘッダーはKMSに設定されていますが、KMSは事前にアクティブ化されていません。

FileImmutable

409

削除または変更するデータは、保持ポリシーによって保護されます。

付録: ポリシー

PostObjectリクエストのポリシーフォームフィールドは、リクエストの有効性を検証するために使用されます。 ポリシーフォームフィールドの値は、UTF-8とBase64でエンコードされたJSON文字列です。 この値は、PostObjectリクエストが満たす必要がある条件を指定します。 ACLがpublic-read-writeであるバケットにオブジェクトをアップロードする場合、ポリシーフォームフィールドはオプションです。 ただし、このフォームフィールドを指定してPostObjectリクエストを制限することを推奨します。

例:

{
  "expiration": "2014-12-01T12:00:00.000Z" 、
  "conditions": [
    {"bucket": "johnsmith" },    
    ["content-length-range", 1, 10],
    ["eq" 、"$success_action_status" 、"201"] 、
    ["starts-with", "$key", "user/eric/"],
    ["in" 、"$content-type" 、["image/jpg" 、"image/png"]] 、
    ["not-in", "$cache-control", ["no-cache"]]
  ]
}

ポリシーフォームフィールドには、有効期限と条件のパラメーターが含まれている必要があります。

  • 有効期限

    expirationパラメーターは、リクエストの有効期限を指定します。 時間はISO 8601標準に従う必要があり、GMTである必要があります。 たとえば、2014-12-01T12:00:00.000Zは、2014年12月1日の12:00より前にPostObjectリクエストを送信する必要があることを指定します。

  • 条件

    conditionsパラメーターは、PostObjectリクエストのフォームフィールドの有効な値を指定するリストです。

    次の表に、ポリシーフィールドで設定できる条件を示します。

    パラメーター

    説明

    マッチングモード

    バケット

    バケットの名前です。

    バケット

    content-length-range

    アップロードするオブジェクトの最小および最大許容サイズ。 単位:バイト

    content-length-range

    Cache-ControlContent-TypeContent-DispositionContent-EncodingExpires

    HTTPリクエストヘッダー。

    重要

    フォームアップロード中にContent-Typeヘッダーに悪意のある変更が加えられないように、ポリシーフォームフィールドにContent-Typeヘッダーを指定することを推奨します。 次のいずれかの方法を使用して、Content-Typeヘッダーを指定できます。

    x-oss-content-type要素で指定されたコンテンツタイプは、ファイルフォームフィールドで指定されたコンテンツタイプよりも優先されます。

    eq、starts-with、in、およびnot-in

    キー

    オブジェクト名

    eq、starts-with、in、およびnot-in

    success_action_redirect

    オブジェクトのアップロード後にクライアントがリダイレクトされるURL。

    eq、starts-with、in、およびnot-in

    success_action_status

    success_action_redirectが指定されていない場合、オブジェクトがアップロードされた後に返されるHTTPステータスコード。

    eq、starts-with、in、およびnot-in

    x-oss-meta-*

    オブジェクトのユーザーメタデータ。

    説明

    ポリシーフィールドは、PostObjectリクエストに含める必要があるフォームフィールドを指定します。 ["eq", "$x-oss-meta-biedb", "biedb-test001"] を指定した場合、キーがx-oss-meta-biedbで値がbiedb-test001のフォームフィールドを追加する必要があります。 それ以外の場合、Invalid corred to Policy: Policy Condition failed: ["eq", "$x-oss-meta-biedb", "biedb-test001"] エラーメッセージが返されます。

    eq、starts-with、in、およびnot-in

    PostObjectリクエストに追加のフォームフィールドが含まれている場合、OSSはこれらのフォームフィールドをポリシーの条件に追加し、その有効性をチェックします。

  • 条件マッチングモード

    マッチングモード

    説明

    content-length-range

    アップロードするオブジェクトのサイズは、サポートされているオブジェクトサイズの範囲内である必要があります。 たとえば、サポートされるオブジェクトサイズが1〜10バイトの場合、条件は ["content-length-range", 1, 10] でなければなりません。

    eq

    フォームフィールドの値は、条件で指定された値とまったく同じである必要があります。 たとえば、キーフォームフィールドの値がaでなければならない場合、条件として ["eq", "$key", "a"] を指定できます。

    starts-with

    フォームフィールドの値は、指定されたプレフィックスで始まる必要があります。 たとえば、keyフォームフィールドの値がuser/user1で始まる場合、条件として ["starts-with", "$key", "user/user1"] を指定できます。

    in

    検証に含める要素。 要素は条件文字列で指定する必要があります。 たとえば、PostObjectリクエストでJPGおよびPNG画像をアップロードできるかどうかを確認する場合、条件は ["in", "$content-type", ["image/jpg", "image/png"]] でなければなりません。

    not-in

    検証から除外する要素。 要素は条件文字列で指定する必要があります。 たとえば、オブジェクトキャッシュ動作を指定し、no-cache要素を除外する場合、条件は ["not-in", "$cache-control", ["no-cache"]] でなければなりません。

PostObjectリクエストのポリシーフォームフィールドでは、ドル記号 ($) は変数を示します。 ドル記号 ($) を記述するには、次のエスケープ文字を使用する必要があります: \$。 PostObjectリクエストのポリシーフォームフィールドのJSON文字列で使用されるエスケープ文字を次の表に示します。

脱出キャラクター

説明

\/

スラッシュ

\\

バックスラッシュ

\"

二重引用符

\$

ドル記号

\b

スペース

\f

フォームフィード

\n

改行

\r

キャリッジリターン

\t

水平タブ

\uxxxx

Unicode文字

付録: 署名

(お勧め) V4署名

PostObject要求は、V4署名をサポートする。 フォームとポリシーフォームフィールドには、OSSでの署名検証をサポートするために次の情報が含まれている必要があります。

  • フォーム

    フィールド

    データ型

    必須

    説明

    policy

    String

    必須

    署名するBase64-encodedポリシー文字列。 文字列は、許可される要求を指定する。

    x-oss-signature-version

    String

    必須

    署名のバージョンとアルゴリズム。 有効値: OSS4-HMAC-SHA256

    x-oss-credential

    String

    必須

    署名の計算に使用できる資格情報。 形式:

    <AccessKeyId>/<date>/<region>/oss/aliyun_v4_request
    • AccessKeyId: AccessKeyペアのAccessKey ID。

    • date: リクエストが開始された日付。 形式: YYYYMMDD 例: 20231203。

    • region: リクエストの送信元のリージョンです。

    • oss: 要求されたサービスの名前。 有効値: oss。

    • aliyun_v4_request: リクエスト内の署名バージョンの説明。 有効値: aliyun_v4_request

    x-oss-date

    String

    必須

    リクエストが開始された時刻。 時間は、ISO 8601規格に従わなければならない。 例: 20231203T12121 2Z

    • リクエストが開始されてから最大15分のオフセットが許可されます。 したがって、サーバーがリクエストを受信する時刻は、x-oss-dateで指定された時刻から最大15分後になることがあります。 これにより、クライアントとサーバーの間にネットワーク伝送の待ち時間や時間差が存在する場合でも、要求を期待どおりに処理できるようになります。

    • リクエストの有効期間は最大7日です。 x-oss-dateで指定された時間から7日後、OSSはリクエストを拒否し、エラーが報告されます。 これにより、リクエストの適時性とセキュリティが保証され、期限切れまたは署名されたリクエストの悪意のある送信が防止されます。

    • x-oss-dateで指定された時間は、署名する文字列のタイムスタンプとして使用されます。 値は、派生キーの日付フィールドおよびポリシーフォームフィールドのx-oss-dateフィールドの値と同じである必要があります。

    x-oss-signature

    String

    必須

    署名検証に使用される説明。 値は、HMAC-SHA256を使用してBase64-encodedポリシー文字列を暗号化し、HMAC-SHA256を使用して得られたバイナリハッシュを16進数形式に変換することによって計算されます。

    x-oss-security-token

    String

    任意

    security token Service (STS) によって発行されたセキュリティトークン。 このフィールドは、STSユーザーを使用してURL署名を作成する場合にのみ必要です。

  • ポリシー

    {
      "expiration": "2023-12-03T13:00:00.000Z" 、
      "conditions": [
        {"bucket": "johnsmith"} 、
        {"x-oss-signature-version": "OSS4-HMAC-SHA256"} 、
        {"x-oss-credential": "AKIDEXAMPLE/20231203/cn-hangzhou/oss/aliyun_v4_request"} 、
        {"x-oss-date": "20231203T1212Z"} 、
        ["content-length-range", 1, 10],
        ["eq" 、"$success_action_status" 、"201"] 、
        ["starts-with", "$key", "user/eric/"],
        ["in" 、"$content-type" 、["image/jpg" 、"image/png"]] 、
        ["not-in", "$cache-control", ["no-cache"]]
      ]
    }

    ポリシーフォームフィールドの条件には、次のフィールドが含まれている必要があります。

    フィールド

    データ型

    必須

    説明

    x-oss-signature-version

    String

    必須

    署名のバージョンとアルゴリズム。 有効値: OSS4-HMAC-SHA256

    x-oss-credential

    String

    必須

    署名の計算に使用できる資格情報。 形式:

    <AccessKeyId>/<date>/<region>/oss/aliyun_v4_request
    • AccessKeyId: AccessKeyペアのAccessKey ID。

    • date: リクエストが開始された日付。

    • region: リクエストの送信元のリージョンです。

    • oss: 要求されたサービスの名前。 有効値: oss。

    • aliyun_v4_request: リクエスト内の署名バージョンの説明。 有効値: aliyun_v4_request

    x-oss-date

    String

    必須

    リクエストが開始された時刻。 時間は、ISO 8601規格に従わなければならない。 例: 20231203T12121 2Z

    • リクエストが開始されてから最大15分のオフセットが許可されます。 したがって、サーバーがリクエストを受信する時刻は、x-oss-dateで指定された時刻から最大15分後になることがあります。 これにより、クライアントとサーバーの間にネットワーク伝送の待ち時間や時間差が存在する場合でも、要求を期待どおりに処理できるようになります。

    • リクエストの有効期間は最大7日です。 x-oss-dateで指定された時間から7日後、OSSはリクエストを拒否し、エラーが報告されます。 これにより、リクエストの適時性とセキュリティが保証され、期限切れまたは署名されたリクエストの悪意のある送信が防止されます。

    • x-oss-dateで指定された時間は、署名する文字列のタイムスタンプとして使用されます。 値は、派生キーの日付フィールドおよびポリシーフォームフィールドのx-oss-dateフィールドの値と同じである必要があります。

  • 署名計算プロセス

    image

    1. UTF-8-encodedポリシーを作成します。

    2. ポリシーをBase64-encodeして、署名する文字列として安全に送信できる文字列を生成します。

    3. HMAC-SHA256を使用して署名する文字列を暗号化します。 HMAC-SHA256を使用するためのキーとして、アカウントの派生キーを使用します。

    4. HMAC-SHA256を使用して計算されたバイナリハッシュを16進文字列に変換します。 取得された16進文字列は、要求の完全性と有効性を検証するために使用される署名です。

V1署名

PostObjectリクエストを確認するには、ポリシーおよび署名フォームフィールドをHTMLフォームに含める必要があります。 ポリシーフォームフィールドには、リクエストでサポートされる値を指定します。

署名フォームフィールドの値を計算するには、次の手順を実行します。

  1. UTF-8-encodedポリシーを作成します。

  2. Base64でポリシーをエンコードします。 結果はポリシーフォームフィールドの値であり、値は署名される文字列として使用されます。

  3. AccessKeyシークレットを使用して、Signature = base64(hmac-sha1(AccessKeySecret,base64 (ポリシー))) の形式で文字列に署名します。

よくある質問

「提案されたアップロードが最大許容サイズを超えた」というエラーメッセージが返された場合はどうすればよいですか?

  • 原因: アップロードされたオブジェクトのサイズが、content-length-rangeパラメーターで指定されたサイズ範囲を超えています。

  • 解決策: content-length-rangeパラメーターを追加して、アップロードされたオブジェクトの最小サイズと最大サイズを指定します。 単位:バイト たとえば、アップロードするオブジェクトのサイズが1 GBの場合、content-length-rangeパラメーターを ["content-length-range", 1, 1073741824] に設定できます。

参考資料