Ответ 1
Вы можете сжимать до 4 ГБ данных с помощью zip.js, но:
- он будет работать только с Chrome
- он будет довольно медленным (около 30 минут на гигабайт сжатых данных на моем старом ноутбуке).
Вы можете попробовать его в Интернете с помощью этой демонстрации. Вы должны выбрать опцию "HDD" в входе "выбрать временное хранилище". Затем вы можете импортировать большие файлы из своей файловой системы и контролировать потребление памяти: она должна быть стабильной (около 300 МБ на моем ноутбуке).
Выбор "HDD" означает, что zip.js будет использовать File API: Каталоги и Система для хранения сжатых данных. Этот API в настоящее время доступен только в Chrome и позволяет записывать данные в изолированную виртуальную файловую систему. Демонстрация использует временное хранилище, которое не требует разрешения пользователя.
Изменить: вы также можете реализовать свой собственный конструктор Writer для потоковой передачи данных на ваш сервер, в то время как zip.js сжимает его: t полагаться на API файловой системы и работать с каждым поддерживаемым вами браузером. Писатель должен просто реализовать эти 2 метода:
init(callback[, onerror])
// initializes the stream where to write the zipped data
writeUint8Array(array, callback[, onerror])
// writes asynchronously a Uint8Array into the stream.
// getData method is optional
Вот пример пользовательских конструкторов Writer и Reader. Вы также можете посмотреть zip.js Реализации Writers для получения дополнительных примеров.