Mam obiekt XHR, który pobiera plik 1 GB.Duży plik blob w JavaScript
function getFile(callback)
{
var xhr = new XMLHttpRequest();
xhr.onload = function() {
if (xhr.status == 200) {
callback.apply(xhr);
}else{
console.log("Request error: " + xhr.statusText);
}
};
xhr.open('GET', 'download', true);
xhr.onprogress = updateProgress;
xhr.responseType = "arraybuffer";
xhr.send();
}
Ale File API nie można załadować do pamięci wszystkich, że nawet od pracownika wyrzuca z pamięci ...
btn.addEventListener('click', function() {
getFile(function() {
var worker = new Worker("js/saving.worker.js");
worker.onmessage = function(e) {
saveAs(e.data); // FileSaver.js it creates URL from blob... but its too large
};
worker.postMessage(this.response);
});
});
Web Worker
onmessage = function (e) {
var view = new DataView(e.data, 0);
var file = new File([view], 'file.zip', {type: "application/zip"});
postMessage('file');
};
I Nie próbuję skompresować pliku, ten plik jest już skompresowany z serwera.
Myślałem przechowywanie go najpierw na IndexedDB ale będę musiał ładować blob lub złożyć w każdym razie, nawet jeśli robię żądanie przez bajtów zasięgu, prędzej czy później będę musiał zbudować tę gigantyczną plamę ..
Chcę utworzyć blob: url i wysłać go do użytkownika po pobraniu przez przeglądarkę
Będę używać API FileSystem dla Google Chrome, ale chcę zrobić coś dla Firefoxa, zajrzałem do File Aple Api, ale nic ...
Czy muszę utworzyć rozszerzenie firefox, aby zrobić to samo, co FileSystem dla Google Chrome?
Ubuntu 32 bity
Podziałało po pobraniu mniejszy \ * pliku zip.? Błąd wygląda mi znajomo, "brak pamięci". – Hydro
Tak, zadziałało, tylko dla dużych rozmiarów –
Hmm ... czy możesz spróbować ostrzec cokolwiek, gdy zostanie wywołane zdarzenie btn click? Gdy błąd zostanie zgłoszony, podaj nam liczbę alertów, które tu masz. – Hydro