Ke kompresi a dekomprimaci souborů v Node.js použijte balíčky Archiver a Unzipper.
Archivace souborů je v moderním světě každodenní činností, protože každý může potvrdit výhody, které nabízí komprimace souborů nebo složek do menších přenosných formátů.
Formát ZIP je jedním z nejoblíbenějších archivních formátů používaných ve světě výpočetní techniky a je vysoce doporučen volba pro každého, kdo potřebuje převést nezpracované soubory na archivy pro lepší úložiště, efektivní přenos nebo cokoliv jiného důvod.
Proč byste tedy měli zvážit komprimaci souborů a jak můžete komprimovat soubory do ZIP a extrahovat je zpět do původního stavu programově pomocí Node.js?
Proč komprimovat soubory?
Mnohokrát se soubory a složky stanou velmi velkými a jejich sdílení nebo přenos se stává problémem, protože jsou buď jsou příliš velké na to, aby je bylo možné uložit na úložný disk konkrétní kapacity, nebo jejich nahrávání do cloudu trvá příliš dlouho úložný prostor.
Ve scénářích, jako je tento a mnoho dalších, byste měli takové soubory nebo složky komprimovat na mnohem menší velikost. Kromě snadnějšího přenosu souborů mezi další důvody, proč byste mohli zvážit komprimaci souborů, patří:
- Efektivní úložiště
- Lepší struktura a organizace souborů
- Zabezpečení (šifrování souborů a ochrana heslem)
- Integrita souboru
- Verze souborů
Co jsou balíčky Node.js Archiver a Unzipper?
The archivář oficiální dokumentace balíčku popisuje balíček jako „streamovací rozhraní pro generování archivů“. To znamená, že balíček Archiver poskytuje knihovnu funkcí, které využívají proudy Node.js k vytváření komprimovaných archivů souborů.
Balíček Archiver ve výchozím nastavení podporuje více formátů archivů, včetně ZIP, GZIP a TAR. Balíček také umožňuje vytvářet archivy ze souborů a adresářů a rozdělit velké archivy na menší části (vícesvazkové archivy). Umožňuje také vyloučit nebo filtrovat soubory během komprese.
The Rozepnout zip package je velmi účinný balíček pro extrahování archivů ZIP v Node.js. Balíček poskytuje snadno použitelné rozhraní API, které umožňuje vývojářům extrahovat soubory ZIP pomocí několika řádků kódu.
Balíčky Archiver a Unzipper jsou volbou pro tento tutoriál, protože se hladce integrují s Node.js fs modul, zajišťující bezproblémovou kompatibilitu a jednoduchost.
Jak komprimovat soubory do formátu ZIP v Node.js
Komprese souborů do formátu ZIP v Node.js je snadné jako v jakémkoli jiném jazyce díky balíčku Archiver. Chcete-li vytvořit archivy ZIP v Node.js a přitom postupovat podle této části, musíte mít na svém počítači nastavené vývojové prostředí Node.js.
Vytvoříte jednoduchý skript Node.js pro kompresi souboru a složky do formátu ZIP. Vytvořte na svém počítači nový projekt Node spuštěním následujících příkazů:
mkdir node-zip-archiver
CD node-zip-archiver
npm init -y
Dále musíte do projektu nainstalovat balíček Archiver. Běh npm install archiver --save ve vašem terminálu jej nainstalovat. Po dokončení instalace balíčku vytvořte nový soubor v adresáři projektu a pojmenujte jej podle svých preferencí, např. app.js nebo archiver.js.
The fs modul zpracovává operace se soubory, zatímco balíček Archiver se postará o kompresi souborů a složek do archivů ZIP, proto skript vyžaduje oba moduly.
Vytváření ZIP archivů ze souborů
Následující kód je implementací funkce, která přijímá soubor jako argument a vytváří komprimovanou ZIP verzi souboru.
konst archivátor = vyžadovat('archiver')
konst fs = vyžadovat('fs')// vytvořit ZIP ze souboru
konst createZipFromFile = (soubor) => {
konst filePath = __dirname + '/' + soubor
konst output = fs.createWriteStream (filePath + '.zip')
konst archiv = archivář('zip', {
zlib: { úroveň: 9 } // nastaví úroveň komprese na nejvyšší
})
archiv.pipe (výstup);
archive.file (filePath, { název: soubor })
archive.finalize()
}
Funkce vezme název souboru ke komprimaci a vygeneruje výstupní soubor s podobným názvem (s jediným rozdílem v přidání přípony souboru ZIP).
Poté funkce vygeneruje nový archiv s úrovní komprese nastavenou na 9 (nejvyšší) a použije trubka funkce pro přenos výstupních datových proudů archivu do vstupu výstupního souboru.
The soubor funkce přidá soubor do archivu. Přijímá cestu k souboru jako parametr a volitelně možnosti parametr, kde můžete zadat vlastnosti souboru v archivu.
The název volba určuje název souboru v archivu. Pokud tato možnost není při přidávání souboru do archivu zadána, Archiver umístí soubor do archivu na základě jeho původní cesty, přičemž zachová adresářovou strukturu.
Pokud je však explicitně poskytnut, Archiver přidá soubor do archivu bez jeho původní cesty, což umožňuje vlastní pojmenování a organizaci v rámci archivu.
Vytváření ZIP archivů ze složek
Proces vytváření archivů ZIP ze složek se příliš neliší od procesu pro soubory. Hlavním rozdílem je použití balíčku Archiver adresář fungovat na rozdíl od soubor v předchozí funkci.
Níže je implementace funkce pro kompresi složky do archivu ZIP.
// vytvořit ZIP ze složky
konst createZipFromFolder = (složku) => {
konst folderPath = __dirname + '/' + složka
konst output = fs.createWriteStream (cesta ke složce + '.zip')konst archiv = archivář('zip', {
zlib: { úroveň: 9 } // nastaví úroveň komprese na nejvyšší
})
archive.pipe (výstup)
archive.directory (cesta ke složce, Nepravdivé)
archive.finalize()
}
The adresář Funkce bere cestu ke složce jako svůj první argument a příznak jako druhý argument. Příznak určuje umístění složky v archivu.
Když je příznak nastaven na Nepravdivé, bude výsledný archiv obsahovat pouze obsah složky, s výjimkou složky samotné. Ale pokud je příznak nastaven na skutečný, Archiver zahrne samotnou složku do vygenerovaného archivu
Pokud se chcete vyhnout kontaminaci umístění, kam archiv extrahujete, soubory z komprimovaného archivu, měli byste přemýšlet o nastavení vlajka možnost skutečný. Můžete jej však nastavit na Nepravdivé, pokud to lépe vyhovuje vašim účelům.
Jak dekomprimovat soubory v Node.js
Proces extrahování souborů ZIP v Node.js má několik přístupů a je k dispozici několik knihoven, ale v tomto článku je použit balíček Unzipper.
Spusťte ve svém terminálu následující příkaz a nainstalujte balíček Unzipper do vašeho projektu.
npm install unzipper --save
Po instalaci balíčku jej importujte do svého kódu a implementujte funkci extrakce ZIP uvedenou v kódu níže:
konst rozepnout = vyžadovat("rozepnout")
//funkce pro rozbalení souboru ZIP
konst extraktZip = asynchronní (soubor) => {
konst filePath = __dirname + '/' + soubor
konst outputPath = __dirname + '/extrahováno'
čekat fs.createReadStream (filePath)
.potrubí (rozepnout zip. Výpis({ cesta: výstupní cesta }))
.slib()
}
The extraktZip funkce je asynchronní funkce, která vytváří čtený proud pro čtení obsahu souboru ZIP a extrahuje soubor do zadané výstupní cesty (vytváří extrahováno složka, pokud neexistuje).
V případě dekomprimace nebo extrakce není potřeba definovat různé funkce pro soubory a složky, protože ZIP archiv je soubor bez ohledu na jeho obsah.
Níže je uvedena funkce, kterou můžete přidat do aplikace a otestovat funkce, které jste dosud vytvořili:
(asynchronnífunkce () {
konst soubor = 'test.pdf'
konst složka = 'test_folder'
konst zipFile = 'test.pdf.zip'
createZipFromFile (soubor)
řídicí panel.log('ZIP archiv byl úspěšně vytvořen ze souboru')
createZipFromFolder (složka)
řídicí panel.log('ZIP archiv byl úspěšně vytvořen ze složky')
čekat extraktZip (zipFile)
řídicí panel.log('ZIP archiv byl úspěšně extrahován')
}) ()
Všechny předchozí funkce jsou Funkce šipek JavaScriptu, ale výše uvedená funkce je jiná, protože je an Okamžitě vyvolaný funkční výraz že zapouzdřuje kód v něm a okamžitě jej provede.
Komprese souborů je výhodná při vytváření efektivních aplikací
Vždy by mělo být cílem učinit vaše aplikace tak efektivní, jak jen mohou být, aby uživatelům lépe sloužily a udržely si příjemný uživatelský zážitek.
Ve scénářích, kdy potřebujete v rámci aplikace přenést velké množství souborů, zvažte komprimaci a dekomprimaci souborů během přenosu. Většina moderních programovacích jazyků poskytuje podporu pro efektivní kompresi a dekomprimaci souborů.