假设您有一个 HTML 元素 代表一个让用户选择文件的按钮。单击按钮并选择文件后,其名称存储在 document.getElementById("image-file").value 中。如果服务器支持 URL“/upload/image”处的多部分 POST 请求,那么如何将文件发送到该端点?此外,如何监控上传进度?
您可以使用 fetch API 和可选的等待-try-catch 处理:
let photo = document.getElementById("image-file").files[0]; let formData = new FormData(); formData.append("photo", photo); fetch('/upload/image', {method: "POST", body: formData});
此示例还包括以 JSON 形式发送的用户数据:
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); } }
遗憾的是,使用 fetch 进行 HTML5 文件上传不支持 request.onprogress 等方法,但您可以通过监听网络事件来监控整体上传进度:
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);
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3