在HTML5 Rocks上有一些关于文件上传的很好的例子,但对我来说有一些不够清楚。
据我所知,关于file slicing的示例代码是从文件中获取特定部分,然后读取它。正如注释所说,当我们处理大文件时,这是很有帮助的。
关于monitoring uploads的例子还指出,当我们上传大文件时,这是很有用的。
如果不对文件进行切片,我是否安全?我指的是服务器端的问题,内存等。Chrome目前不支持File.slice(),如果可能的话,我不想使用臃肿的jQuery插件。
发布于 2011-10-12 00:23:57
Chrome和FF都支持File.slice(),但前段时间当它为its semantics changed时,它被前缀为File.webkitSlice() File.mozSlice()。还有另一个使用它here读取.zip文件的部分内容的示例。新的语义是:
Blob.webkitSlice(
in long long start,
in long long end,
in DOMString contentType
); 不切开它你安全吗?当然可以,但请记住,您正在将文件读取到内存中。HTML5Rocks教程提供了将上传分块作为潜在的性能改进。有了一些像样的服务器逻辑,你也可以更容易地从失败的上传中恢复。如果99%失败,则用户不必重试整个500MB文件:)
发布于 2012-05-29 18:15:34
这是将文件切片为blobs的方法:
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 readblobhttps://stackoverflow.com/questions/7594760
复制相似问题