【问题标题】:XMLHttpRequest upload.onprogress instantly completeXMLHttpRequest upload.onprogress 即时完成
【发布时间】:2013-08-21 00:40:02
【问题描述】:

我正在尝试使用带有进度表的 HTML5 制作文件上传器。这是我的代码:

<!DOCTYPE html>
<html>
<head>
    <title>Test Progress Meter</title>
    <script type="text/javascript">

        function submitFile(){
            var blobOrFile = document.getElementById("fileInput").files[0];

            var xhr = new XMLHttpRequest();

            xhr.onload = function(e) {
                alert("finished!");
            };

            xhr.upload.onprogress = function(e) {
                if (e.lengthComputable) {
                    document.getElementById("statusBox").innerHTML = e.loaded + " / " + e.total;
                }
            };

            xhr.open('POST', 'test.php', true);

            xhr.send(blobOrFile);
        };


    </script>
</head>
<body>
    <input type="file" id="fileInput" onchange="submitFile();" />
    Status: <span id="statusBox"></span>
</body>
</html>

基本上,在我所有的浏览器上,当我选择要上传的文件时,进度事件会触发并立即显示整个传输已完成。然后它会在文件实际上传时坐在那里,根据文件,在几秒钟/几分钟后,脚本会发出警报并显示来自服务器的正确响应。

我是否遗漏了一些明显的东西?据我所知,这发生在我所有的浏览器(IE10、Chrome 28、FF22)上。

【问题讨论】:

  • 有什么解决办法吗?

标签: upload xmlhttprequest


【解决方案1】:

由于服务器或网关立即缓存请求数据,将文件数据写入磁盘或内存。此时,文件数据进度确实是100%。但是服务器的逻辑代码还没有完成对刚刚缓存在服务器中的文件数据的处理。

【讨论】:

  • 有没有办法让它工作?我有同样的问题。
【解决方案2】:

我遇到了和你一样的问题,然后我在另一台计算机上尝试了我的页面,一切正常,我确实使用 Chrome 的网络节流来模拟慢速互联网连接,但似乎与实际情况仍有一些不同

【讨论】:

    【解决方案3】:

    这是我的代码,对我来说很好用:

    xhr.upload.onprogress = function(e){
        var done = e.position || e.loaded, total = e.totalSize || e.total
        var present = Math.floor(done/total*100)
        document.getElementById('status').innerHTML = present + '%'
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2012-04-30
      • 2013-08-18
      • 2021-03-07
      • 2021-02-15
      • 1970-01-01
      相关资源
      最近更新 更多