7

HTML5 Rocks有一些关于文件上传的好例子,但有些东西对我来说还不够清楚。

据我所知,关于文件切片的示例代码是从文件中获取特定部分然后读取它。正如注释所说,这在我们处理大文件时很有帮助。

关于监控上传的示例还指出,这在我们上传大文件时很有用。

不切片文件我安全吗?我的意思是服务器端问题、内存等。Chrome 目前不支持File.slice(),如果可能的话,我不想使用臃肿的 jQuery 插件。

4

2 回答 2

6

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 文件:)

于 2011-10-11T16:23:56.740 回答
0

这是对文件进行切片以作为 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
于 2012-05-29T10:15:33.870 回答