Сбой кода при загрузке последнего фрагмента файла.(JavaScript, HTML 5) - PullRequest
0 голосов
/ 05 октября 2011

У меня есть следующий скрипт, который успешно работает до тех пор, пока не будет загружен последний фрагмент файла, где он терпит неудачу (срабатывает блок кода ошибки). Я не могу понять, почему.

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;
    }

1 Ответ

0 голосов
/ 11 ноября 2011

Наконец-то я смог решить мою проблему с помощью многих пользователей SO, которые просто великолепны.особенно@Raynos, @David и многие другие.

В приведенном выше коде была ошибка в итераторе, которая никогда не доходила до последнего блока.Я несколько раз уточнял решение, и теперь оно доступно для скачивания по адресу по этой ссылке .

Надеюсь, вы найдете, что оно так или иначе соответствует вашим сценариям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...