Большой разрыв между последним прогрессом файла, достигающим 100%, и событиями остановки/выполнения?

Я использую плагин blueimp File Upload для реализации некоторых функций загрузки файлов, и я заметил что могут быть большие промежутки времени между тем, когда мой последний индикатор выполнения файла достигает 100%, и когда срабатывают события остановки и выполнения. У меня есть следующий код:

        $('#fileupload').fileupload({
            dataType: 'json',
            progress: function (e, data) {
                var progress = parseInt(data.loaded / data.total * 100, 10);
                var bar = data.context.children().children(".progress");
                $(bar).css("width", progress + "%");
            },
            add: function (e, data) {
                data.context = $("<div></div>").html("Uploading...<div class='progressHolder'><div class='progress'>&nbsp;</div></div>").appendTo($("#files"));
                data.submit();
                $("#processing").fadeIn();
            },
            stop: function (e, data) {
                $("#uploadFiles").fadeIn();
                $("#processing").fadeOut();
            },
            done: function (e, data) {
                $.each(data.result.files, function (index, file) {
                    idArray.push(file.Id);
                });
            }
        });

Кто-нибудь знает, почему это происходит? Как я могу сделать так, чтобы индикаторы выполнения учитывали, когда будет вызвано завершение/остановка?


person Abe Miessler    schedule 04.02.2013    source источник


Ответы (1)


Когда вы загружаете файл, файл сначала (очевидно) загружается на сервер, затем сервер выполняет запрошенный сценарий на стороне сервера, где вы затем обрабатываете файл. Если часть запроса "обработать файл" не является мгновенной, будет задержка между достижением прогресса 100 % и инициированием обратного вызова done. Также может быть задержка, если есть задержка сети.

Событие progress отслеживает только ход загрузки, а не ход выполнения запроса.

Одним из решений было бы, чтобы ваш индикатор выполнения останавливался, скажем, на 90%, а затем увеличивал его до 100% в обратном вызове done. просто умножьте data.total на 1.1

        progress: function (e, data) {
            var progress = parseInt(data.loaded / (data.total*1.1) * 100, 10);
            var bar = data.context.children().children(".progress");
            $(bar).css("width", progress + "%");
        },
person Kevin B    schedule 04.02.2013