Anda dapat memanggil operasi PostObject untuk mengunggah objek ke bucket tertentu menggunakan formulir HTML.
Catatan penggunaan
Untuk mengunggah file menggunakan formulir HTML, Anda harus memiliki izin
oss:PutObject. Untuk informasi selengkapnya, lihat Attach a custom policy to a RAM user.Ukuran objek yang diunggah menggunakan operasi PostObject tidak boleh melebihi 5 GB.
Permintaan PostObject memerlukan izin tulis pada bucket. Jika daftar kontrol akses (ACL) bucket tersebut adalah public-read-write, Anda tidak perlu menyertakan informasi signature. Jika tidak, Object Storage Service (OSS) akan mengautentikasi signature dalam permintaan tersebut.
Berbeda dengan operasi PutObject, operasi PostObject menggunakan Rahasia AccessKey untuk menandatangani kebijakan. String signature yang dihitung digunakan sebagai nilai field formulir Signature. OSS mengautentikasi nilai ini untuk menentukan validitas signature tersebut.
URL untuk formulir yang dikirimkan adalah nama domain bucket. Anda tidak perlu menentukan objek dalam URL. Baris permintaan adalah
POST / HTTP/1.1dan bukanPOST /ObjectName HTTP/1.1.Jika permintaan POST berisi informasi signature di header atau URL, OSS tidak akan memeriksa informasi tersebut.
Pengendalian versi
Jika Anda mengirim permintaan PostObject ke bucket yang telah diaktifkan fitur Pengendalian versi, OSS secara otomatis menghasilkan ID versi unik untuk objek baru tersebut. ID ini dikembalikan dalam header respons x-oss-version-id.
Jika Anda mengirim permintaan PostObject ke bucket yang Pengendalian versinya ditangguhkan, OSS secara otomatis menghasilkan ID versi null untuk objek baru tersebut. ID ini dikembalikan dalam header respons x-oss-version-id. Hanya satu ID versi null yang diizinkan untuk objek yang sama.
Sintaksis permintaan
POST / HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
User-Agent: browser_data
Content-Length: ContentLength
Content-Type: multipart/form-data; boundary=9431149156168
--9431149156168
Content-Disposition: form-data; name="key"
key
--9431149156168
Content-Disposition: form-data; name="success_action_redirect"
success_redirect
--9431149156168
Content-Disposition: form-data; name="Content-Disposition"
attachment;filename=oss_download.jpg
--9431149156168
Content-Disposition: form-data; name="x-oss-meta-uuid"
myuuid
--9431149156168
Content-Disposition: form-data; name="x-oss-meta-tag"
mytag
--9431149156168
Content-Disposition: form-data; name="OSSAccessKeyId"
access-key-id
--9431149156168
Content-Disposition: form-data; name="policy"
encoded_policy
--9431149156168
Content-Disposition: form-data; name="Signature"
signature
--9431149156168
Content-Disposition: form-data; name="file"; filename="MyFilename.jpg"
Content-Type: image/jpeg
file_content
--9431149156168
Content-Disposition: form-data; name="submit"
Upload to OSS
--9431149156168--Header permintaan
Badan pesan permintaan PostObject diencode dalam format multipart/form-data. Berbeda dengan operasi PutObject yang meneruskan parameter melalui header permintaan HTTP, operasi PostObject meneruskan parameter sebagai field formulir dalam badan pesan.
Anda tidak dapat menambahkan tag ke objek dengan menyertakan header permintaan x-oss-tagging dalam operasi PostObject. Setelah operasi PostObject selesai, Anda dapat memanggil operasi PutObjectTagging untuk menambahkan tag ke objek tersebut.
Name | Type | Required | Description |
Content-Type | String | No | Tipe file dan encoding halaman web. Hal ini menentukan cara browser membaca dan mengencode file tersebut. Formulir yang dikirimkan dalam operasi Post harus diencode dalam format Boundary adalah string acak yang dihasilkan oleh formulir. Anda tidak perlu menentukannya secara manual. Jika Anda menggunakan SDK untuk membuat formulir, SDK tersebut juga akan menghasilkan nilai acak. |
Operasi ini juga menggunakan header permintaan umum, seperti Host dan Date. Untuk informasi selengkapnya, lihat Common request headers.
Elemen formulir
Tabel berikut menjelaskan elemen formulir yang umum digunakan baik untuk signature V1 maupun V4. Untuk informasi tentang elemen formulir yang khusus untuk signature V4, lihat V4 signature form. Untuk informasi tentang elemen formulir yang khusus untuk signature V1, lihat V1 signature form.
Field file harus menjadi field formulir terakhir. Field formulir lainnya dapat disusun dalam urutan apa pun.
Kunci field formulir tidak boleh melebihi ukuran 8 KB, dan nilainya tidak boleh melebihi 2 MB.
Name | Type | Required | Description |
Cache-Control | String | No | Menentukan perilaku caching halaman web saat objek diunduh. Untuk informasi selengkapnya, lihat RFC 2616. Nilai default: none. |
Content-Disposition | String | No | Menentukan nama objek saat diunduh. Untuk informasi selengkapnya, lihat RFC 2616. Nilai default: none. |
Content-Encoding | String | No | Menentukan format encoding konten objek saat diunduh. Untuk informasi selengkapnya, lihat RFC 2616. Nilai default: none. |
Expires | String | No | Waktu kedaluwarsa. Untuk informasi selengkapnya, lihat RFC 2616. Nilai default: none. |
policy | String | Yes, conditional | Kebijakan ini menentukan validitas field formulir permintaan. Permintaan yang tidak berisi field formulir policy dianggap sebagai permintaan anonim dan hanya dapat digunakan untuk mengakses bucket public-read-write. Nilai default: none. Batasan: Field formulir policy wajib disertakan jika bucket bukan public-read-write atau jika field formulir OSSAccessKeyId atau Signature disediakan. Penting Formulir dan kebijakan harus diencode dalam UTF-8. Field formulir policy juga harus diencode dalam Base64. |
x-oss-server-side-encryption-key-id | String | No | Kunci master pelanggan (CMK) yang dikelola oleh KMS. Elemen ini hanya berlaku ketika x-oss-server-side-encryption diatur ke KMS. |
x-oss-content-type | String | No | Browser secara otomatis menambahkan Content-Type ke field formulir file. Untuk mengatasi hal ini, OSS mendukung penambahan x-oss-content-type ke badan permintaan Post. Elemen ini memungkinkan Anda menentukan Content-Type dan memiliki prioritas tertinggi. Urutan prioritas: x-oss-content-type > Content-Type field formulir file Nilai default: none. |
x-oss-forbid-overwrite | String | No | Menentukan apakah objek yang memiliki nama yang sama akan ditimpa selama operasi PostObject. Ketika bucket tujuan berada dalam status pengendalian versi aktif atau ditangguhkan, header permintaan x-oss-forbid-overwrite tidak berlaku. Artinya, objek yang memiliki nama yang sama dapat ditimpa.
Mengatur header permintaan x-oss-forbid-overwrite mengurangi performa QPS. Jika Anda memiliki banyak operasi yang memerlukan header permintaan x-oss-forbid-overwrite (QPS > 1.000), hubungi dukungan teknis untuk menghindari dampak terhadap bisnis Anda. |
x-oss-object-acl | String | No | Menentukan izin akses objek dalam field formulir file. Elemen ini dapat ditentukan dalam field formulir file. Nilai yang valid:
Untuk informasi selengkapnya tentang izin akses, lihat Object ACL. |
x-oss-storage-class | String | No | Menentukan kelas penyimpanan objek. Untuk bucket dengan kelas penyimpanan apa pun, jika Anda menentukan parameter ini saat mengunggah objek, objek yang diunggah akan disimpan dalam kelas penyimpanan yang ditentukan. Misalnya, jika Anda menentukan x-oss-storage-class sebagai Standard saat mengunggah objek ke bucket IA, objek tersebut akan disimpan sebagai objek Standard. Nilai yang valid:
Untuk informasi selengkapnya, lihat Storage classes. |
key | String | Yes | Nama objek yang akan diunggah. Jangan mengencode nama tersebut. Jika nama tersebut mencakup path, seperti Nilai default: none. |
success_action_redirect | String | No | URL tempat klien dialihkan setelah pengunggahan berhasil. Jika field formulir ini tidak ditentukan, hasil yang dikembalikan ditentukan oleh field formulir success_action_status. Jika pengunggahan gagal, OSS mengembalikan kode kesalahan dan tidak melakukan pengalihan. Nilai default: none. |
success_action_status | String | No | Ketika field formulir success_action_redirect tidak ditentukan, field formulir ini menentukan kode status yang dikembalikan ke klien setelah pengunggahan berhasil. Nilai yang valid: 200, 201, dan 204 (default).
|
x-oss-meta-* | String | No | Metadata pengguna yang ditentukan sendiri oleh pengguna. Nilai default: none. Jika permintaan mencakup field formulir yang diawali dengan x-oss-meta-, field tersebut dianggap sebagai metadata pengguna. Misalnya, Catatan Sebuah objek dapat memiliki beberapa parameter semacam ini, tetapi ukuran total semua metadata pengguna tidak boleh melebihi 8 KB. |
x-oss-security-token | String | No | Token keamanan. Parameter ini hanya diperlukan ketika Anda menggunakan Security Token Service (STS) untuk membuat URL yang ditandatangani. Anda dapat memperoleh token keamanan dengan memanggil operasi AssumeRole dari STS. Nilai default: none. |
file | String | Yes | File atau konten teks. Jangan mengencode konten tersebut. Browser secara otomatis menyetel Content-Type berdasarkan tipe file dan menimpa pengaturan Anda. OSS hanya dapat mengunggah satu file dalam satu waktu. Nilai default: none. Penting Field file harus menjadi field formulir terakhir. |
Header respons
Name | Type | Example | Description |
x-oss-server-side-encryption | String | KMS | Jika header x-oss-server-side-encryption ditentukan dalam permintaan, respons akan menyertakan header ini untuk menunjukkan algoritma enkripsi sisi server yang digunakan. |
Content-MD5 | String | 1B2M2Y8AsgTpgAmY7PhC**** | Hash MD5 dari file tersebut. Penting Hash MD5 file tersebut adalah hash MD5 yang diperoleh setelah klien menyelesaikan pengunggahan, bukan hash MD5 dari badan respons. |
x-oss-hash-crc64ecma | String | 316181249502703**** | Nilai CRC-64 dari file tersebut. |
x-oss-version-id | String | CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0**** | ID versi file tersebut. Header respons ini hanya dikembalikan ketika Anda mengunggah file ke bucket yang telah diaktifkan fitur pengendalian versi. |
Operasi ini juga mengembalikan header respons umum, seperti Date dan x-oss-request-id. Untuk informasi selengkapnya, lihat Common response headers.
Elemen respons
Name | Type | Description |
PostResponse | Container | Kontainer yang menyimpan hasil permintaan Post. Node anak: Bucket, ETag, Key, dan Location |
Bucket | String | Nama bucket. Node induk: PostResponse |
ETag | String | ETag (Entity Tag) dibuat saat setiap objek dihasilkan. Untuk objek yang dibuat melalui permintaan Post, ETag adalah nilai unik yang dihasilkan berdasarkan aturan perhitungan tertentu, tetapi bukan hash MD5 dari konten objek tersebut. ETag dapat digunakan untuk memeriksa apakah konten objek telah berubah. Node induk: PostResponse |
Location | String | URL objek yang baru dibuat. Node induk: PostResponse |
Contoh
Contoh permintaan:
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" eyJleHBpcmF0aW9uIjoiMjAxMy0xMi0wMVQxMjowMDowMFoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsIDAsIDEwNDg1NzYwXSx7ImJ1Y2tldCI6ImFoYWhhIn0sIHsiQSI6ICJhIn0seyJrZXkiOiAiQUJDIn1dfQ== --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--Contoh respons:
HTTP/1.1 200 OK x-oss-request-id: 61d2042d-1b68-6708-5906-33d81921362e Date: Fri, 24 Feb 2014 06:03:28 GMT ETag: "5B3C1A2E053D763E1B002CC607C5****" Connection: keep-alive Content-Length: 0 x-oss-hash-crc64ecma: 316181249502703**** Content-MD5: 1B2M2Y8AsgTpgAmY7PhC**** Server: AliyunOSS
SDK
Anda dapat memanggil operasi ini menggunakan kit pengembangan perangkat lunak (SDK) berikut:
Kode kesalahan
Error code | HTTP status code | Description |
FieldItemTooLong | 400 | Ukuran kunci field formulir tidak boleh melebihi 8 KB, dan ukuran nilai field formulir tidak boleh melebihi 2 MB. |
InvalidArgument | 400 | Terlepas dari apakah bucket bersifat public-read-write atau tidak, jika salah satu dari field formulir OSSAccessKeyId, policy, atau Signature diunggah, dua field formulir lainnya wajib disertakan. Jika tidak disertakan, kesalahan ini akan dikembalikan. |
InvalidDigest | 400 | Jika Anda mengunggah permintaan dengan header Content-MD5, OSS menghitung Content-MD5 dari badan dan memeriksa konsistensinya. Jika tidak konsisten, kesalahan ini akan dikembalikan. |
EntityTooLarge | 400 | Panjang total badan permintaan tidak boleh melebihi 5 GB. Jika file terlalu besar, kesalahan ini akan dikembalikan. |
InvalidEncryptionAlgorithmError | 400 | Jika Anda menentukan header permintaan x-oss-server-side-encryption selama pengunggahan, Anda harus mengatur nilainya ke AES256 atau KMS. Jika Anda mengatur ke nilai lain, kesalahan ini akan dikembalikan. |
IncorrectNumberOfFilesInPOSTRequest | 400 | Jumlah file dalam permintaan Post tidak valid. Permintaan Post hanya boleh berisi satu field formulir file. |
FileAlreadyExists | 409 | Jika header permintaan berisi x-oss-forbid-overwrite=true, objek yang memiliki nama yang sama tidak dapat ditimpa. Jika file tersebut sudah ada, kesalahan ini akan dikembalikan. |
KmsServiceNotEnabled | 403 | x-oss-server-side-encryption ditentukan sebagai KMS, tetapi Anda belum membeli paket KMS sebelumnya. |
FileImmutable | 409 | Jika Anda mencoba menghapus atau memodifikasi data dalam bucket yang dilindungi, kode kesalahan ini akan dikembalikan. |
MethodNotAllowed | 405 | Metode permintaan HTTP tidak didukung atau tidak diizinkan oleh server. Periksa metode permintaan dan header untuk memastikan informasi header benar dan layanan mendukung metode permintaan tersebut. Periksa URL untuk memastikan protokol, nama domain, dan path-nya benar. |
POST policy
Field formulir policy adalah kebijakan keamanan yang didefinisikan dalam format JSON. Field ini menentukan batasan dan kendala izin untuk mengunggah file ke OSS menggunakan formulir HTML. Kebijakan ini menggunakan beberapa parameter untuk membatasi operasi pengunggahan, seperti nama bucket, awalan objek, periode validitas, metode HTTP yang diizinkan, serta batasan ukuran dan tipe konten pengunggahan.
Untuk informasi selengkapnya tentang kebijakan untuk signature V4 dalam permintaan POST, lihat POST request V4 signature policy
Untuk informasi selengkapnya tentang kebijakan untuk signature V1 dalam permintaan POST, lihat POST request V1 signature policy.
POST signature
Signature POST menjamin keamanan permintaan pengunggahan. Saat Anda menggunakan operasi PostObject, OSS mengharuskan setiap permintaan pengunggahan menyertakan signature untuk memverifikasi legalitas dan keamanan permintaan tersebut.
Untuk informasi selengkapnya tentang signature V4 dalam permintaan POST, lihat POST request V4 signature.
Untuk informasi selengkapnya tentang signature V1 dalam permintaan POST, lihat POST request V1 signature.
FAQ
Apa yang harus saya lakukan jika muncul kesalahan "Your proposed upload exceeds the maximum allowed size"?
Penyebab: Ukuran file yang diunggah berada di luar rentang yang ditentukan oleh content-length-range.
Solusi: Gunakan content-length-range untuk menentukan ukuran minimum dan maksimum yang diizinkan untuk file yang diunggah dalam byte. Misalnya, untuk mengunggah file sebesar 1 GB, Anda dapat mengatur content-length-range ke ["content-length-range", 1, 1073741824].
Referensi
Untuk contoh cara mengunggah data langsung ke OSS dari klien web menggunakan formulir, lihat JavaScript client-side signature-based direct upload.
Untuk informasi tentang kesalahan umum yang mungkin terjadi saat Anda memanggil operasi PostObject dan solusinya, lihat Common errors of PostObject and troubleshooting.