„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie sende ich eine Datei an einen Server und überwache ihren Upload-Fortschritt mithilfe von JavaScript?

Wie sende ich eine Datei an einen Server und überwache ihren Upload-Fortschritt mithilfe von JavaScript?

Veröffentlicht am 12.11.2024
Durchsuche:162

How to send a file to a server and monitor its upload progress using JavaScript?

Dateien in JavaScript senden

Angenommen, Sie haben ein HTML-Element , das eine Schaltfläche darstellt, mit der Benutzer eine Datei auswählen können. Wenn Sie auf die Schaltfläche klicken und eine Datei auswählen, wird ihr Name in document.getElementById("image-file").value gespeichert. Wenn der Server mehrteilige POST-Anfragen unter der URL „/upload/image“ unterstützt, wie senden Sie die Datei an diesen Endpunkt? Wie überwachen Sie außerdem den Fortschritt des Uploads?

Reines JavaScript mit Fetch

Sie können die Fetch-API mit optionaler Wait-Try-Catch-Behandlung verwenden:

let photo = document.getElementById("image-file").files[0];
let formData = new FormData();

formData.append("photo", photo);
fetch('/upload/image', {method: "POST", body: formData});

Beispiel mit Async-Try-Catch

Dieses Beispiel enthält auch als JSON gesendete Benutzerdaten :

async function SavePhoto(inp) {
  let user = { name: 'john', age: 34 };
  let formData = new FormData();
  let photo = inp.files[0];

  formData.append("photo", photo);
  formData.append("user", JSON.stringify(user));

  const ctrl = new AbortController(); // for timeout
  setTimeout(() => ctrl.abort(), 5000);

  try {
    let r = await fetch('/upload/image', {
      method: "POST",
      body: formData,
      signal: ctrl.signal,
    });
    console.log('HTTP response code:', r.status);
  } catch (e) {
    console.log('Huston we have problem...:', e);
  }
}

Upload-Fortschritt überwachen

Leider werden Methoden wie request.onprogress beim Hochladen von HTML5-Dateien mit fetch nicht unterstützt, aber Sie können den gesamten Upload-Fortschritt überwachen, indem Sie Netzwerkereignisse überwachen:

let xhr = new XMLHttpRequest();

xhr.upload.addEventListener('progress', function(e) {
  if (e.lengthComputable) {
    let percentComplete = (e.loaded / e.total) * 100;
    console.log('Upload progress:', percentComplete   '%');
  }
});

xhr.open('POST', '/upload/image');
xhr.send(formData);
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3