使用Javascript上传进度(使用或不使用XMLHttpRequest 2)

时间:2010-12-10 17:26:18

标签: javascript ajax file upload progress

XMLHttpRequest 2有一件新事物。它可以上传文件。我有那个工作(这很容易)。现在我想知道是否有办法获得该文件的上传进度。我通常不会对此感兴趣,但在Google Chrome(8)中,我看到onreadystatechange事件是XMLHttpRequestProgressEvent。进展......关于上传进度(只是请求状态)没有任何内容,但它让我感到疑惑。

Google Chrome在本地上传大文件时有一个进度'计数器'。这是标准的。它始终存在且不可配置。它在状态栏中。用Javascript可以做到这一点吗?我想把它放在一个很好的<progress>元素中。

我不想要SWF或Java上传器(使用轮询和&gt; JS回调)。它必须是原生的。如果浏览器可以做到这一点,这些天Javascript应该能够做到,对吧!? =)

如果没有XMLHttpRequest 2,我认为使用非常标准的文件上传是不可能的(没有ajax,只有<input type=file>)。

感谢您的信息

1 个答案:

答案 0 :(得分:9)

勾选进度事件。这将为您提供所有请求的进度。首先检查上传对象是否可用 - 这将只为您提供上传部分的进度。

这样的事情:

var xhr; // this is your XMLHttpRequest

// hook to upload events if available, otherwise snag all progress events
var eventSource = xhr.upload || xhr;

eventSource.addEventListener("progress", function(e) {
    // normalize position attributes across XMLHttpRequest versions and browsers
    var position = e.position || e.loaded;
    var total = e.totalSize || e.total;

    // TODO: display progress
});