我正在尝试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
但它不适用于更大的索引!
答案 0 :(得分:2)
FileReader interface是W3C 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方法实现。