Estoy obteniendo una URL como esta:
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)
})
Mi API espera que los datos sean de, multipart/form-data
por lo que estoy usando content-type
este tipo ... Pero me está dando una respuesta con el código de estado 400.
¿Qué pasa con mi código?
fuente
Recientemente estuve trabajando con IPFS y resolví esto. Un ejemplo de curl para que IPFS cargue un archivo se ve así:
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"
La idea básica es que cada parte (dividida por cadena
boundary
con--
) tiene sus propios encabezados (Content-Type
en la segunda parte, por ejemplo). ElFormData
objeto gestiona todo esto por ti, por lo que es una mejor manera de lograr nuestros objetivos.Esto se traduce en buscar API como esta:
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) })
fuente
FormData
ejemplo, no lo necesita, porque el navegador envía ese encabezado por usted y también administra todos los límites de mímica, que es el objetivo de esta solución.