API отвечает байтовым массивом с кодировкой 64
Почему?Я предлагаю вам добавить метод, который будет отвечать чисто двоичными zip-файлами.
Когда установлено xhr.responseType = "blob";
, и просто сохранить его, как вы делаете это для Chrome.
Если вы хотитеоставьте свой API таким, как есть, попробуйте избавиться от Array и сразу же заполните Uint8Array.
UPD .Я проверил это на своем Chrome 69 под Ubuntu 18.04 с 16 ГБ ОЗУ и обнаружил, что Chrome не позволяет мне загружать более 1000 мегабайт таким образом.
Какого размера файл вы пытаетесь загрузить?
Проверьте это самостоятельно (не забудьте убедиться, что ничто не заблокирует загрузку):
function getBlob(size) {
let u8a = new Uint8Array(size);
for (var i = 0; i < size; i++) {
u8a[i] = 33 + Math.floor(Math.random() * 5)
}
return new Blob([u8a]);
}
function downloadFile(source, filename) {
if (source instanceof (File, Blob)) {
filename = source.name || filename;
source = URL.createObjectURL(source);
}
let link = document.createElement("a");
link.style.display = "none";
link.href = source;
link.download = filename || "blob.bin";
document.body.appendChild(link);
link.click();
setTimeout(function () {
document.body.removeChild(link);
URL.revokeObjectURL(source);
}, 3000);
}
Size (MB): <input id="in" type=number min=1 max=3000>
<button onclick="downloadFile(getBlob(1024(+document.getElementById('in').value)))">download</button>
*1024*