XMLHttpRequest事件onProgress仅在文件完成上载时被触发
我有以下AJAX代码,脚本将文件正确地上传到服务器(节点快递)。 我面临的问题是,只有当总字节被下载(所以在file upload结束时),而不是在进程中,onProgress才被触发。
目前我无法在客户端显示file upload进度的一些界面。
我想知道这个问题是否与AJAX调用有关或可能与服务器有关。
var formData = new FormData(); var xhr = new XMLHttpRequest(); var onProgress = function (e) { if (e.lengthComputable) { var percentComplete = (e.loaded / e.total) * 100; console.log(percentComplete); } }; var onLoad = function (event) { var reponse = JSON.parse(xhr.responseText); this._logicAddWdg(reponse); }.bind(this); var onError = function (err) { console.log(onError); }; formData.append('file', this._uploaderFile); xhr.addEventListener('error', onError, false); xhr.addEventListener('progress', onProgress, false); xhr.addEventListener('load', onLoad, false); xhr.open('post', '/uploads', true); xhr.send(formData);
服务器头响应:
Accept-Ranges:bytes Cache-Control:public, max-age=0 Connection:keep-alive Content-Length:5510872 Content-Range:bytes 0-5510871/5510872 Content-Type:video/mp4 Date:Tue, 11 Apr 2017 12:02:20 GMT ETag:W/"5416d8-15b5ce4a545" Last-Modified:Tue, 11 Apr 2017 12:02:20 GMT X-Powered-By:Express Request Headers view source Accept:*/* Accept-Encoding:identity;q=1, *;q=0 Accept-Language:en-US,en;q=0.8 Cache-Control:no-cache Connection:keep-alive Host:localhost:8080 Pragma:no-cache Range:bytes=0-
将您的上传事件处理程序附加到XMLHttpRequest.upload
。
xhr.upload.addEventListener('progress', onProgress, false);
xhr.upload
处理上传数据的事件。 在处理响应下载的过程之前,你有什么。
所有其他的处理程序应该保持不变。
你在网上还是在你的机器上testing它? 如果您在本地testing此代码,并且您正在上传一个相当小的文件(似乎您正在上传大约5MB的video文件),则无法看到任何进度,因为上传所需的时间与简单复制/粘贴操作在您的系统上完成。
尝试上传更大的文件或尝试在线,您的代码似乎是正确的。