استخدم حزم Archiver و Unzipper لضغط وفك ضغط الملفات في Node.js.
أرشفة الملفات هي نشاط يومي في العالم الحديث حيث يمكن للجميع أن يشهد على المزايا التي يوفرها ضغط الملفات أو المجلدات إلى تنسيقات أصغر قابلة للحمل.
يعد تنسيق ZIP أحد أكثر تنسيقات الأرشيف شيوعًا المستخدمة في عالم الحوسبة ، وهو موصى به بشدة خيار لأي شخص يحتاج إلى تحويل الملفات الأولية إلى أرشيفات من أجل تخزين أفضل أو نقل فعال أو أي شيء آخر سبب.
فلماذا تفكر في ضغط ملفاتك ، وكيف يمكنك ضغط الملفات إلى ZIP واستخراجها مرة أخرى إلى حالتها الأصلية برمجيًا باستخدام Node.js؟
لماذا ضغط الملفات؟
في كثير من الأحيان ، تصبح الملفات والمجلدات كبيرة جدًا ، وتصبح مشاركتها أو نقلها مشكلة لأنها كذلك إما كبيرة جدًا بحيث لا يمكن تخزينها على محرك تخزين بسعة معينة ، أو أنها تستغرق وقتًا طويلاً للتحميل على السحاب تخزين.
في سيناريوهات مثل هذه وغيرها الكثير ، يجب ضغط هذه الملفات أو المجلدات إلى حجم أصغر بكثير. بصرف النظر عن نقل الملفات الأسهل ، تشمل الأسباب الأخرى التي تجعلك تفكر في ضغط ملفاتك ما يلي:
- تخزين فعال
- هيكل وتنظيم أفضل للملفات
- الأمان (تشفير الملفات والحماية بكلمة مرور)
- سلامة الملف
- تعيين إصدارات الملف
ما هي حزم أرشيفي Node.js و Unzipper؟
ال أرشيفي تصف الوثائق الرسمية للحزمة الحزمة بأنها "واجهة تدفق لإنشاء أرشيف". هذا يعني أن حزمة الأرشفة توفر مكتبة من الوظائف التي تستفيد من تدفقات Node.js لإنشاء أرشيفات ملفات مضغوطة.
تدعم حزمة الأرشفة تنسيقات أرشيف متعددة بشكل افتراضي ، بما في ذلك ZIP و GZIP و TAR. تتيح لك الحزمة أيضًا إنشاء أرشيفات من الملفات والدلائل ، وتقسيم الأرشيفات الكبيرة إلى أجزاء أصغر (أرشيفات متعددة المجلدات). كما يسمح لك باستبعاد الملفات أو تصفيتها أثناء الضغط.
ال Unzipper الحزمة هي حزمة فعالة للغاية لاستخراج أرشيفات ZIP في Node.js. توفر الحزمة واجهة برمجة تطبيقات سهلة الاستخدام تسمح للمطورين باستخراج ملفات ZIP ببضعة سطور من التعليمات البرمجية.
حزم Archiver و Unzipper هي اختيارات هذا البرنامج التعليمي لأنها تتكامل بسلاسة مع Node.js خ الوحدة النمطية ، مما يضمن التوافق السلس والبساطة.
كيفية ضغط الملفات بتنسيق ZIP في Node.js
ضغط الملفات إلى تنسيق ZIP في Node.js سهل تمامًا كما هو الحال في أي لغة أخرى ، بفضل حزمة Archiver. لإنشاء أرشيفات ZIP في Node.js أثناء المتابعة في هذا القسم ، تحتاج إلى إعداد بيئة تطوير Node.js على جهاز الكمبيوتر الخاص بك.
ستقوم بإنشاء برنامج نصي بسيط Node.js لضغط ملف ومجلد إلى تنسيق ZIP. قم بإنشاء مشروع Node جديد على جهاز الكمبيوتر الخاص بك عن طريق تشغيل الأوامر التالية:
mkdir عقدة مضغوطة أرشيف
قرص مضغوط عقدة مضغوطة أرشيف
npm الحرف الأول
بعد ذلك ، تحتاج إلى تثبيت حزمة Archiver في مشروعك. يجري npm تثبيت أرشيفي - حفظ في جهازك الطرفي لتثبيته. عند اكتمال تثبيت الحزمة ، أنشئ ملفًا جديدًا في دليل المشروع وقم بتسميته وفقًا لتفضيلاتك ، على سبيل المثال app.js أو archiver.js.
ال خ تتعامل الوحدة النمطية مع عمليات الملفات ، بينما ستتعامل حزمة الأرشفة مع ضغط الملفات والمجلدات في أرشيفات مضغوطة ، وبالتالي ، يتطلب البرنامج النصي كلا الوحدتين.
إنشاء أرشيفات مضغوطة من الملفات
التعليمة البرمجية التالية هي تنفيذ دالة تقبل ملفًا كوسيطة وتقوم بإنشاء إصدار مضغوط من الملف بتنسيق ZIP.
مقدار ثابت أرشيفي = يتطلب("أرشيفي")
مقدار ثابت خ = يتطلب('fs')// إنشاء ملف مضغوط من ملف
مقدار ثابت createZipFromFile = (ملف) => {
مقدار ثابت مسار الملف = __dirname + '/' + ملف
مقدار ثابت الإخراج = fs.createWriteStream (مسار الملف + '.أَزِيز')
مقدار ثابت أرشيف = أرشيفي ('أَزِيز', {
zlib: { مستوى: 9 } // ضبط مستوى الضغط على أعلى مستوى
})
archive.pipe (الإخراج) ؛
archive.file (مسار الملف ، { اسم: ملف })
Archive.finalize ()
}
تأخذ الوظيفة اسم الملف للضغط وإنشاء ملف إخراج يحمل اسمًا مشابهًا (مع التمييز الوحيد هو إضافة امتداد ملف ZIP).
بعد ذلك ، تُنشئ الوظيفة أرشيفًا جديدًا بمستوى الضغط مضبوطًا على 9 (الأعلى) ويستخدم ملف يضخ وظيفة لنقل تدفقات الإخراج للأرشيف إلى مدخلات ملف الإخراج.
ال ملف تضيف الوظيفة ملفًا إلى الأرشيف. يقبل مسار الملف كمعامل واختياري خيارات المعلمة حيث يمكنك تحديد خصائص الملف في الأرشيف.
ال اسم الخيار يعين اسم الملف داخل الأرشيف. إذا لم يتم تحديد الخيار عند إضافة ملف إلى الأرشيف ، فإن Archiver يضع الملف داخل الأرشيف بناءً على مساره الأصلي ، مع الاحتفاظ بهيكل الدليل.
ومع ذلك ، عندما يتم توفيره بشكل صريح ، يضيف Archiver الملف إلى الأرشيف بدون مساره الأصلي ، مما يسمح بالتسمية والتنظيم المخصصين داخل الأرشيف.
إنشاء أرشيفات مضغوطة من مجلدات
لا تختلف عملية إنشاء أرشيفات بتنسيق ZIP من المجلدات كثيرًا عن عملية إنشاء أرشيفات الملفات. الاختلاف الرئيسي هو استخدام حزم المحفوظات الدليل وظيفة مقابل ملف في الوظيفة السابقة.
يوجد أدناه تنفيذ وظيفة لضغط مجلد في أرشيف ZIP.
// إنشاء ملف مضغوط من المجلد
مقدار ثابت createZipFromFolder = (مجلد) => {
مقدار ثابت folderPath = __dirname + '/' + مجلد
مقدار ثابت الإخراج = fs.createWriteStream (folderPath + '.أَزِيز')مقدار ثابت أرشيف = أرشيفي ('أَزِيز', {
zlib: { مستوى: 9 } // ضبط مستوى الضغط على أعلى مستوى
})
archive.pipe (الإخراج)
archive.directory (مجلد المسار ، خطأ شنيع)
Archive.finalize ()
}
ال الدليل تأخذ الدالة مسار المجلد كوسيطها الأول والعلامة كوسيطتها الثانية. تحدد العلامة موضع المجلد داخل الأرشيف.
عندما يتم تعيين العلم على خطأ شنيع، سيحتوي الأرشيف الناتج فقط على محتويات المجلد ، باستثناء المجلد نفسه. ولكن إذا تم تعيين العلم على حقيقي، سيقوم أرشيفي بتضمين المجلد نفسه في الأرشيف الذي تم إنشاؤه
إذا كنت ترغب في تجنب تلويث الموقع حيث تقوم باستخراج أرشيفك بملفات من الأرشيف المضغوط ، فيجب أن تفكر في تعيين علَم الخيار ل حقيقي. ومع ذلك ، يمكنك ضبطه على خطأ شنيع، إذا كان يناسب أغراضك بشكل أفضل.
كيفية فك ضغط الملفات في Node.js
عملية استخراج ملفات ZIP في Node.js لها طرق متعددة والعديد من المكتبات متاحة للاستخدام ، ولكن في هذه المقالة ، يتم استخدام حزمة Unzipper.
قم بتشغيل الأمر التالي في الجهاز الخاص بك لتثبيت حزمة Unzipper في مشروعك.
npm تثبيت unzipper - حفظ
بعد تثبيت الحزمة ، قم باستيرادها إلى التعليمات البرمجية الخاصة بك وتنفيذ وظيفة استخراج ZIP الموضحة في الكود أدناه:
مقدار ثابت أونزيبر = يتطلب("أونزيبر")
// وظيفة لاستخراج ملف مضغوط
مقدار ثابت extractZip = غير متزامن (ملف) => {
مقدار ثابت مسار الملف = __dirname + '/' + ملف
مقدار ثابت outputPath = __dirname + "/ مستخرج"
انتظر fs.createReadStream (مسار الملف)
.pipe (unzipper. يستخرج({ طريق: مسار الاخراج }))
.يعد()
}
ال استخراج ملف مضغوط الوظيفة هي وظيفة غير متزامنة تنشئ دفق قراءة لقراءة محتوى ملف ZIP ، وتستخرج الملف إلى مسار الإخراج المحدد (تنشئ مستخرج مجلد إذا لم يكن موجودًا).
في حالة فك الضغط أو الاستخراج ، ليست هناك حاجة لتعريف وظائف مختلفة للملفات والمجلدات ، لأن أرشيف ZIP هو ملف بغض النظر عن المحتوى الموجود فيه.
فيما يلي وظيفة يمكنك إضافتها إلى التطبيق لاختبار الوظائف التي قمت بإنشائها حتى الآن:
(غير متزامنوظيفة () {
مقدار ثابت ملف = "test.pdf"
مقدار ثابت مجلد = "test_folder"
مقدار ثابت zipFile = "test.pdf.zip"
createZipFromFile (ملف)
وحدة التحكم.سجل("تم إنشاء أرشيف مضغوط بنجاح من ملف")
createZipFromFolder (مجلد)
وحدة التحكم.سجل("تم إنشاء أرشيف مضغوط بنجاح من المجلد")
انتظر extractZip (ملف مضغوط)
وحدة التحكم.سجل("تم استخراج أرشيف ZIP بنجاح")
}) ()
جميع الوظائف السابقة وظائف سهم JavaScript، ولكن الوظيفة المذكورة أعلاه مختلفة لأنها ملف تم استدعاء التعبير الوظيفي فورًا الذي - التي بتغليف الكود بداخله وينفذه على الفور.
ضغط الملفات مفيد في بناء تطبيقات فعالة
يجب أن يكون الهدف دائمًا هو جعل تطبيقاتك فعالة قدر الإمكان من أجل خدمة المستخدمين بشكل أفضل والحفاظ على تجربة مستخدم ممتعة.
في السيناريوهات التي تحتاج فيها إلى نقل الكثير من الملفات داخل التطبيق الخاص بك ، ضع في اعتبارك ضغط الملفات وفك ضغطها أثناء الإرسال. توفر معظم لغات البرمجة الحديثة دعمًا لضغط وفك ضغط الملفات بكفاءة.