Node.js में ZIP-आर्काइव के साथ काम करना: archiver और adm-zip लाइब्रेरी
आधुनिक Node.js वेब डेवलपमेंट में, अक्सर फ़ाइलों को आर्काइव में पैक करने या उनसे डेटा निकालने की आवश्यकता होती है। चाहे वह बैकअप हो, एक ही आर्काइव में कई फ़ाइलें डाउनलोड करना हो, या उपयोगकर्ता डेटा को प्रोसेस करना हो — ZIP-फ़ॉर्मेट के साथ काम करना आवश्यक बना रहता है। Node.js के लिए कई लोकप्रिय लाइब्रेरी मौजूद हैं, और इस लेख में हम दो सबसे शक्तिशाली और सुविधाजनक लाइब्रेरी देखेंगे: archiver (आर्काइव बनाने के लिए) और adm-zip (आर्काइव पढ़ने और हेरफेर करने के लिए)।
ZIP के साथ काम करने के लिए लाइब्रेरी की आवश्यकता क्यों?
Node.js डिफ़ॉल्ट रूप से आर्काइव के साथ काम करने के लिए कोई अंतर्निहित साधन प्रदान नहीं करता है। हालाँकि अलग-अलग स्ट्रीम को संपीड़ित करने के लिए zlib मॉड्यूल मौजूद है, लेकिन कई फ़ाइलों और फ़ोल्डरों के साथ पूर्ण ZIP-फ़ाइलें बनाने के लिए विशेष समाधानों की आवश्यकता होती है। archiver और adm-zip लाइब्रेरी एक सरल API और उच्च प्रदर्शन प्रदान करके इन कार्यों को हल करती हैं।
लाइब्रेरी की स्थापना
दोनों लाइब्रेरी npm के माध्यम से स्थापित होती हैं। टर्मिनल में निम्नलिखित चलाएँ:
npm install archiver adm-ziparchiver लाइब्रेरी: ZIP-आर्काइव बनाना
archiver विभिन्न फ़ॉर्मेट (ZIP, TAR, GZIP) के आर्काइव बनाने के लिए एक लाइब्रेरी है। यह स्ट्रीम के साथ काम करती है, जो पूरी फ़ाइल को मेमोरी में लोड किए बिना बड़ी मात्रा में डेटा को कुशलतापूर्वक प्रोसेस करने की अनुमति देती है।
archiver की मुख्य विशेषताएँ:
- अनुकूलन योग्य संपीड़न स्तर के साथ ZIP-आर्काइव बनाना
- फ़ाइलें और संपूर्ण निर्देशिकाएँ जोड़ना
- मेमोरी बचाने के लिए स्ट्रीम के साथ काम करना
- टिप्पणियों और मेटाडेटा के लिए समर्थन
उदाहरण: एक सरल ZIP-आर्काइव बनाना
const fs = require('fs');const archiver = require('archiver');
// फ़ाइल में लिखने के लिए स्ट्रीम बनाएँconst output = fs.createWriteStream('example.zip');const archive = archiver('zip', { zlib: { level: 9 } }); // अधिकतम संपीड़न
// ईवेंट हैंडलिंगoutput.on('close', () => { console.log(`आर्काइव बनाया गया: ${archive.pointer()} बाइट्स`);});
archive.on('error', (err) => { throw err;});
// फ़ाइलें जोड़ेंarchive.append('फ़ाइल 1 की सामग्री', { name: 'file1.txt' });archive.file('/path/to/existing/file.txt', { name: 'renamed-file.txt' });archive.directory('my_folder/', 'new_folder_name');
// आर्काइवेशन पूरा करेंarchive.pipe(output);archive.finalize();उदाहरण: स्ट्रीमिंग ट्रांसफर के साथ आर्काइवेशन
const http = require('http');const archiver = require('archiver');
http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'application/zip', 'Content-disposition': 'attachment; filename=download.zip' });
const archive = archiver('zip', { zlib: { level: 5 } }); archive.pipe(res);
archive.append('टेक्स्ट फ़ाइल', { name: 'text.txt' }); archive.append(Buffer.from([0x00, 0x01, 0x02]), { name: 'binary.bin' }); archive.finalize();}).listen(3000);adm-zip लाइब्रेरी: आर्काइव पढ़ना और निकालना
adm-zip ZIP-आर्काइव के साथ काम करने के लिए एक बहुमुखी लाइब्रेरी है: पढ़ना, लिखना, अपडेट करना और निकालना। archiver के विपरीत, यह न केवल स्ट्रीम बल्कि बफ़र के साथ भी काम करती है, जो छोटे आर्काइव के लिए सुविधाजनक है।
adm-zip की मुख्य विशेषताएँ:
- मौजूदा ZIP-फ़ाइलों को पढ़ना
- सभी या चुनिंदा फ़ाइलों को निकालना
- नए आर्काइव लिखना (archiver का विकल्प)
- बफ़र और स्ट्रिंग के साथ काम करना
उदाहरण: आर्काइव से फ़ाइलें निकालना
const AdmZip = require('adm-zip');
// मौजूदा आर्काइव लोड करेंconst zip = new AdmZip('./example.zip');
// फ़ाइलों की सूची प्राप्त करेंconst zipEntries = zip.getEntries();zipEntries.forEach((entry) => { console.log(`फ़ाइल