0006-00000205

更新时间:
复制 MD 格式

Problem description

The policy form field in a PostObject request is blank, causing a request error.

Causes

The policy field validates the form fields in a PostObject request. A request without policy is treated as an anonymous request, which can only access buckets with a public-read-write access control list (ACL).

A request error occurs if either of the following conditions is true:

  • The bucket ACL is not public-read-write and the request includes no policy field.

  • The request includes OSSAccessKeyId or Signature, but the policy field is blank.

Examples

In the following request, OSSAccessKeyId and Signature are set, but the policy field has no value (line 25).

POST / HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Content-Length: 344606
Content-Type: multipart/form-data; boundary=9431149156168
--9431149156168
Content-Disposition: form-data; name="key"
/user/a/objectName.txt
--9431149156168
Content-Disposition: form-data; name="success_action_status"
200
--9431149156168
Content-Disposition: form-data; name="Content-Disposition"
content_disposition
--9431149156168
Content-Disposition: form-data; name="x-oss-meta-uuid"
uuid
--9431149156168
Content-Disposition: form-data; name="x-oss-meta-tag"
metadata
--9431149156168
Content-Disposition: form-data; name="OSSAccessKeyId"
44CF9590006BF252****
--9431149156168
Content-Disposition: form-data; name="policy"

--9431149156168
Content-Disposition: form-data; name="Signature"
kZoYNv66bsmc10+dcGKw5x2P****
--9431149156168
Content-Disposition: form-data; name="file"; filename="MyFilename.txt"
Content-Type: text/plain
abcdefg
--9431149156168
Content-Disposition: form-data; name="submit"
Upload to OSS
--9431149156168--

Solutions

Set the policy form field to a valid Base64-encoded value:

  1. Write a policy document in JSON. The document must include expiration and conditions. Python

       policy = {
           "expiration": "2023-02-19T13:19:00.000Z",
           "conditions": [
               ["content-length-range", 0, 1048576000]
           ]
       }

    JavaScript

       var policyText = {
           "expiration": "2023-02-18T21:39:00.000Z",
           "conditions": [
               ["content-length-range", 0, 1048576000]
           ]
       };
  2. Encode the policy in Base64 and set the result as the value of the policy field. Python

       encoded_policy = base64.b64encode(json.dumps(policy).encode('utf-8'))

    JavaScript

       var policyBase64 = Base64.encode(JSON.stringify(policyText));

References