Я получаю такой URL-адрес:
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 ожидает, что данные будут, multipart/form-data
поэтому я использую content-type
этот тип ... Но он дает мне ответ с кодом состояния 400.
Что не так с моим кодом?
источник
Недавно я работал с IPFS и решил это. Пример curl для IPFS для загрузки файла выглядит так:
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"
Основная идея заключается в том, что каждая часть (разбивка по строке в
boundary
с--
) имеет свои собственные заголовки (Content-Type
во второй части, например.)FormData
Объект управляет всем этим для вас, так что это лучший способ для достижения наших целей.Это переводится как получение API следующим образом:
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) })
источник
FormData
примере вам это не нужно, потому что браузер отправляет этот заголовок за вас, а также управляет всеми границами mime, что и является целью этого решения.