2016-10-14 7 views
1

Я столкнулся с проблемой с FileReader и прочитал довольно большие Blobs.FileReader не читает большие капли

const size = 50; //MB 
const blob = new Blob([new ArrayBuffer(size*1024*1024)], {type: 'application/octet-string'}); 

console.log(blob.size); 

const reader = new FileReader(); 
reader.onload = function(e) { 
    console.log(new Uint8Array(e.target.result)); 
}; 
reader.readAsArrayBuffer(blob.slice(0, 1024)); 

https://jsfiddle.net/aas8gmo2/

В приведенном выше примере показано, что OnLoad функция не вызывается каждый раз, когда (если он есть, увеличить размер Blob до 100/200/300 МБ). Проблема воспроизводится только в Chrome (проверено в соответствии с 53.0.2785.143)

Какие-либо намеки, что может быть неправильным?

ответ

1

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

Кроме того, с учетом этих нитей: https://bugs.chromium.org/p/chromium/issues/detail?id=375297 и https://github.com/streamproc/MediaStreamRecorder/issues/86

Оказывается, что память не очищается должным образом при создании нескольких небольших сгустки, и вы, возможно, потребуется перезагрузить страницу, чтобы быть в состоянии идти дальше. (Это также объясняет, почему несколько попыток могут понадобиться на JSFiddle).

Итак, теперь обманываем ответ, но, похоже, вам нужно найти обходной путь ... или погрузиться в исходный код Chrome.

+0

Как я вижу, нет проблем с Blobs размером 2GB. Я полагаю, что у Chrome есть ошибка, потому что он обеспечивает оптимизацию для слишком больших Blob и перемещает их на HDD. – Suprido

+0

Да, я просто проверил Safari & Firefox с огромным блобом из нескольких ГБ, проблема не воспроизводима. Здесь присутствует проблема с ошибкой https://codereview.chromium.org/2055053003/ для Chrome. Будем надеяться, что это скоро будет исправлено. – noKid

 Смежные вопросы

  • Нет связанных вопросов^_^