blob.slice()导致一个空blob - javascript

时间:2018-04-16 09:00:53

标签: javascript file-upload

我正在尝试将大文件发送到服务器,因此我正在使用分块技术以便以健壮的方式执行此操作。

const blobChunk = file.slice(offset, expectedSize);

服务器返回从哪里开始新块以及它应该有多大。如您所见,上述函数以递归方式执行。

但是,如果文件需要发送多个块,第二次调用file时我得到一个空块(长度为0)。

我可以保证console.log arg始终有效( readonly chunkIt = (file: Blob): void => { var offset = 0; var length = 512 * 1024; while (offset >= 0) { const blobChunk = file.slice(offset, length); console.log(blobChunk); offset += length; if (offset > file.size) offset = -1; } } 时)。

我见过this question,但我确定我的文件未被删除或重命名。 我也见过this issue。我对Chrome和Firefox(最新版本)以及Edge都有相同的行为。

谢谢!

更新 好的,所以我做了一个虚拟方法来解决这个问题:

   $("input[name='fileUpload']").on("change", (e) => {
        const files = e.target.files;
        if (typeof files === "undefined" || files === null || files.length === 0)
            e.preventDefault();

        const file = files[0];

        this._client.chunkIt(file);
    });

使用它:

Blob

仅在第一次记录正确的end,以下全部为空。

解决

从这个问题 - Splitting a File into Chunks with Javascript我发现我忘记了我的getModuleProperty("")索引。

1 个答案:

答案 0 :(得分:0)

您需要使用splice()代替slice()

<强>替换

const blobChunk = file.slice(offset, expectedSize);

<强>与

const blobChunk = file.splice(offset, expectedSize);