HTML5 Rocks有一些关于文件上传的好例子,但有些东西对我来说还不够清楚。
据我所知,关于文件切片的示例代码是从文件中获取特定部分然后读取它。正如注释所说,这在我们处理大文件时很有帮助。
关于监控上传的示例还指出,这在我们上传大文件时很有用。
不切片文件我安全吗?我的意思是服务器端问题、内存等。Chrome 目前不支持File.slice()
,如果可能的话,我不想使用臃肿的 jQuery 插件。
HTML5 Rocks有一些关于文件上传的好例子,但有些东西对我来说还不够清楚。
据我所知,关于文件切片的示例代码是从文件中获取特定部分然后读取它。正如注释所说,这在我们处理大文件时很有帮助。
关于监控上传的示例还指出,这在我们上传大文件时很有用。
不切片文件我安全吗?我的意思是服务器端问题、内存等。Chrome 目前不支持File.slice()
,如果可能的话,我不想使用臃肿的 jQuery 插件。
Chrome 和 FF 都支持File.slice()
,但它的前缀是前一段时间其语义发生变化File.webkitSlice()
File.mozSlice()
时的前缀。这里还有另一个使用它来读取 .zip 文件的示例。新的语义是:
Blob.webkitSlice(
in long long start,
in long long end,
in DOMString contentType
);
不切片你安全吗?当然可以,但请记住您正在将文件读入内存。HTML5Rocks 教程提供分块上传作为潜在的性能改进。通过一些不错的服务器逻辑,您还可以更轻松地从失败的上传中恢复。如果 99% 失败,用户不必重新尝试整个 500MB 文件:)
这是对文件进行切片以作为 blob 传递的方法:
function readBlob() {
var files = document.getElementById('files').files;
var file = files[0];
var ONEMEGABYTE = 1048576;
var start = 0;
var stop = ONEMEGABYTE;
var remainder = file.size % ONEMEGABYTE;
var blkcount = Math.floor(file.size / ONEMEGABYTE);
if (remainder != 0) blkcount = blkcount + 1;
for (var i = 0; i < blkcount; i++) {
var reader = new FileReader();
if (i == (blkcount - 1) && remainder != 0) {
stop = start + remainder;
}
if (i == blkcount) {
stop = start;
}
//Slicing the file
var blob = file.webkitSlice(start, stop);
reader.readAsBinaryString(blob);
start = stop;
stop = stop + ONEMEGABYTE;
} //End of loop
} //End of readblob