仅当文件上传完成后才会触发XMLHttpRequest事件onProgress

时间:2017-04-11 11:58:22

标签: javascript jquery node.js ajax xmlhttprequest

我有以下AJAX代码,脚本正确地将文件上传到服务器(node express)。 我面临的问题是onProgress仅在下载总字节时(因此在文件上载结束时)而不是在其进度期间被触发。

目前,我无法在客户端显示一些用于文件上传进度的UI。

我想知道这个问题是否与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-

2 个答案:

答案 0 :(得分:4)

将您的上传事件处理程序附加到XMLHttpRequest.upload

xhr.upload.addEventListener('progress', onProgress, false);

xhr.upload处理上传数据的事件。您在处理响应下载进度之前所拥有的 所有其他处理程序应保持不变。

答案 1 :(得分:1)

您是在线还是在机器上进行测试? 如果你在本地测试这个代码并且你正在上传一个相当小的文件(看起来你正在上传一个~5MB的视频文件),你看不到任何进展,因为上传它所花费的时间与一个简单的成比例在您的系统上完成复制/粘贴操作。

尝试上传更大的文件或在线试用,您的代码似乎是正确的。

相关问题