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操作で送信されるフォームは、 この形式では、境界はフォームによってランダムに生成される境界文字列です。 境界文字列を指定する必要はありません。 OSS SDKを使用してフォームを作成する場合、SDKはランダムな境界文字列も生成します。 |
x-oss-object-acl | String | 任意 | アップロードするオブジェクトのACL。 リクエストヘッダーとフォームフィールドでx-oss-object-aclを指定した場合、フォームフィールドで指定されたACLが、リクエストヘッダーで指定された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を指定すると、OSSの1秒あたりのクエリ (QPS) パフォーマンスが低下する可能性があります。 x-oss-forbid-overwriteを使用して多数の操作 (QPSが1,000を超える) を実行する場合は、テクニカルサポートにお問い合わせください。 |
x-oss-object-acl | String | 任意 | アップロードするオブジェクトのACL。 リクエストヘッダーとフォームフィールドで、アップロードするオブジェクトのACLを指定できます。 リクエストヘッダーとフォームフィールドでx-oss-object-aclを指定した場合、フォームフィールドで指定されたACLが、リクエストヘッダーで指定されたACLよりも優先されます。 有効な値:
詳細については、「オブジェクトACL」をご参照ください。 |
x-oss-storage-class | String | 任意 | オブジェクトのストレージクラス。 オブジェクトをアップロードするときにx-oss-storage-classを指定した場合、オブジェクトがアップロードされるバケットのストレージクラスに関係なく、アップロードされたオブジェクトのストレージクラスは指定された値になります。 たとえば、低頻度アクセス (IA) バケットにオブジェクトをアップロードするときにx-oss-storage-classヘッダーを標準に設定すると、オブジェクトは標準オブジェクトとして保存されます。 有効な値:
詳細については、「概要」をご参照ください。 |
キー | String | 必須 | アップロードするオブジェクトの名前。 オブジェクト名をエンコードする必要はありません。 オブジェクト名に この要素はデフォルトでは空です。 |
success_action_redirect | String | 任意 | オブジェクトのアップロード後にクライアントがリダイレクトされるURL。 このフォームフィールドが指定されていない場合、返される結果はsuccess_action_statusフォームフィールドによって指定されます。 アップロードが失敗した場合、OSSはエラーコードを返し、クライアントはURLにリダイレクトされません。 この要素はデフォルトでは空です。 |
success_action_status | String | 任意 | success_action_redirectフォームフィールドが指定されておらず、オブジェクトがアップロードされた場合にクライアントに返されるHTTPステータスコード。 有効な値: 200、201、204 デフォルト値: 204
|
x-oss-meta-* | String | 任意 | オブジェクトのユーザーメタデータ。 この要素はデフォルトでは空です。 リクエストにx-oss-meta-プレフィックスを含む名前のフォームフィールドが含まれている場合、そのフォームフィールドはオブジェクトのユーザーメタデータと見なされます。 例: 説明 オブジェクトは、名前に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-Control、Content-Type、Content-Disposition、Content-Encoding、Expires
HTTPリクエストヘッダー。
重要フォームアップロード中にContent-Typeヘッダーに悪意のある変更が加えられないように、ポリシーフォームフィールドにContent-Typeヘッダーを指定することを推奨します。 次のいずれかの方法を使用して、Content-Typeヘッダーを指定できます。
PostObjectリクエストの本文にx-oss-content-type要素を追加して、Content-Typeヘッダーを指定します。 例:
Content-Type: image/jpeg
OSSでサポートされているContent-Typeヘッダーの値の詳細については、「Content-Typeヘッダーの設定方法」をご参照ください。ファイルフォームフィールドを使用して、Content-Typeヘッダーを指定します。 例:
Content-Type: image/png
OSSでサポートされている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フィールドの値と同じである必要があります。
署名計算プロセス
UTF-8-encodedポリシーを作成します。
ポリシーをBase64-encodeして、署名する文字列として安全に送信できる文字列を生成します。
HMAC-SHA256を使用して署名する文字列を暗号化します。 HMAC-SHA256を使用するためのキーとして、アカウントの派生キーを使用します。
HMAC-SHA256を使用して計算されたバイナリハッシュを16進文字列に変換します。 取得された16進文字列は、要求の完全性と有効性を検証するために使用される署名です。
V1署名
PostObjectリクエストを確認するには、ポリシーおよび署名フォームフィールドをHTMLフォームに含める必要があります。 ポリシーフォームフィールドには、リクエストでサポートされる値を指定します。
署名フォームフィールドの値を計算するには、次の手順を実行します。
UTF-8-encodedポリシーを作成します。
Base64でポリシーをエンコードします。 結果はポリシーフォームフィールドの値であり、値は署名される文字列として使用されます。
AccessKeyシークレットを使用して、
Signature = base64(hmac-sha1(AccessKeySecret,base64 (ポリシー)))
の形式で文字列に署名します。
よくある質問
「提案されたアップロードが最大許容サイズを超えた」というエラーメッセージが返された場合はどうすればよいですか?
原因: アップロードされたオブジェクトのサイズが、content-length-rangeパラメーターで指定されたサイズ範囲を超えています。
解決策: content-length-rangeパラメーターを追加して、アップロードされたオブジェクトの最小サイズと最大サイズを指定します。 単位:バイト たとえば、アップロードするオブジェクトのサイズが1 GBの場合、content-length-rangeパラメーターを ["content-length-range", 1, 1073741824] に設定できます。
参考資料
フォームアップロードを使用してwebクライアントからOSSにデータを転送する方法の詳細については、「クライアントに署名を追加してOSSにデータをアップロードする」をご参照ください。
PostObjectおよび対応するソリューションを呼び出すときの一般的なエラーの詳細については、「PostObject」をご参照ください。