HTML5 FileReader API аварийно завершает работу Chrome 17 при чтении большого файла в виде слайса - PullRequest
3 голосов
/ 13 февраля 2012

Я пытаюсь прочитать большой файл (3 ГБ) размером в 100 МБ.

      ***function sliceMe() {
            var file = document.getElementById('files').files[0],
            fr = new FileReader;
            var chunkSize = document.getElementById('txtSize').value;
            chunkSize =1048576;            

            var chunks = Math.ceil(file.size / chunkSize);
            var chunk = 0;

            document.getElementById('byte_range').innerHTML = "";

            function loadNext() {
                var start, end,
                blobSlice = File.prototype.mozSlice || File.prototype.webkitSlice;
                start = chunk * chunkSize;
                if (start > file.size)
                    start = end+1;
                end = start + (chunkSize -1) >= file.size ? file.size : start + (chunkSize -1);
                fr.onload = function(e) {      
                    if (++chunk <= chunks) {
                        document.getElementById('byte_range').innerHTML += chunk + "  " +
                            ['Read bytes: ', start , ' - ', end,
                            ' of ', file.size, ' byte file'].join('')+"<br>";                        
                        //console.info(chunk);
                        loadNext(); // shortcut here

                    }
                };
                fr.readAsArrayBuffer(blobSlice.call(file, start, end));

            }
            loadNext();
        }***

Вышеупомянутый код работает, как и ожидалось, в Firefox и в Chrome 16. Но в версиях Chrome 17 и 18dev после чтения 1 ГБ данных происходит сбой браузера.

Известна ли проблема в Chrome 17?

Ответы [ 2 ]

2 голосов
/ 11 июля 2013

У меня была такая же проблема с чтением в файле размером 1,8 ГБ.Если я посмотрю диспетчер задач, chrome.exe займет до 1,5 ГБ памяти, а затем произойдет сбой.Мое решение было использовать рабочий Javascript, а затем использовать FileReaderSync вместо FileReader.Работник javascript работает в отдельном потоке, а FileReaderSync будет работать только в работнике javascript.

0 голосов
/ 04 мая 2012

Вам нужно изменить свой алгоритм, который должен изменять время выполнения чанка в соответствии с размером файла.Сбой Google Chrome при непрерывном цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...