2

我正在编写一个上传脚本,它将获取一个文件,对其进行处理,然后将其返回给用户。处理可能需要几分钟。我目前正在为用户提供反馈的操作是在实际上传期间显示上传栏,并在上传完成后将其替换为“处理”消息。文件完成处理后,该消息将替换为指向新文件的链接。这在 chrome 中运行良好,但在 Firefox 中,我只能将进度条调到 99.9%。有没有办法在关闭连接之前检查上传是否完成?

这是我目前拥有的

    outter = $(".item_box")[0];//content wrapper
    inner = outter.children[0];//content viewer, will be replaced with messages and content

    var p = document.createElement("progress");
    p.className = "uploadprogress";
    p.value = "0";
    p.max = "100";
    inner.textContent = "";
    inner.appendChild(p);//replace initial "click here" message with progress bar

    var formData new FormData();
    for (var i = 0; i < files.length; i++)//files is defined elsewhere and contains form data
    {
        formData.append('userfile', files[i]);
    }

    // now post a new XHR request
    var xhr = new XMLHttpRequest();
    xhr.open('POST', base_url+'upload/upload_media');//url of php script
    xhr.responseType = "json";
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4)//ajax request complete
        {
            p.value = p.innerHTML = 100;//set progress bar to 100%
            var data = JSON.parse(xhr.responseText);//my returned json object
            outter.removeChild(inner);
            var v = document.createElement("video");
            v.controls = "controls";
            v.innerHtml = data.msg;
            outter.appendChild(v);
        }
    }
    xhr.upload.onprogress = function (e)//handles progress bar value
    {
        if (e.lengthComputable)
        {
            var done = e.position || e.loaded, total = e.totalSize || e.total;
            p.value = p.innerHTML = (Math.floor(done/total*1000)/10);
            if (done == 100)//this never happens in firefox
            {
                inner.removeChild(p);
                inner.textContent = "processing... please wait";
            }
        }
    }
    xhr.send(formData);
4

2 回答 2

0

呃... Firefox 仍然没有修复这个错误。我在 FF 版本 28 中遇到同样的问题。像 OP 一样,我无法将代码从“onprogress”处理程序移动到“onload”处理程序,因为在脚本完成处理之前“onload”不会触发上传的文件 - 这可能比文件完成上传的时间晚得多。上传的文件越小,FF 越早停止报告进度(例如:280K 文件可能会停止报告 84%,而 5 MB 文件可能会一直报告到 99% - 但永远不会 100%)。由于 OP 正在处理始终如一的大文件,他可以将他的条件设置为“(完成 == 99)”或一些类似的阈值。不幸的是,那不会 不适用于我或其他任何处理各种文件大小的人。来吧,火狐!

于 2014-04-25T09:29:13.070 回答
0

这是 Firefox 中的一个奇怪问题,我也遇到过。我通过将要在 100% 进度上执行的代码从onprogress事件移动到xhr.readyState. 我从onprogress事件中删除了它,因为如果我将它放在两个地方,我的代码会产生问题。

于 2013-10-26T15:24:22.783 回答