全部产品
Search
文档中心

:PostObject

更新时间:Jul 06, 2025

Topik ini menjelaskan kesalahan umum pada operasi PostObject dan solusinya.

Pengenalan

PostObject digunakan untuk mengunggah file ke OSS menggunakan formulir. Dalam Post Object, entitas pesan dienkripsi dalam format multipart/form-data. Untuk informasi lebih lanjut, lihat RFC 2388. Pada Put Object, parameter dilewatkan melalui header HTTP, sedangkan pada Post Object, parameter dilewatkan sebagai bidang formulir dalam badan pesan.

Pesan PostObject terdiri dari header dan body. Header dan body dipisahkan oleh \r\n--{boundary}. Body mencakup serangkaian bidang formulir dengan format berikut: Content-Disposition: form-data; name="{key}"\r\n\r\n{value}\r\n--{boundary}.

Header umum mencakup Host, User-Agent, Content-Length, Content-Type, dan Content-MD5, sementara bidang formulir mencakup key, OSSAccessKeyId, Signature, Content-Disposition, object meta (x-oss-meta-*), x-oss-security-token, header HTTP lainnya (Cache-Control/Content-Type/Content-Disposition/Content-Encoding/Expires), dan file. file harus menjadi bidang terakhir di antara bidang formulir tersebut.

Untuk informasi lebih lanjut, lihat Post Object.

Kesalahan umum PostObject

Tabel berikut menunjukkan kesalahan umum yang terjadi pada operasi PostObject:

No.

Kesalahan

Penyebab

Solusi

1

ErrorCode: MalformedPOSTRequest ErrorMessage: Badan permintaan POST Anda tidak diformat dengan baik sebagai multipart/form-data

Format bidang formulir tidak valid.

Lihat format bidang formulir PostObject setelah tabel untuk format yang benar dari bidang formulir.

2

ErrorCode: InvalidAccessKeyId ErrorMessage: OSS Access Key Id yang Anda berikan tidak ada dalam catatan kami.

AccessKeyID dinonaktifkan atau tidak ada, AccessKeyID pengguna sementara kedaluwarsa, atau pengguna sementara tidak memberikan STS Token.

Lihat Pemecahan Masalah Invalid AccessKeyId untuk metode pemecahan masalah.

3

ErrorCode: AccessDenied ErrorMessage: Tidak valid sesuai Kebijakan: Kebijakan kedaluwarsa.

expiration di bidang formulir policy telah kedaluwarsa.

Atur ulang expiration dalam kebijakan sambil memastikan bahwa format expiration sesuai dengan ISO8601 GMT.

4

ErrorCode: AccessDenied ErrorMessage: SignatureDoesNotMatch Tanda tangan permintaan yang kami hitung tidak cocok dengan tanda tangan yang Anda berikan. Periksa kunci dan metode penandatanganan Anda.

Tanda tangan salah.

Lihat PostObject signature untuk metode penandatanganan.

5

ErrorCode: InvalidPolicyDocument ErrorMessage: Kebijakan Tidak Valid: Simple-Condition Tidak Valid: Simple-Conditions harus memiliki tepat satu properti yang ditentukan.

Kebijakan berisi setidaknya satu kondisi dalam permintaan.

Lihat format kebijakan PostObject.

6

ErrorCode: InvalidPolicyDocument ErrorMessage: Kebijakan Tidak Valid: JSON Tidak Valid: karakter tidak dikenal e

Periksa format policy untuk memverifikasi apakah

" hilang dan karakter escape adalah \.

7

ErrorCode: InvalidPolicyDocument ErrorMessage: Kebijakan Tidak Valid: JSON Tidak Valid: , atau ] diharapkan

Format policy salah dalam permintaan.

Periksa apakah , atau ] hilang dalam kebijakan.

8

ErrorCode: AccessDenied ErrorMessage: Tidak valid sesuai Kebijakan: Kondisi Kebijakan gagal: [“starts-with”, “$key”, “user/eric/“]

key yang ditentukan oleh permintaan dan yang ditentukan oleh policy tidak cocok.

Periksa nilai bidang formulir key dalam permintaan.

9

ErrorCode: AccessDenied ErrorMessage: Tidak valid sesuai Kebijakan: Kondisi Kebijakan gagal: [“eq”, “$bucket”, “mingdi-bjx”]

bucket yang ditentukan oleh permintaan dan yang ditentukan oleh policy tidak cocok.

Periksa nilai bucket dalam endpoint.

10

ErrorCode: AccessDenied ErrorMessage: Tidak valid sesuai Kebijakan: Kondisi Kebijakan gagal: [“starts-with”, “$x-oss-meta-prop”, “prop-“]

Metadata file x-oss-meta-prop yang ditentukan oleh permintaan dan yang ditentukan oleh kebijakan tidak cocok.

Periksa nilai x-oss-meta-prop dalam permintaan.

11

ErrorCode: AccessDenied ErrorMessage: Tidak valid sesuai Kebijakan: Kondisi Kebijakan gagal: [“eq”, “${field}”, “${value}”]

{field} yang ditentukan dalam bidang formulir dan yang ditentukan oleh kebijakan tidak cocok, atau bidang tersebut tidak ditentukan dalam permintaan.

Periksa nilai {field} dalam permintaan.

12

ErrorCode: AccessDenied ErrorMessage: Anda tidak memiliki hak untuk mengakses objek ini karena acl bucket.

Pengguna saat ini tidak memiliki izin yang diperlukan.

Lihat Masalah dan Pemecahan Masalah Izin OSS.

13

ErrorCode: InvalidArgument ErrorMessage: Bucket POST harus berisi 'key' yang ditentukan. Jika sudah ditentukan, periksa urutan bidang

Bidang formulir tidak menentukan key, atau ditempatkan setelah bidang formulir file.

Tambahkan bidang formulir key atau sesuaikan urutan.

  • Format Bidang Formulir PostObject

    Untuk format permintaan PostObject, perhatikan item berikut:

    • Header harus mencakup Content-Type: multipart/form-data; boundary={boundary}.

    • Header dan body dipisahkan oleh \r\n--{boundary}.

    • Format bidang formulir:

      Content-Disposition: form-data;
              name="{key}"\r\n\r\n{value}\r\n--{boundary}
    • Nama bidang formulir bersifat peka huruf besar-kecil, seperti policy, key, file, OSSAccessKeyId, OSSAccessKeyId, dan Content-Disposition.

      Penting

      Bidang formulir file harus menjadi bidang formulir terakhir.

    • Ketika nilai bucket adalah public-read-write, Anda tidak harus menentukan bidang formulir OSSAccessKeyId, policy, dan Signature. Jika salah satu dari OSSAccessKeyId, policy, dan Signature ditentukan, dua bidang formulir lainnya harus ditentukan tanpa memperhatikan apakah bucket adalah public-read-write atau tidak.

    Berikut ini menjelaskan contoh permintaan PostObject:

    POST / HTTP/1.1
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)
    Content-Type: multipart/form-data; boundary=9431149156168
    Host: mingdi-hz.oss-cn-hangzhou.aliyuncs.com
    Accept: text/html, image/gif, image/jpeg, *; q=. 2, */*; q=. 2
    Connection: keep-alive
    Content-Length: 5052
    -- 9431149156168
    Content-Disposition: form-data; name="key"
    test-key
    --9431149156168
    Content-Disposition: form-data; name="Content-Disposition"
    attachment;filename=D:\img\1.png
    --9431149156168
    Content-Disposition: form-data; name="OSSAccessKeyId"
    2NeL********j2Eb
    Catatan
    • Dalam permintaan sampel sebelumnya, \r\n menunjukkan baris baru, yaitu line feed. Selain itu, ini juga berlaku untuk permintaan sampel berikutnya.

    • Permintaan sampel sebelumnya tidak lengkap. Untuk permintaan lengkap, lihat Post Object.

    Jika Anda memiliki pertanyaan, lihat kode sampel:

  • Format Kebijakan PostObject

    Dalam permintaan PostObject, bidang formulir policy digunakan untuk memverifikasi validitas permintaan dan mendeklarasikan kondisi yang harus dipenuhi oleh permintaan PostObject. Secara spesifik, kondisi-kondisi tersebut adalah:

    • Teks JSON UTF-8 harus dienkripsi dengan base64 sebelum dimasukkan ke dalam bidang formulir policy.

    • policy harus mencakup expiration dan conditions di mana conditions harus berisi setidaknya satu item.

    Berikut ini menunjukkan contoh policy sebelum encoding base64.

    
       {
        "expiration": "2018-01-01T12:00:00.000Z",
        "conditions": [
            ["content-length-range", 0, 104857600]
        ]
    }

    Item expiration menentukan waktu kedaluwarsa permintaan dalam format waktu GMT ISO8601. Sebagai contoh, 2018-01-01T12:00:00.000Z menentukan bahwa permintaan harus dilakukan sebelum pukul 12:00 pagi pada tanggal 1 Januari 2018.

    PostPolicy mendukung kondisi "conditions" berikut:

    Nama

    Deskripsi

    Contoh

    bucket

    Nama bucket dari file yang diunggah. Cocok persis didukung.

    {“bucket”: “johnsmith” } atau [“eq”, “$bucket”, “johnsmith”]

    key

    Nama file yang diunggah. Cocok persis dan cocok awalan didukung.

    [“starts-with”, “$key”, “user/etc/”]

    content-length-range

    Ukuran maksimum dan minimum file yang diunggah.

    [“content-length-range”, 0, 104857600]

    x-oss-meta-*

    Meta objek yang ditentukan. Cocok persis dan cocok awalan didukung.

    [“starts-with”, “$x-oss-meta-prop”, “prop-“]

    success_action_redirect

    URL pengalihan setelah unggahan berhasil. Cocok persis dan cocok awalan didukung.

    [“starts-with”, “$success_action_redirect”, “http://www.aliyun.com”]

    success_action_status

    Kode status yang dikembalikan setelah unggahan berhasil jika success_action_redirect tidak ditentukan. Cocok persis dan cocok awalan didukung.

    [“eq”, “$success_action_status”, “204”]

    Cache-Control, Content-Type, Content-Disposition, Content-Encoding, Expires, dan sebagainya

    Header HTTP yang dilewatkan sebagai bidang formulir. Cocok persis dan cocok awalan didukung.

    [“eq”, “$Content-Encoding”, “ZLIB”]

    PostPolicy mendukung karakter escape berikut dan menggunakan \ untuk escape.

    Karakter Escape

    Deskripsi

    /

    Garis miring

    \

    Garis miring terbalik

    "

    Tanda kutip ganda

    $

    Tanda dolar

    \b

    Ruang kosong

    \f

    Form feed

    \n

    Pemberian makan baris

    \r

    Masuk

    \t

    Tab horizontal

    \uxxxx

    Karakter Unicode

    Untuk informasi lebih lanjut tentang PostPolicy, lihat Kebijakan Post.

  • Signature PostObject

    Untuk verifikasi permintaan Post, ia harus mencakup bidang formulir AccessKeyID, policy, dan Signature. Proses perhitungan tanda tangan adalah sebagai berikut:

    1. Buat kebijakan yang dienkripsi dengan UTF-8.

    2. Enkripsi kebijakan dengan base64. Nilai yang dihasilkan adalah nilai yang akan diisi ke dalam bidang formulir policy, dan nilai ini digunakan sebagai string yang akan ditandatangani.

    3. Tandatangani string dengan AccessKeySecret. Secara khusus, hash string dengan hmac-sha1 dan kemudian enkripsi dengan base64. Metode tanda tangan sama dengan metode untuk Header Signature.

    Yaitu:

    Signature = base64(hmac-sha1(AccessKeySecret, base64(policy)))

    Tentukan tanda tangan yang dihitung dalam bidang formulir Signature sebagai berikut:

    Content-Disposition: form-data; name="Signature"
    {signature}
    -- 9431149156168

    Jika Anda memiliki pertanyaan, lihat kode sampel:

FAQ

  • Bagaimana cara menentukan key?

    Key adalah nama objek, yang ditentukan dalam bidang formulir key. Berikut ini menunjukkan contoh:

    Content-Disposition: form-data; name="key"
    {key}
    --9431149156168
  • Bagaimana cara menentukan konten objek?

    Tentukan konten objek dalam bidang formulir file. Berikut ini menunjukkan contoh:

    Content-Disposition: form-data; name="file"; filename="images.png"
    Content-Type: image/png
    {File-content}
    -- 9431149156168
    Catatan
    • Bidang formulir file harus menjadi bidang terakhir dalam formulir, yaitu harus ditempatkan setelah bidang formulir lainnya.

    • filename adalah nama file lokal yang diunggah tetapi bukan nama objek.

  • Bagaimana cara menentukan content-type dari objek?

    Tentukan content-type dari objek dalam bidang formulir file tetapi tidak dalam content-type header. Berikut ini menunjukkan contoh:

    Content-Disposition: form-data; name="file"; filename="images.png"
    Content-Type: image/png
    {file-content}
    --9431149156168
  • Bagaimana cara menentukan verifikasi content-md5 untuk konten objek?

    Tentukan content-md5 dalam header permintaan Post Object. Perhatikan bahwa nilai MD5 adalah untuk seluruh body yaitu untuk semua bidang formulir. Berikut ini menunjukkan contoh header permintaan:

    POST / HTTP/1.1
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)
    Content-Type: multipart/form-data; boundary = 9431149156168
    Content-MD5: tdqHe4hT/TuKb7Y4by+nJg==
    Host: mingdi-hz.oss-cn-hangzhou.aliyuncs.com
    Accept: text/html, image/gif, image/jpeg, *; q=. 2, */*; q=. 2
    Connection: keep-alive
    Content-Length: 5246
    --9431149156168
  • Bagaimana cara menentukan tanda tangan?

    Lihat PostObject signature untuk metode perhitungan tanda tangan. Tanda tangan dibawa oleh bidang formulir Signature.

  • Bagaimana cara mengimplementasikan Post Object dengan STS Token pengguna sementara?

    Penggunaan AccessKeyID dan AccessKeySecret dari kunci pengguna sementara sama dengan kunci pengguna utama dan kunci sub-pengguna. Token dibawa oleh bidang formulir x-oss-security-token. Berikut ini menunjukkan contoh:

    Content-Disposition: form-data; name="Signature"
    5L0+KaeugxYygfqWLJLoy0ehOmA=
    --9431149156168
    Content-Disposition: form-data; name="x-oss-security-token"
    {Token}
    --9431149156168
  • Bagaimana cara menentukan callback?

    Callback dibawa oleh bidang formulir callback. Berikut ini menunjukkan contoh:

    Content-Disposition: form-data; name="callback"
    eyJjYWxsYmFja0JvZHlUeXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsICJjYWxsYmFja0JvZHkiOiAiZmlsZW5hbWU9JHtvYmplY3R9JnNpemU9JHtzaXplfSZtaW1lVHlwZT0ke21pbWVUeXBlfSIsICJjYWxsYmFja1VybCI6ICJodHRwOi8vb3NzLWRlbW8uYWxpeXVuY3MuY29tOjIzNDUwIn0=
    --9431149156168

    Parameter kustom callback juga dibawa oleh bidang formulir. Berikut ini menunjukkan contoh:

    Content-Disposition: form-data; name="x:var1"
    {var1-value}
    --9431149156168
  • Bagaimana cara menentukan Content-Transfer-Encoding?

    Tentukan Content-Transfer-Encoding dalam bidang formulir file. Berikut ini menunjukkan contoh bidang formulir file:

    Content-Disposition: form-data; name="file"; filename="images.png"
    Content-Type: image/png
    Content-Transfer-Encoding: base64
    {file-content}
    --9431149156168
  • Bagaimana cara menentukan informasi meta kustom Object User Meta?

    Tentukan informasi meta kustom dalam bidang formulir. Berikut ini menunjukkan contoh:

    Content-Disposition: form-data; name="x-oss-meta-uuid"
    {uuid}
    --9431149156168
    Content-Disposition: form-data; name="x-oss-meta-tag"
    {tag}
    --9431149156168
    Catatan

    Untuk informasi lebih lanjut tentang informasi meta file, lihat Informasi Meta File Objek Meta.

  • Bagaimana cara menentukan kondisi seperti kedaluwarsa, Key, Bucket, ukuran, dan header?

    PostObject untuk OSS mendukung berbagai kondisi dan dapat memenuhi persyaratan keamanan yang ketat. Tentukan kondisi dalam bidang formulir policy. Berikut ini menunjukkan contoh kebijakan:

    {
        "expiration": "2018-01-01T12:00:00.000Z",
        "conditions": [
            ["eq", "$bucket", "md-hz"],
            ["starts-with", "$key", "md/conf/"],
            ["content-length-range", 0, 104857600]
        ]
    }

    Dalam kebijakan sebelumnya, kondisi untuk operasi Post Object pengguna adalah sebagai berikut:

    • bucket harus md-hz.

    • key harus dimulai dengan md/conf/.

    • Ukuran file yang diunggah harus kurang dari 100 MB.

    • Waktu permintaan harus lebih awal dari 2018-01-01T12:00:00.000Z.

  • Bagaimana cara menentukan header HTTP seperti Cache-Control, Content-Type, Content-Disposition, Content-Encoding dan Expires?

    Tentukan header HTTP termasuk Cache-Control, Content-Type, Content-Disposition, Content-Encoding, dan Expires dalam bidang formulir. Untuk makna header HTTP tersebut, lihat RFC2616. Namun, Content-MD5 perlu ditentukan dalam Header Post.

Contoh Post Object

Tautan yang sering digunakan