العمل مع أرشيفات ZIP في Node.js: مكتبة Adm-Zip

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

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

ابدأ الدورة

مكتبة 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 غير مدعوم)، لكنها مناسبة للحماية الأساسية.



<

توصيات