العمل مع أرشيفات ZIP في Node.js: دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع أرشيفات ZIP في Node.js: مكتبات adm-zip و archiver



في تطوير الويب الحديث باستخدام Node.js، غالبًا ما تنشأ الحاجة للعمل مع الأرشيفات: لتعبئة السجلات، ونقل الملفات في مجموعات، وفك ضغط البيانات التي رفعها المستخدم. في هذه المادة، سنستعرض مكتبتين رئيسيتين للعمل مع تنسيق ZIP — adm-zip و archiver. إنهما تحلان تقريبًا جميع المهام المتعلقة بالأرشفة، وتناسبان تمامًا كلًا من البرامج النصية البسيطة وتطبيقات الإنتاج.



مكتبة adm-zip: أداة شاملة لقراءة وكتابة ZIP



adm-zip هي تطبيق خالص بلغة JavaScript للعمل مع أرشيفات ZIP بدون تبعيات خارجية. تسمح بإنشاء أرشيفات جديدة، وكذلك قراءة وتعديل الأرشيفات الموجودة. المكتبة سهلة الاستخدام ولا تتطلب تثبيت أدوات نظام إضافية.



التثبيت

npm install adm-zip


إنشاء أرشيف ZIP

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

// إنشاء مثيل جديد للأرشيفconst zip = new AdmZip();

// إضافة ملفات من مخزن مؤقت أو سلسلة نصيةzip.addFile('hello.txt', Buffer.from('Hello, World!', '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,age1,John,30');

// الحصول على الأرشيف كـ Buffer لإرساله عبر HTTPconst archiveBuffer = zip.toBuffer();

// الآن يمكن إرسال archiveBuffer كاستجابة من الخادم// أو تمريره إلى دالة أخرى


مكتبة archiver: أرشفة متقدمة بتدفق البيانات



archiver هي مكتبة أكثر قوة، محسّنة للعمل مع كميات كبيرة من البيانات. تستخدم التدفقات (streams) في 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('ex                    

توصيات