Estou buscando um URL como este:
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)
})
Minha API espera que os dados sejam de, multipart/form-data
então estou usando content-type
esse tipo ... Mas está me dando uma resposta com o código de status 400.
O que há de errado com meu código?
fonte
Recentemente, trabalhei com o IPFS e resolvi isso. Um exemplo curl de IPFS para fazer upload de um arquivo tem a seguinte aparência:
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"
A ideia básica é que cada parte (dividida por string
boundary
com--
) tenha seus próprios cabeçalhos (Content-Type
na segunda parte, por exemplo). OFormData
objeto gerencia tudo isso para você, então é a melhor maneira de atingir nossos objetivos.Isso se traduz em buscar API assim:
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) })
fonte
FormData
exemplo, você não precisa disso, porque o navegador envia esse cabeçalho para você e também gerencia todos os limites do mime, que é o ponto desta solução.