К сожалению, RAR - это программное обеспечение с закрытым исходным кодом.Таким образом, единственный способ создать архив - это установить утилиту командной строки с именем rar
и затем использовать команду rar a
в дочернем процессе для сжатия файлов.
Для установки rar
на Mac Iпришлось бежать brew install homebrew/cask/rar
.Вы можете найти инструкции по установке для других платформ здесь .
После установки вы можете использовать child_process
следующим образом:
const { exec } = require('child_process');
const { promisify } = require('util');
const fs = require('fs');
const path = require('path');
// Promisify `unlink` and `exec` functions as by default they accept callbacks
const unlinkAsync = promisify(fs.unlink);
const execAsync = promisify(exec);
(async () => {
// Generating a different name each time to avoid any possible collisions
const archiveFileName = `temp-archive-${(new Date()).getTime()}.rar`;
// The files that are going to be compressed.
const filePattern = `*.jpg`;
// Using a `rar` utility in a separate process
await execAsync(`rar a ${archiveFileName} ${filePattern}`);
// If no error thrown the archive has been created
console.log('Archive has been successfully created');
// Now we can allow downloading it
// Delete the archive when it's not needed anymore
// await unlinkAsync(path.join(__dirname, archiveFileName));
console.log('Deleted an archive');
})();
Чтобы запустить пример, поместите несколько файлов .jpg
в каталог проекта.
PS: Если вы выбрали другой формат архива (например,.zip) вы сможете использовать что-то вроде archiver например.Это может позволить вам создать поток zip и направить его на ответ напрямую.Таким образом, вам не нужно создавать какие-либо файлы на диске.Но это другой вопрос.