При загрузке больших файлов (4+ Gb),файлы открываются через стандартную функцию
var reader = new FileReader();
reader.readAsArrayBuffer(file);
в консоли браузера вываливается ошибка
Error ProgressEvent {isTrusted: true, lengthComputable: true, loaded: 0, total: 6777708138, type: "error"…}
Можно ли как то это обойти. Это нужно для подсчёта хэша файла, или может есть ещё какой-то способ получить уникальный id загружаемого файла в браузере.
Хром 56 читает примерно до 3Gb, потом вываливается с ошибкой браузера "Сhrome не хватает памяти".
При попытке загрузить файлы 8-200Gb сразу вываливается ошибка ProgressEvent.
Очевидно, что хром оберегает память (ха!) и не даёт её убить всю.
Можно считать произвольные 1-2Gb из файла и хэшировать их:
let inp = document.querySelector('input'),
fr = new FileReader(),
chunk = 100; // 100bytes
inp.addEventListener('change', _ => {
// Если выбранный файл меньше чанка,
// берём всё, иначе отрезаем кусочек у начала по размеру чанка
let blob = inp.files[0].size <= chunk ? inp.files[0] : inp.files[0].slice(0, chunk);
fr.onloadend = _ => {
let chunkOfFile = fr.result;
console.info(chunkOfFile);
};
fr.readAsArrayBuffer(blob);
});
<input type='file' />
Работа с такими файлами в браузере - дело странное, подумайте об альтернативных путях.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей