Saya mengambil URL seperti ini:
fetch(url, {
mode: 'no-cors',
method: method || null,
headers: {
'Accept': 'application/json, application/xml, text/plain, text/html, *.*',
'Content-Type': 'multipart/form-data'
},
body: JSON.stringify(data) || null,
}).then(function(response) {
console.log(response.status)
console.log("response");
console.log(response)
})
API saya mengharapkan datanya multipart/form-data
jadi saya menggunakan content-type
jenis ini ... Tapi itu memberi saya respons dengan kode status 400.
Apa yang salah dengan kode saya?
sumber
Saya baru-baru ini bekerja dengan IPFS dan menyelesaikannya. Contoh curl untuk IPFS untuk mengupload file terlihat seperti ini:
curl -i -H "Content-Type: multipart/form-data; boundary=CUSTOM" -d $'--CUSTOM\r\nContent-Type: multipart/octet-stream\r\nContent-Disposition: file; filename="test"\r\n\r\nHello World!\n--CUSTOM--' "http://localhost:5001/api/v0/add"
Ide dasarnya adalah bahwa setiap bagian (dipisahkan dengan string
boundary
dengan--
) memiliki headernya sendiri (Content-Type
di bagian kedua, misalnya.)FormData
Objek mengatur semua ini untuk Anda, jadi ini cara yang lebih baik untuk mencapai tujuan kita.Ini diterjemahkan untuk mengambil API seperti ini:
const formData = new FormData() formData.append('blob', new Blob(['Hello World!\n']), 'test') fetch('http://localhost:5001/api/v0/add', { method: 'POST', body: formData }) .then(r => r.json()) .then(data => { console.log(data) })
sumber
FormData
contoh, Anda tidak membutuhkannya, karena browser mengirimkan header itu untuk Anda & juga mengelola semua batas mime, yang merupakan inti dari solusi ini.