При загрузке нескольких файлов все файлы в очереди перечисляются и передаются одновременно, в результате загрузка начинается только после завершения всей передачи.
При загрузке 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);
}