Necesito crear un archivo zip con alrededor de 1 GB de datos (pero esa cantidad aumentará en el futuro). Inicialmente, construí esto con AdmZip, pero dado que nuestra VM no tiene mucha memoria (ni la necesita, excepto cuando está creando este archivo zip, por lo que no quiero ampliar), se ejecuta sin memoria y se bloquea.
Luego reconstruí el proceso para usar la línea de comandos zip , pero después de configurarlo todo y publicarlo en el servidor, tuve que descubrir por las malas que ese comando no está disponible en una aplicación web de Azure.
Así que ahora tengo que reconstruirlo de nuevo. ¿Alguien puede recomendarme la biblioteca/bibliotecas de nodo correctas para comprimir y descomprimir en el disco en lugar de en la memoria?
(El formato de archivo zip no es un requisito estricto, por lo que si cualquier otro formato de archivo es mejor para esto, ¡estoy abierto a sugerencias!)
Echaría un vistazo a Archiver JS , es bastante poderoso y permite una interfaz de transmisión para archivos .zip, por ejemplo:
const fs = require('fs'); const archiver = require('archiver'); const zipFile = archiver('zip', { zlib: { level: 9 }}); zipFile.on('warning', error => { console.log('warning:', error) }); zipFile.on('error', error => { console.error('error occurred :', error) }); const writeStream = fs.createWriteStream(__dirname + '/test.zip'); zipFile.pipe(writeStream); // Append test file zipFile.append(fs.createReadStream('file1.txt'), { name: 'file_1.txt' }); // Append another file... zipFile.append(fs.createReadStream('file2.txt'), { name: 'file_2.txt' }); zipFile.finalize();Los documentos completos están aquí: https://www.archiverjs.com/docs/archiver