مكتبة Adm-Zip للعمل مع أرشيفات ZIP في Node.js
عند تطوير تطبيقات الويب، الأدوات الخادمة، أو أدوات معالجة البيانات على Node.js، غالبًا ما تنشأ الحاجة للعمل مع أرشيفات ZIP: ضغط الملفات قبل إرسالها للمستخدم، فك ضغط الأرشيفات المستلمة، أو التلاعب بالمحتوى دون فك ضغط كامل. في نظام JavaScript البيئي، توجد عدة مكتبات لهذه المهام، ومن أشهرها وأسهلها استخدامًا Adm-Zip.
ما هي Adm-Zip؟
Adm-Zip هي مكتبة JavaScript نقية لـ Node.js، تتيح إنشاء وقراءة وتعديل أرشيفات ZIP دون اعتماديات خارجية (مثل تثبيت أداة zip أو unzip في النظام). تعمل مع الملفات على القرص ومع المخازن المؤقتة في الذاكرة، مما يجعلها مثالية لخوادم الويب والوظائف السحابية.
الإمكانيات الرئيسية للمكتبة:
- إنشاء أرشيفات ZIP جديدة من ملفات، مجلدات، أو بيانات نصية.
- فك ضغط الأرشيفات مع الاستخراج إلى دليل محدد أو إلى مخزن مؤقت.
- قراءة محتوى الأرشيف دون فك ضغط كامل (عرض قائمة الملفات، قراءة إدخالات فردية).
- إضافة، حذف، وتحديث الملفات داخل أرشيف موجود.
- العمل مع التعليقات على الأرشيف والملفات الفردية.
- دعم كلمات المرور (تشفير ZipCrypto).
- العمل مع التدفقات (Stream) لمعالجة البيانات الكبيرة.
التثبيت
تثبيت المكتبة قياسي لحزم npm:
npm install adm-zipبعد التثبيت، يمكنك تضمينها في مشروعك:
const AdmZip = require('adm-zip');إنشاء أرشيف ZIP
إنشاء أرشيف جديد سهل جدًا. يمكنك إضافة ملفات فردية أو مجلدات كاملة.
const AdmZip = require('adm-zip');
// إنشاء مثيل جديد للأرشيفconst zip = new AdmZip();
// إضافة ملف من نصzip.addFile('hello.txt', Buffer.from('Hello, World!', 'utf8'));
// إضافة ملف من القرصzip.addLocalFile('/path/to/image.jpg');
// إضافة محتوى مجلد محليzip.addLocalFolder('/path/to/documents', 'backup/docs');
// كتابة الأرشيف على القرصzip.writeZip('myarchive.zip');
console.log('تم إنشاء الأرشيف: myarchive.zip');يمكنك أيضًا الحصول على الأرشيف كمخزن مؤقت لإرساله عبر استجابة HTTP:
const zipBuffer = zip.toBuffer();// الآن يمكن إرسال zipBuffer للمستخدم كملف ثنائيفك ضغط أرشيف ZIP
يتم فك الضغط ببضعة أسطر. تدعم المكتبة استخراج جميع الملفات وقراءة الإدخالات الفردية.
const AdmZip = require('adm-zip');
try { // فتح أرشيف موجود const zip = new AdmZip('myarchive.zip');
// استخراج جميع الملفات إلى مجلد محدد zip.extractAllTo('extracted/', true); // true — استبدال الملفات الموجودة
console.log('تم فك ضغط الأرشيف إلى مجلد extracted/');} catch (err) { console.error('خطأ أثناء فك الضغط:', err.message);}إذا كنت بحاجة لقراءة محتوى الأرشيف دون فك ضغط:
const zip = new AdmZip('myarchive.zip');
// الحصول على مصفوفة الإدخالات (الملفات والمجلدات)const zipEntries = zip.getEntries();
zipEntries.forEach(entry => { if (!entry.isDirectory) { console.log(`ملف: ${entry.entryName}, الحجم: ${entry.header.size} بايت`); // قراءة محتوى الملف كنص const content = entry.getData().toString('utf8'); console.log('المحتوى:', content.substring(0, 100)); }});العمل مع كلمات المرور (التشفير)
تدعم Adm-Zip تشفير ZipCrypto. يرجى ملاحظة: هذه ليست أحدث طريقة (AES غير مدعوم)، لكنها مناسبة للحماية الأساسية.
<
أيضاً في المكتبة
مراقبة تطبيقات TypeScript باستخدام Appmetrics
Accompanist في Kotlin: دليل شامل مع أمثلة عملية
العمل مع التواريخ في Java: نظرة على مكتبات java.time و Joda-Time و Apache Commons
توليد تقارير PDF بلغة Swift لنظامي iOS وmacOS باستخدام PDFKit وCore Graphics
البرمجة التفاعلية في JavaScript (Node.js): RxJS & Observables