上传最后一个文件片时代码失败.(javascript, HTML 5)

Code fails when uploading last file slice. (javascript, html 5)

本文关键字:javascript HTML 失败 代码 最后一个 文件 时代      更新时间:2023-09-26

我有以下脚本,它工作成功,直到最后一个文件片要上传,在那里它失败了(错误代码块被触发)。我不明白为什么。

function startUpload(fileElementId, blockLength, uploadProgressElement) {
var start = 0;
var end = blockLength;
var incrimentalIdentifier = 1;
var totalNumberOfBlocks = 0;
var file = document.getElementById(fileElementId).files[0];
var progressBar = document.getElementById(uploadProgressElement);
if (file.size <= 0) {
    alert('Please select a file!');
    return;
}
do {
    if (end > file.size - 1) {
        end = file.size - 1;
    }
    if ((file.size % blockLength) == 0) {
        totalNumberOfBlocks = parseInt(file.size / blockLength);
    }
    else {
        totalNumberOfBlocks = parseInt(file.size / blockLength) + 1;
    }
    var reader = new FileReader();
    reader.onloadend = function (evt) {
        if (evt.target.readyState == FileReader.DONE) {
            $.ajax({
                type: "POST",
                url: "/Home/UploadBlock",
                data: { "identifier": incrimentalIdentifier, "fileName": file.name, "payload": evt.target.result },
                dataType: "json",
                success: function () {
                    progressBar.value = Math.round((incrimentalIdentifier / totalNumberOfBlocks) * 100);
                },
                error: function () {
                    alert('failure');
                }
            });
        }
    };
    var payload = file.webkitSlice(start, end);
    reader.readAsText(payload, 'UTF-8');
    start = end + 1;
    incrimentalIdentifier += 1;
    end = start + blockLength - 1;
} while (end < file.size - 1);

}

我还没有在我的动作中做任何事情,但很快就会添加身体。当前的动作是:

 public ActionResult UploadBlock(int identifier, string fileName, string payload)
    {
        return null;
    }

在许多SO用户的帮助下,我终于解决了我的问题。尤其是@Raynos和@David以及其他许多人。

上面给出的代码在迭代器中有一个bug,直到最后一个块才运行。我已经改进了几次解决方案,现在可以从这个链接下载。

希望你发现它在某种程度上适合你的场景。