So verwenden Sie die Fetch-API, um Zeichenfolgendaten als JSON-Datei auf einen Formulardatenendpunkt hochzuladen, den Sie auf eine lokale Datei verweisen möchten
<p>Ich möchte eine gehostete JSON-Datei mithilfe einer API auf einem CDN eines Drittanbieters aktualisieren. In ihrer Dokumentation stellen sie ein Beispiel bereit, bei dem cURL verwendet wird, um dies zu erreichen. Eine korrekte cURL-Anfrage sollte wie folgt aussehen: </p>
<pre class="brush:php;toolbar:false;">curl -X PUT 'https://endpoint.url.here'
-H 'x-auth-token: <token>'
-F 'file=@"Pfad/zu/Ihrer/Datei"'</pre>
<p>Im Moment erstelle ich eine React-Seite, auf der Sie JSON-Text in ein Textfeld eingeben und sobald eine Schaltfläche gedrückt wird, möchte ich simulieren, dass es einen Pfad zur JSON-Datei gibt, damit sie in diese Anfrage eingefügt werden kann. </p>
<p>Ich habe grundsätzlich zwei Fragen:</p>
<ol>
<li><p>Ich darf die Fetch-API nicht verwenden. Wie kann ich eine Fetch-Anfrage erstellen, um die Beispiel-cURL-Anfrage korrekt wiederzugeben? </p>
</li>
<li><p>Wie konvertiere ich eine Zeichenfolge in einem Textfeld in einen Dateipfad (der vorzugsweise mit einem Dateinamen endet), damit der Endpunkt ihn akzeptiert? </p>
</li>
</ol>
<p>Ich habe versucht, die Dateidaten in einen Blob zu konvertieren und die Objekt-URL wie folgt als Pfad zu verwenden: </p>
<pre class="brush:php;toolbar:false;">const file = new Blob([jsonText], {type: 'text/plain'});
var blobURL = URL.createObjectURL(file);</pre>
<p>Ich habe auch versucht, FormData zum Einrichten meiner Anfrage zu verwenden: </p>
<pre class="brush:php;toolbar:false;">let formData = new FormData();
formData.append('file', blobURL);
let headers = {
'x-auth-token': '<token>',
'Content-Type': 'multipart/form-data'
}
let payload = {
Methode: 'PUT',
Überschriften: Überschriften,
Körper: formData
}
fetch('https://endpoint.url.here', Nutzlast) ...</pre>
<p>Wenn ich das versuche, antwortet das Backend nur mit einigen Fehlern wie „Datei nicht bereitgestellt“ und ich vermute, dass meine Anfrage nicht den Anforderungen entspricht. Gibt es einen besseren Weg, dies zu erreichen? Haben Sie Vorschläge, wie ich versuchen könnte, ihre Musteranfrage besser zu erfüllen? </p>