File Upload mit Fetch API

  • Hallo.

    Ich versuche gerade ein Bild auf einen server zu senden. Jedoch funktioniert das noch nicht so genau

    Hier ist mein code:

    Bei dem unteren Quellcode kriege ich immer diese Fehlermeldung angezeigt. Laut Google ist es ein Content-Type Fehler, jedoch dachte ich das Fetch es automatisch setzt.

    Code
    1. .then(json => console.log(json)) //SyntaxError: Unexpected token < in JSON at position 0 javascript


    Hat jemand eine Idee??

  • Dass Du in den then-Fall statt catch herein kommst ist schon mal ein gutes Zeichen, dann dürfte das Hochladen erfolgreich gewesen sein.

    Dein Skript erwartet eine Antwort vom Server im JSON-Format, da Du sie hier entspr. dekodierst:

    .then(res => res.json())

    Vermutlich ist die Antwort etwas anderes, z. B. HTML. Du kannst dir die Antwort ansehen, indem Du statt dessen den Textmodus verwendest:

    Code
    1. // send `POST` request
    2. fetch('/upload', { //Verzeichnis wo das bild gespeichert werden soll
    3. method: 'POST',
    4. body: fd
    5. })
    6. .then(res => res.text())
    7. .then(txt => console.log(txt))
    8. .catch(err => console.error(err));
    9. }
  • Dass Du in den then-Fall statt catch herein kommst ist schon mal ein gutes Zeichen, dann dürfte das Hochladen erfolgreich gewesen sein.

    Dein Skript erwartet eine Antwort vom Server im JSON-Format, da Du sie hier entspr. dekodierst:

    .then(res => res.json())

    Vermutlich ist die Antwort etwas anderes, z. B. HTML. Du kannst dir die Antwort ansehen, indem Du statt dessen den Textmodus verwendest:

    Code
    1. // send `POST` request
    2. fetch('/upload', { //Verzeichnis wo das bild gespeichert werden soll
    3. method: 'POST',
    4. body: fd
    5. })
    6. .then(res => res.text())
    7. .then(txt => console.log(txt))
    8. .catch(err => console.error(err));
    9. }

    Vielen Dank.

    Ich werde es mal versuchen.

    Ich habe nämlich auch eine serverseitige Lösung mit express. Es funktioniert so auch nicht. Ich weiß nicht wo da mein fehler ist

    Ich habe es nach diesem Tutorial versucht: https://attacomsian.com/blog/u…ng-files-using-fetch-api#

  • Dass Du in den then-Fall statt catch herein kommst ist schon mal ein gutes Zeichen, dann dürfte das Hochladen erfolgreich gewesen sein.

    Dein Skript erwartet eine Antwort vom Server im JSON-Format, da Du sie hier entspr. dekodierst:

    .then(res => res.json())

    Vermutlich ist die Antwort etwas anderes, z. B. HTML. Du kannst dir die Antwort ansehen, indem Du statt dessen den Textmodus verwendest:

    Wo kann ich denn die txt im inspector einsehen?

  • Das sieht mir nicht nach Text aus. Hast Du das Javascript genau so geändert wie in #3?

    Und hattest Du auch eine Datei ausgewählt?

    ja genau. so sieht es momentan aus. sobald ich das bild auswähle, sollte es im /upload gespeichert werden. tut es leider nicht

  • Du hattest da vergessen, etwas zu ändern:

    Code
    1. // send `POST` request
    2. fetch('/upload', {
    3. method: 'POST',
    4. body: fd
    5. })
    6. .then(res => res.text()) // <-- hier
    7. .then(txt => console.log(txt))
    8. .catch(err => console.error(err));
    9. }

    Allerdings ist das, was man in #6 sieht, ganz offensichtlich die dekodierte Antwort vom Server. D. h. Du kannst es beim JSON belassen, so wie in deinem ersten Posting. Das mit dem Upload werde ich mal untersuchen, ich müsste da noch eine Testdatei haben ...

  • Sieh dir mal dies an:

    Code
    1. // add file to FormData object
    2. const fd = new FormData();
    3. fd.append('input', file);

    In deinem serverseitigen Skript taucht die hochgeladene Datei als $_POST['input'] auf. Überprüfe das bzw. poste das serverseitige Skript.

    so sieht es aus momentan.


  • ja es ist nodejs.

    ehrlich gesagt, weiß ich nicht inwiefern sich das ganze unterscheidet.

    Ich würde gerne im cientseitigen mit fetch die bilder im /upload speichern. das wars auch schon.


    nur habe ich im internet schon so viele beiträge gelesen, dass ich nur noch durcheinander bin.

    es gibt varianten mit multer, formidable usw.

  • node.js ist serverseitig. Und um die Bilder hochladen und speichern zu können, brauchst Du ein serverseitiges Skript. Wenn Du bei node.js bleiben möchtest, musst Du warten bis sich jemand meldet, der sich damit auskennt. Alternativ ein PHP-Skript verwenden, um die Datei zu speichern, das wären nur wenige Zeilen und ich könnte dir ein Beispiel geben.

  • node.js ist serverseitig. Und um die Bilder hochladen und speichern zu können, brauchst Du ein serverseitiges Skript. Wenn Du bei node.js bleiben möchtest, musst Du warten bis sich jemand meldet, der sich damit auskennt. Alternativ ein PHP-Skript verwenden, um die Datei zu speichern, das wären nur wenige Zeilen und ich könnte dir ein Beispiel geben.

    php ist leider nicht erlaubt. wäre sonst auch damit weitergekommen, da so viele beispiele existieren.

    leider muss ich das speichern entweder mit node oder als normales html code hinbekommen. node war auch eine gute alternative, nur leider werde ich beim POST immer redirected. da finde ich auch keine lösung....


    ich habe jetzt mal die zeile mit

    Code
    1. const fd= new FormData();
    2. fd.append(file, file);
    3. fetch('/upload', {
    4. method: 'POST',
    5. body: fd
    6. })

    geändert.

    Als meldung kam das zurück. bei fetch('/upload...) gibt es ein problem

    pasted-from-clipboard.png

    bei

  • Und du startest mit?


    Code
    1. node index.js

    Wie sieht denn die index.js aus? Du musst ja alle Routes in dieser Datei haben.

    ja richtig. so startet alles.


    app.post habe ich mal rausgenommen

  • Und du startest mit?


    Code
    1. node index.js

    Wie sieht denn die index.js aus? Du musst ja alle Routes in dieser Datei haben.

    das ist die post funktion in node

  • Ich bin jetzt auch nicht der ultimative node-Spezialist, verwende es ab und zu für einzelne Applikationen.


    Was ich jetzt tun würde:

    - Die index.js gehört auf die höchste Ebene

    - Ich würde mal den Fileupload-Code rausnehmen und versuchen eine post-route einzurichten, welche ich mit einem "normalen" formular nutze um zu sehen ob das funtkioniert.


    Irgendwelche Sachen reinzuhausen funktioniert halt selten, probier Dir das logisch aufzubauen und Schritt für Schritt zu gehen. Und halt mal etwas nachlesen wie man node-Applikationen gut debuggt.