Blob的切片方法在Chrome中运行不正确

时间:2011-07-07 02:42:31

标签: javascript

我正在尝试slice一个大文件,如下所示:

function alertChunk(file) {
    var reader = new FileReader();

    reader.onloadend = function(e) {
        if (e.target.readyState == FileReader.DONE) {
            alert(e.target.result);
        }
    };

    if (file.slice) {
        var blob = file.slice(1000, 1000);
    } else if (file.mozSlice) {
        var blob = file.mozSlice(1000, 1000);
    } else if (file.webkitSlice) {
        var blob = file.webkitSlice(1000, 1000);
    }

    reader.readAsBinaryString(blob);
}

HTML如下:

<input type="file" onchange="alertChunk(this.files[0])" />

但我确实在Chrome中获得了空洞的结果,尽管它在Firefox中运行良好。有人知道为什么它可以是空的吗?有什么问题?

注意:当我执行以下操作时,它似乎在Chrome中运行良好:

var blob = file.webkitSlice(10, 1000); // changed the start index

但它不适用于更大的索引!

1 个答案:

答案 0 :(得分:2)

FileReader interfaceW3C File API的一部分,它仍然只是一个工作草案,因此您可以预期它会在浏览器中实现不一致。

ECMA-262将slice指定为 String.prototype.slice(start,end)其中 start end 引用字符串中的字符串。我希望如果start == end那么什么都不会被切片。

W3C File API工作草案指定 File.slice(start, length[, contentType]) ,其中 start length 是字节偏移。可选的 contentType 参数可能允许将内容设置为ASCII文本或类似内容。

因此,Chrome的 File.slice 似乎可以按照ECMA-262 String方法而不是W3C File API方法实现。