Ich rufe eine URL wie folgt ab:
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)
})
Meine API erwartet, dass die Daten von diesem Typ sind, multipart/form-data
also verwende ich content-type
diesen Typ ... Aber es gibt mir eine Antwort mit dem Statuscode 400.
Was ist los mit meinem Code?
quelle
Ich habe kürzlich mit IPFS gearbeitet und das herausgefunden. Ein Curl-Beispiel für das Hochladen einer Datei durch IPFS sieht folgendermaßen aus:
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"
Die Grundidee ist, dass jeder Teil (aufgeteilt durch Zeichenfolge in
boundary
mit--
) seine eigenen Überschriften hat (Content-Type
zum Beispiel im zweiten Teil). DasFormData
Objekt verwaltet dies alles für Sie, sodass es eine bessere Möglichkeit ist, unsere Ziele zu erreichen.Dies bedeutet, dass die API wie folgt abgerufen wird:
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) })
quelle
FormData
Beispiel brauchen Sie es nicht, weil der Browser diesen Header für Sie sendet und auch alle MIME-Grenzen verwaltet, worum es bei dieser Lösung geht.