JavaScript中的文件切片导致空blob

chhkpiq4  于 12个月前  发布在  Java
关注(0)|答案(2)|浏览(123)

我正在实现一个基于浏览器的分块文件上传器。为了打开文件,我使用<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为空。我正在发送bniary数据:

_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中观察到这一点。其他浏览器也是可能的。
有什么不对的?我在考虑的事情:

jexiocij

jexiocij1#

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

mpgws1up

mpgws1up2#

var offset = currentChunk * chunkSize;
        var currentFilePart = rr.files.item(0).slice(offset, (offset+chunkSize));
        var cFilePart = new FileReader();
        //var ar1 = new Uint8Array(currentFilePart.arrayBuffer());
         
        var Rajar2 = new Uint8Array(chunkSize);
        var DSA = new Uint8Array(1000);
        var DATop = 0;
        var arrTop = 0;

        var data = currentFilePart.result;
        var ar1 = new Uint8Array(data);
        alert(ar1[0]);

字符串

相关问题