我正在使用jquery-filedrop和python / flask将文件上传到我服务器上的uploads文件夹。
但是每当我选择一个大文件(~80MB +)时,浏览器标签(chrome)会立即崩溃。
查看the code,从自述文件中可以看出,它似乎使用HTML5 FileReader()来处理文件上传。
如果我通过更改these lines
来获取文件的一小部分reader.onloadend = !opts.beforeSend ? send : function (e) {
opts.beforeSend(files[fileIndex], fileIndex, function () { send(e); });
};
reader.readAsDataURL(files[fileIndex]);
到
reader.onloadend = !opts.beforeSend ? send : function (e) {
opts.beforeSend(files[fileIndex].slice(0, 1048576), fileIndex, function () { send(e); });
};
reader.readAsDataURL(files[fileIndex].slice(0, 1048576));
然后我可以通过从每个文件上传1MB来让它运行而没有错误,因此我猜测在读入完整文件时这是一个内存问题。
我怎样才能将其设置为遍历文件的小块并单独上传?或者,有没有更好的解决方法?
答案 0 :(得分:1)
是的,如果您运行带有重物的循环,Chrome会崩溃。您可以做的最好的事情是使用Webworkers来处理文件,然后阅读chucks。
资源
答案 1 :(得分:0)
如果使用HTML5 FileReader(),则file
选项可以使用slice
方法。
var blob = file.slice(startingByte, endindByte);
reader.readAsBinaryString(blob);
有关详细信息:http://www.html5rocks.com/en/tutorials/file/dndfiles/