Node.js में ZIP आर्काइव के साथ काम करना: पूरी गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Node.js में ZIP आर्काइव के साथ काम करना: adm-zip और archiver लाइब्रेरी

आधुनिक Node.js वेब डेवलपमेंट में अक्सर आर्काइव के साथ काम करने की ज़रूरत होती है: लॉग को पैक करना, फ़ाइलों को समूह में भेजना, या यूज़र द्वारा अपलोड किए गए डेटा को अनज़िप करना। इस लेख में हम ZIP फ़ॉर्मेट के लिए दो मुख्य लाइब्रेरी — adm-zip और archiver — के बारे में जानेंगे। ये आर्काइविंग से जुड़ी लगभग सभी समस्याओं को हल करती हैं और सरल स्क्रिप्ट से लेकर प्रोडक्शन ऐप तक के लिए बेहतरीन हैं।

adm-zip लाइब्रेरी: ZIP पढ़ने और लिखने का सार्वभौमिक टूल

adm-zip बिना किसी बाहरी डिपेंडेंसी के ZIP आर्काइव के साथ काम करने का एक शुद्ध JavaScript इम्प्लीमेंटेशन है। यह नए आर्काइव बनाने और मौजूदा आर्काइव को पढ़ने/बदलने दोनों की सुविधा देता है। यह लाइब्रेरी उपयोग में सरल है और इसमें अतिरिक्त सिस्टम टूल्स की ज़रूरत नहीं है।

इंस्टॉलेशन

npm install adm-zip

ZIP आर्काइव बनाना

const AdmZip = require('adm-zip');
const fs = require('fs');

// आर्काइव का नया इंस्टेंस बनाएं
const zip = new AdmZip();

// बफर या स्ट्रिंग से फ़ाइलें जोड़ें
zip.addFile('hello.txt', Buffer.from('नमस्ते, दुनिया!', 'utf8'));

// लोकल फ़ाइल जोड़ें
zip.addLocalFile('/path/to/image.png');

// पूरा फ़ोल्डर जोड़ें
zip.addLocalFolder('/path/to/documents', 'docs');

// आर्काइव को डिस्क पर सेव करें
zip.writeZip('./output/archive.zip');

console.log('आर्काइव सफलतापूर्वक बन गया!');

मौजूदा आर्काइव को पढ़ना और अनज़िप करना

const AdmZip = require('adm-zip');

// मौजूदा आर्काइव लोड करें
const zip = new AdmZip('./input/archive.zip');

// फ़ाइलों की सूची प्राप्त करें
const zipEntries = zip.getEntries();
zipEntries.forEach((entry) => {
    console.log(`फ़ाइल: ${entry.entryName}, साइज़: ${entry.header.size} बाइट`);
});

// सभी फ़ाइलों को निर्दिष्ट फ़ोल्डर में निकालें
zip.extractAllTo('./extracted', true); // true — मौजूदा फ़ाइलों को ओवरराइट करेगा

// या किसी विशेष फ़ाइल की सामग्री प्राप्त करें
const content = zip.readAsText('data.json');
console.log('data.json की सामग्री:', content);

बफर के साथ काम करना (डिस्क पर लिखे बिना)

const AdmZip = require('adm-zip');
const zip = new AdmZip();

zip.addFile('report.csv', 'id,name,age\n1,राम,30');

// HTTP के ज़रिए भेजने के लिए आर्काइव को Buffer के रूप में प्राप्त करें
const archiveBuffer = zip.toBuffer();

// अब archiveBuffer को सर्वर रिस्पॉन्स के रूप में भेजा जा सकता है
// या किसी दूसरे फंक्शन में पास किया जा सकता है

archiver लाइब्रेरी: उन्नत स्ट्रीम-आधारित आर्काइविंग

archiver एक अधिक शक्तिशाली लाइब्रेरी है, जो बड़े डेटा वॉल्यूम के साथ काम करने के लिए ऑप्टिमाइज़ की गई है। यह Node.js के स्ट्रीम का उपयोग करती है, जिससे पूरी सामग्री को मेमोरी में लोड किए बिना "ऑन-द-फ्लाई" फ़ाइलों को आर्काइव किया जा सकता है। यह सीमित संसाधनों वाले सर्वर ऐप के लिए आदर्श विकल्प है।

इंस्टॉलेशन

npm install archiver

स्ट्रीम आउटपुट के साथ आर्काइव बनाना

const archiver = require('archiver');
const fs = require('fs');
const path = require('path');

// राइट स्ट्रीम बनाएं
const output = fs.createWriteStream('./backup.zip');
const archive = archiver('zip', {
    zlib: { level: 9 } // अधिकतम कंप्रेशन स्तर
});

// इवेंट हैंडलिंग
output.on('close', () => {
    console.log(`आर्काइव बन गया: ${archive.pointer()} बाइट`);
});

archive.on('error', (err) => {
    throw err;
});

// आर्काइव स्ट्रीम को आउटपुट फ़ाइल से जोड़ें
archive.pipe(output);

// फ़ाइलें जोड़ें
archive.file('/var/log/app.log', { name: 'logs/app.log' });

// डायरेक्टरी को रिकर्सिवली जोड़ें
archive.directory('uploads/', 'user_files');

// स्ट्रिंग को फ़ाइल के रूप में जोड़ें
archive.append('यह फ़ाइल की सामग्री है', { name: 'readme.txt' });

// आर्काइविंग पूरी करें
archive.finalize();

HTTP रिस्पॉन्स के ज़रिए आर्काइव भेजना

const express = require('express');
const archiver = require('archiver');
const app = express();

app.get('/download', (req, res) => {                    

अनुशंसाएँ