Използвайте пакетите Archiver и Unzipper за компресиране и декомпресиране на файлове в Node.js.

Архивирането на файлове е ежедневна дейност в съвременния свят, тъй като всеки може да потвърди предимствата, предлагани от компресирането на файлове или папки в по-малки, преносими формати.

ZIP форматът е един от най-популярните архивни формати, използвани в света на компютрите, и е силно препоръчителен избор за всеки, който трябва да конвертира необработени файлове в архиви за по-добро съхранение, ефективен трансфер или друго причина.

И така, защо трябва да помислите за компресиране на вашите файлове и как можете да компресирате файлове в ZIP и да ги извлечете обратно в първоначалното им състояние програмно с помощта на Node.js?

Защо да компресирате файлове?

Много пъти файловете и папките стават много големи и споделянето или прехвърлянето им се превръща в проблем, защото са твърде големи, за да се съхраняват на устройство за съхранение с определен капацитет, или им отнема твърде много време, за да се качат в облак съхранение.

instagram viewer

В сценарии като този и много други, трябва да компресирате такива файлове или папки в много по-малък размер. Освен по-лесното прехвърляне на файлове, други причини, поради които може да помислите за компресиране на вашите файлове, включват:

  • Ефективно съхранение
  • По-добра файлова структура и организация
  • Сигурност (шифроване на файлове и защита с парола)
  • Цялост на файла
  • Файлова версия

Какво представляват пакетите за архивиране и разархивиране на Node.js?

The Архиватор официалната документация на пакета описва пакета като "интерфейс за поточно предаване за генериране на архив". Това означава, че пакетът Archiver предоставя библиотека от функции, които използват Node.js потоци за създаване на компресирани файлови архиви.

Пакетът Archiver поддържа множество архивни формати по подразбиране, включително ZIP, GZIP и TAR. Пакетът също ви позволява да създавате архиви от файлове и директории и да разделяте големи архиви на по-малки части (многотомни архиви). Освен това ви позволява да изключвате или филтрирате файлове по време на компресиране.

The Разкопчайте ципа package е много ефективен пакет за извличане на ZIP архиви в Node.js. Пакетът предоставя лесен за използване API, който позволява на разработчиците да извличат ZIP файлове само с няколко реда код.

Пакетите Archiver и Unzipper са изборът за този урок, защото те безпроблемно се интегрират с Node.js fs модул, осигуряващ плавна съвместимост и простота.

Как да компресирате файлове в ZIP формат в Node.js

Компресиране на файлове в ZIP формат в Node.js е лесно, както във всеки друг език, благодарение на пакета за архивиране. За да създадете ZIP архиви в Node.js, докато следвате в този раздел, имате нужда от среда за разработка Node.js, настроена на вашия компютър.

Ще създадете прост скрипт Node.js за компресиране на файл и папка в ZIP формат. Създайте нов проект на Node на вашия компютър, като изпълните следните команди:

mkdir node-zip архиватор
cd node-zip-архиватор
npm init -y

След това трябва да инсталирате пакета Archiver във вашия проект. Бягай npm инсталирайте архиватор --save във вашия терминал, за да го инсталирате. Когато инсталацията на пакета приключи, създайте нов файл в директорията на проекта и го наименувайте според вашите предпочитания, напр. app.js или archiver.js.

The fs модулът обработва файлови операции, докато пакетът Archiver ще обработва компресирането на файлове и папки в ZIP архиви, следователно скриптът изисква и двата модула.

Създаване на ZIP архиви от файлове

Следният код е имплементацията на функция, която приема файл като аргумент и създава компресирана ZIP версия на файла.

конст архиватор = изискват("архиватор")
конст fs = изискват('fs')

// създаване на ZIP от файл
конст createZipFromFile = (файл) => {
конст filePath = __dirname + '/' + файл
конст изход = fs.createWriteStream (filePath + '.zip')
конст архив = архиватор('цип', {
zlib: { ниво: 9 } // задайте най-високото ниво на компресия
})

archive.pipe (изход);
archive.file (filePath, { име: файл })
archive.finalize()
}

Функцията взема името на файла за компресиране и генерира изходен файл с подобно име (с единствената разлика, която е добавянето на разширението на ZIP файл).

След това функцията генерира нов архив с ниво на компресия, зададено на 9 (най-високо) и използва тръба функция за прехвърляне на изходните потоци на архива във входа на изходния файл.

The файл функцията добавя файл към архива. Той приема пътя на файла като параметър и незадължителен настроики параметър, където можете да посочите свойствата на файла в архива.

The име опцията обозначава името на файла в архива. Ако опцията не е посочена при добавяне на файл към архива, Archiver поставя файла в архива въз основа на оригиналния му път, запазвайки структурата на директорията.

Въпреки това, когато е изрично предоставено, Archiver добавя файла към архива без оригиналния му път, което позволява персонализирано наименуване и организация в архива.

Създаване на ZIP архиви от папки

Процесът на създаване на ZIP архиви от папки не се различава много от този за файлове. Основната разлика е използването на пакета за архивиране указател функция за разлика от файл в предишната функция.

По-долу е изпълнението на функция за компресиране на папка в ZIP архив.

// създаване на ZIP от папка
конст createZipFromFolder = (папка) => {
конст folderPath = __dirname + '/' + папка
конст изход = fs.createWriteStream (folderPath + '.zip')

конст архив = архиватор('цип', {
zlib: { ниво: 9 } // задайте най-високото ниво на компресия
})

archive.pipe (изход)
archive.directory (folderPath, невярно)
archive.finalize()
}

The указател функцията приема пътя на папката като първи аргумент и флаг като втори аргумент. Флагът определя разположението на папката в архива.

Когато флагът е настроен на невярно, полученият архив ще съдържа само съдържанието на папката, с изключение на самата папка. Но ако флагът е настроен на вярно, Archiver ще включи самата папка в генерирания архив

Ако искате да избегнете замърсяването на мястото, където извличате архива си, с файлове от компресирания архив, трябва да помислите за настройка на знаме опция за вярно. Можете обаче да го зададете на невярно, ако отговаря по-добре на вашите цели.

Как да декомпресирате файлове в Node.js

Процесът на извличане на ZIP файлове в Node.js има множество подходи и няколко библиотеки са достъпни за използване, но в тази статия се използва пакетът Unzipper.

Изпълнете следната команда във вашия терминал, за да инсталирате пакета Unzipper във вашия проект.

npm install unzipper --save

След като инсталирате пакета, импортирайте го във вашия код и приложете функцията за извличане на ZIP, показана в кода по-долу:

конст разархивирайте = изискват("разкопчаване")

//функция за извличане на ZIP файл
конст екстрактZip = асинхронен (файл) => {
конст filePath = __dirname + '/' + файл
конст outputPath = __dirname + '/извлечено'
изчакайте fs.createReadStream (filePath)
.тръба (разкопчаване на цип. Екстракт({ път: изходен път }))
.promise()
}

The extractZip е асинхронна функция, която създава поток за четене, за да прочете съдържанието на ZIP файла, и извлича файла до указания изходен път (създава извлечени папка, ако не съществува).

В случай на декомпресиране или извличане не е необходимо да се дефинират различни функции за файлове и папки, тъй като ZIP архивът е файл, независимо от съдържанието в него.

По-долу е дадена функция, която можете да добавите към приложението, за да тествате функциите, които сте създали досега:

(асинхроненфункция () {
конст файл = "test.pdf"
конст папка = 'test_folder'
конст zipфайл = 'test.pdf.zip'
createZipFromFile (файл)
конзола.log(„ZIP архивът е успешно създаден от файл“)
createZipFromFolder (папка)
конзола.log(„ZIP архивът е успешно създаден от папка“)
изчакайте екстрактZip (zipFile)
конзола.log(„ZIP архивът е извлечен успешно“)
}) ()

Всички предишни функции са Функции със стрелки на JavaScript, но горната функция е различна, защото е an Незабавно извикан функционален израз че капсулира кода в него и го изпълнява незабавно.

Компресирането на файлове е от полза при изграждането на ефективни приложения

Винаги трябва да бъде цел да направите вашите приложения възможно най-ефективни, за да обслужвате потребителите по-добре и да поддържате приятно потребителско изживяване.

В сценарии, при които трябва да прехвърлите много файлове във вашето приложение, помислете за компресиране и декомпресиране на файловете по време на предаване. Повечето съвременни езици за програмиране осигуряват поддръжка за ефективно компресиране и декомпресиране на файлове.