Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的文件切片会导致空blob_Javascript_Html_Chunking - Fatal编程技术网

JavaScript中的文件切片会导致空blob

JavaScript中的文件切片会导致空blob,javascript,html,chunking,Javascript,Html,Chunking,我正在实现一个基于浏览器的分块文件上传程序。要打开我正在使用的文件和这段代码(简化): 我将文件分割成块,但没有将块读入内存(不是显式地) 问题:偶尔(对于不到0.1%的上载文件),从基础文件切片的区块为空。例如,在上传大文件时,事情进展顺利,然后在文件的中间调用: var _blob = _file.slice(chunk.start, chunk.end, _file.type); 结果为空切片(\u blob.size为0)。将此类blob发送到服务器(.NET 4.6)会导致Reque

我正在实现一个基于浏览器的分块文件上传程序。要打开我正在使用的文件
和这段代码(简化):

我将文件分割成块,但没有将块读入内存(不是显式地)

问题:偶尔(对于不到0.1%的上载文件),从基础文件切片的区块为空。例如,在上传大文件时,事情进展顺利,然后在文件的中间调用:

var _blob = _file.slice(chunk.start, chunk.end, _file.type);
结果为空切片(
\u blob.size
为0)。将此类blob发送到服务器(.NET 4.6)会导致
Request.InputStream
为空。我正在发送B国家数据:

_xhr.setRequestHeader('content-type', 'application/octet-stream');
_xhr.send(_blob);
我还应该提到,调用
\u file.slice
会再次生成相同的空blob。我可以在Chrome57、Chrome60(Win和Mac)、MacSafari10.1.1和Edge 15中观察到这一点。也可以使用其他浏览器

有什么不对劲?我正在考虑的事情:

  • 文件正在使用中
  • 文件/磁盘已损坏
  • 同时,blob由JavaScript引擎进行GCed—如果可能的话,如何确保它不是GCed
  • 浏览器错误(我发现了这个,但不确定是否相关:)

答案很简单:上传的文件不存在(重命名、删除)时会发生这种情况。

这让我们对文件和Blob检查有了更深入的了解。您可以分享如何计算块的开始和结束吗。你试过Firefox/Edge吗?@K3N是的,在很多浏览器和操作系统中都试过,99.9%的情况下都有效。开始和结束的计算方式与此类似:var Start=N*\u chunkSize;var end=Math.min(开始+\u chunkSize,\u file.size);其中N是当前区块编号(基于0)。为什么以及如何使用FileReader?@K3N我使用的是自定义版本的plupload3。以下是区块计数计算:。除了FileUploader.js:之外,整个过程还涉及到更多的文件,可能还有更多的文件。我严重怀疑这些计算是否是问题所在,因为这个过程通常是有效的。我同意存在一些可变范围的问题。虽然这个问题在某种程度上帮助了我,但对我来说,真正的解决方法是,无论如何+1
_xhr.setRequestHeader('content-type', 'application/octet-stream');
_xhr.send(_blob);