【问题标题】:File slicing in JavaScript results in empty blobJavaScript 中的文件切片导致空 blob
【发布时间】:2018-02-13 19:04:06
【问题描述】:

我正在实现一个基于浏览器的分块文件上传器。要打开我正在使用的文件<input type="file" id="fileSelector" /> 和这段代码(简化):

$('#fileSelector').on('change', function () {
    _file = evt.target.files[0];
});

我将文件切成块,但没有将块读入内存(未明确)。

问题:偶尔(对于不到 0.1% 的上传文件)从基础文件中分割出来的块是空的。例如。在上传大文件期间一切顺利,然后在该文件调用的中间:

var _blob = _file.slice(chunk.start, chunk.end, _file.type);

产生一个空切片(_blob.size 为 0)。将此类 blob 发送到服务器 (.NET 4.6) 会导致 Request.InputStream 为空。我正在发送二进制数据:

_xhr.setRequestHeader('content-type', 'application/octet-stream');
_xhr.send(_blob);

我还应该提到,再次调用 _file.slice 会产生相同的空 blob。我可以在 Chrome 57、Chrome 60(Win 和 Mac)、Mac Safari 10.1.1 和 Edge 15 中观察到这一点。其他浏览器也可以。

有什么问题吗?我正在考虑的事情:

【问题讨论】:

  • stackoverflow.com/a/24834417/1606432 这可以进一步了解文件和 Blob 检查
  • 你能分享你如何计算块开始和结束。你试过 Firefox/Edge 吗?
  • @K3N 是的,在很多浏览器和操作系统中尝试过,这在 99.9% 的时间里都有效。开始和结束的计算方式更不像这样: var start = N * _chunkSize; var end = Math.min(start + _chunkSize, _file.size);其中 N 是当前块编号(从 0 开始)。
  • 为什么以及如何使用 FileReader ?
  • @K3N 我正在使用 plupload3 的定制版本。这是块计数计算:github.com/andy250/plupload/blob/3.x/src/FileUploader.js#L84。除了 FileUploader.js:github.com/andy250/plupload/blob/3.x/src/core/Queue.js 之外,整个过程还分布在更多文件中,可能还有更多。我严重怀疑这些计算是否存在问题,因为该过程通常有效。我同意存在一些变量范围问题。

标签: javascript html chunking


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多