Использование Javascript FileReader с огромными файлами

У меня проблема с использованием Javascript FileRead при попытке прочитать огромные файлы.

Например, у меня есть текстовый файл размером 200 МБ, и каждый раз, когда я читаю этот файл, код перестает работать.

Можно ли прочитать текстовый файл, но, например, ТОЛЬКО первые 10 строк или перестать читать после 10 МБ?

Это мой код:

var file = form.getEl().down('input[type=file]').dom.files[0];
var reader = new FileReader();

reader.onload = (function(theFile) {
                return function(e) {
                    data = e.target.result;
                    form.displayedData=data;
                };
            })(file);

reader.readAsText(file);

e.target.result всегда содержит все данные файла.

Что я могу здесь сделать?

Спасибо


person ssamuel68    schedule 04.07.2013    source источник


Ответы (1)


Это будет читать только первые 10 мб:

var file = form.getEl().down('input[type=file]').dom.files[0];
var reader = new FileReader();

reader.onload = function(e) {
    var data = e.target.result;
    form.displayedData = data;
};

reader.readAsText(file.slice(0, 10 * 1024 * 1024));
person Esailija    schedule 04.07.2013
comment
Да, сначала читаются 10 МБ, но файл все еще находится в памяти, я думаю, что первоначальный вопрос был о чтении огромных файлов, а не о загрузке всего файла в память. разве я не права? - person Yetti; 08.02.2015
comment
Да, @Yetti, моя проблема такая же. если мы попытаемся открыть файл размером 4 ГБ, file.slice попытается загрузить весь файл. - person Fatih; 02.04.2016
comment
@Yetti нет, он загружает в память только 10 МБ. - person Esailija; 07.04.2016
comment
@Fatih Blob.slice (то же, что и File.slice) не следует загружать весь файл в память, в основном это истинная потоковая передача файлов, если вы читаете только фрагменты (хотя фактическое основное поведение зависит от браузера и системы , например, возможно, что файл размером 200 МБ будет загружен в память в системе с 64 ГБ ОЗУ, но не файл размером 20 ГБ). Связано: stackoverflow. com/questions/24833487/ и chromium.googlesource.com/chromium/src/+/master/storage/browser/ - person John Weisz; 27.03.2019
comment
Спасибо @JohnWeisz, я попробую. - person Fatih; 28.03.2019