Используйте пакеты Archiver и Unzipper для сжатия и распаковки файлов в Node.js.
Архивирование файлов — это повседневная деятельность в современном мире, поскольку каждый может подтвердить преимущества сжатия файлов или папок в меньшие портативные форматы.
Формат ZIP является одним из самых популярных форматов архивов, используемых в мире вычислительной техники, и настоятельно рекомендуется выбор для всех, кому необходимо преобразовать необработанные файлы в архивы для лучшего хранения, эффективной передачи или любых других причина.
Итак, почему вам следует подумать о сжатии ваших файлов и как вы можете сжимать файлы в ZIP и извлекать их обратно в исходное состояние программно с помощью Node.js?
Зачем сжимать файлы?
Очень часто файлы и папки становятся очень большими, и их совместное использование или передача становятся проблемой, потому что они либо они слишком велики для хранения на диске определенной емкости, либо слишком долго загружаются в облако. хранилище.
В подобных и многих других сценариях такие файлы или папки следует сжимать до гораздо меньшего размера. Помимо упрощения передачи файлов, другие причины, по которым вы можете подумать о сжатии файлов, включают:
- Эффективное хранение
- Улучшенная файловая структура и организация
- Безопасность (шифрование файлов и защита паролем)
- Целостность файла
- Управление версиями файлов
Что такое пакеты архиватора и распаковщика Node.js?
Архиватор официальная документация пакета описывает пакет как «потоковый интерфейс для создания архива». Это означает, что пакет Archiver предоставляет библиотеку функций, которые используют потоки Node.js для создания архивов сжатых файлов.
Пакет Archiver по умолчанию поддерживает несколько форматов архивов, включая ZIP, GZIP и TAR. Пакет также позволяет создавать архивы из файлов и каталогов, а также разбивать большие архивы на более мелкие части (многотомные архивы). Он также позволяет исключать или фильтровать файлы во время сжатия.
расстегнуть молнию package — очень эффективный пакет для извлечения ZIP-архивов в Node.js. Пакет предоставляет простой в использовании API, который позволяет разработчикам извлекать ZIP-файлы всего несколькими строками кода.
Пакеты Archiver и Unzipper выбраны для этого руководства, поскольку они легко интегрируются с Node.js. фс модуль, обеспечивающий плавную совместимость и простоту.
Как сжать файлы в формат ZIP в Node.js
Сжатие файлов в формат ZIP в Node.js легко, как и на любом другом языке, благодаря пакету Archiver. Чтобы создавать ZIP-архивы в Node.js, следуя указаниям этого раздела, на вашем компьютере должна быть установлена среда разработки Node.js.
Вы создадите простой скрипт Node.js для сжатия файла и папки в формат ZIP. Создайте новый проект Node на своем компьютере, выполнив следующие команды:
mkdir узел-zip-архиватор
CD узел-zip-архиватор
инициализация npm -y
Далее вам нужно установить пакет Archiver в свой проект. Бегать npm установить архиватор --save в вашем терминале, чтобы установить его. Когда установка пакета будет завершена, создайте новый файл в каталоге проекта и назовите его в соответствии с вашими предпочтениями, например. app.js или архиватор.js.
фс Модуль обрабатывает файловые операции, а пакет Archiver будет обрабатывать сжатие файлов и папок в ZIP-архивы, поэтому для сценария требуются оба модуля.
Создание ZIP-архивов из файлов
Следующий код представляет собой реализацию функции, которая принимает файл в качестве аргумента и создает сжатую ZIP-версию файла.
константа архиватор = требовать('архиватор')
константа фс = требовать('фс')// создать ZIP из файла
константа создатьZipFromFile = (файл) => {
константа путь к файлу = __имя_каталога + '/' + файл
константа вывод = fs.createWriteStream (путь к файлу + '.zip')
константа архив = архиватор('молния', {
zlib: { уровень: 9 } // устанавливаем максимальный уровень сжатия
})
архив.труба (выход);
архив.файл (путь к файлу, { имя: файл })
архив.finalize()
}
Функция берет имя файла для сжатия и создает выходной файл с таким же именем (с той лишь разницей, что добавляется расширение файла ZIP).
Затем функция создает новый архив с уровнем сжатия 9 (самый высокий) и использует трубка функция для передачи выходных потоков архива на вход выходного файла.
файл функция добавляет файл в архив. Он принимает путь к файлу в качестве параметра и необязательный параметры параметр, в котором можно указать свойства файла в архиве.
имя опция определяет имя файла в архиве. Если при добавлении файла в архив эта опция не указана, Архиватор помещает файл в архив по исходному пути, сохраняя структуру каталогов.
Однако, если это указано явно, Archiver добавляет файл в архив без исходного пути, что позволяет использовать собственное имя и организацию в архиве.
Создание ZIP-архивов из папок
Процесс создания ZIP-архивов из папок не сильно отличается от процесса для файлов. Основное отличие заключается в использовании пакета Archiver. каталог функционировать в отличие от файл в предыдущей функции.
Ниже представлена реализация функции сжатия папки в ZIP-архив.
// создать ZIP из папки
константа создатьZipFromFolder = (папка) => {
константа путь к папке = __имя_каталога + '/' + папка
константа вывод = fs.createWriteStream (путь к папке + '.zip')константа архив = архиватор('молния', {
zlib: { уровень: 9 } // устанавливаем максимальный уровень сжатия
})
архив.труба (выход)
архив.каталог (путь к папке, ЛОЖЬ)
архив.finalize()
}
каталог Функция принимает путь к папке в качестве первого аргумента и флаг в качестве второго аргумента. Флаг определяет место папки в архиве.
Когда установлен флаг ЛОЖЬ, полученный архив будет содержать только содержимое папки, исключая саму папку. Но если установлен флаг истинный, Архиватор включит саму папку в сгенерированный архив
Если вы хотите избежать загрязнения места, куда вы распаковываете архив, файлами из сжатого архива, вам следует подумать о настройке флаг возможность истинный. Тем не менее, вы можете установить его на ЛОЖЬ, если это лучше подходит для ваших целей.
Как распаковать файлы в Node.js
Процесс извлечения ZIP-файлов в Node.js имеет несколько подходов, и для использования доступно несколько библиотек, но в этой статье используется пакет Unzipper.
Выполните следующую команду в своем терминале, чтобы установить пакет Unzipper в свой проект.
npm установить разархивировать --save
После установки пакета импортируйте его в свой код и реализуйте функцию извлечения ZIP, показанную в коде ниже:
константа расстегнуть молнию = требовать("расстегнуть молнию")
//функция для извлечения ZIP-файла
константа извлечьZip = асинхронный (файл) => {
константа путь к файлу = __имя_каталога + '/' + файл
константа outputPath = __имя_каталога + '/ извлечено'
Ждите fs.createReadStream (путь к файлу)
.pipe (расстегнуть молнию. Извлекать({ путь: выходной путь }))
.обещать()
}
экстрактZip — это асинхронная функция, которая создает поток чтения для чтения содержимого ZIP-файла и извлекает файл по указанному выходному пути (она создает извлечен папку, если она не существует).
В случае распаковки или извлечения нет необходимости определять различные функции для файлов и папок, поскольку ZIP-архив является файлом независимо от содержимого в нем.
Ниже приведена функция, которую вы можете добавить в приложение, чтобы протестировать уже созданные функции:
(асинхронныйфункция () {
константа файл = 'тест.pdf'
константа папка = 'test_folder'
константа zip-файл = 'test.pdf.zip'
создатьZipFromFile (файл)
консоль.бревно(«ZIP-архив успешно создан из файла»)
createZipFromFolder (папка)
консоль.бревно(«ZIP-архив успешно создан из папки»)
Ждите ExtractZip (zip-файл)
консоль.бревно(«ZIP-архив успешно извлечен»)
}) ()
Все предыдущие функции Стрелочные функции JavaScript, но вышеприведенная функция отличается тем, что это Выражение немедленно вызываемой функции что инкапсулирует код внутри него и выполняет его немедленно.
Сжатие файлов полезно для создания эффективных приложений
Всегда должно быть целью сделать ваши приложения максимально эффективными, чтобы лучше обслуживать пользователей и поддерживать приятный пользовательский опыт.
В сценариях, когда вам нужно передать много файлов в приложении, рассмотрите возможность сжатия и распаковки файлов во время передачи. Большинство современных языков программирования поддерживают эффективное сжатие и распаковку файлов.