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?
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});
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); } }
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);
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