Как определить, была ли выполнена передача в браузер для первого медиа-файла при загрузке нескольких файлов - PullRequest
0 голосов
/ 24 марта 2019

При загрузке нескольких файлов все файлы в очереди перечисляются и передаются одновременно, в результате загрузка начинается только после завершения всей передачи.

При загрузке 2-3 медиа-файлов это работаетсглаживается, поскольку время передачи меньше, но при массовой загрузке 30-40 файлов это занимает много времени.

Как определить, была ли завершена передача для первого файла, чтобы он сразу же был загружен, а остальныев очереди загружаются последовательно, не дожидаясь полного списка файлов?

if (content_type == 6) {
    var purl = HTTP_ROOT + "/user/DownloadMultipartContent/vlink/" + dl_permalink;         
} 
if (content_type == 6 && dl_type !== typeof undefined &&  dl_type == 2) {
    $.post(purl, function (downloadarray) {
        var jsonarray = jQuery.parseJSON(downloadarray);
        if (jsonarray.error){permalink
             alert("Download not accomplished!!");
             window.setTimeout(function(){location.reload()},2000)
        } else { 
            $('.download_loader').show().delay(15000).fadeOut(); 
            $.each(jsonarray, function (key, value) {
                download_files([{download: value}]);
            });                            
        }
    });
}

//download function --
function download_files(files) {
    function download_next(i) {
        if (i >= files.length) {
            return;
        }
        var url = files[i].download;         
        var filename = url.substring(url.lastIndexOf("/") + 1).split("?")[0];        
        var xhr = new XMLHttpRequest();
            xhr.open('GET', url, true);
            xhr.responseType = 'blob';
          xhr.onload = function() {
          var a = document.createElement('a');
                a.href = window.URL.createObjectURL(xhr.response);
            a.download = filename;
                a.style.display = 'none';
                document.body.appendChild(a);
                a.click();
                delete a;       
          };
          xhr.send();          
        setTimeout(function () { window.URL.revokeObjectURL(xhr.response); }, 100); // cleanup
        setTimeout(function () {
            download_next(i + 1);
        }, 500);
    }
    // Initiate the first download.
    download_next(0);
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...