Node.js में फ़ाइलों को संपीड़ित और डीकंप्रेस करने के लिए आर्काइवर और अनज़िपर पैकेज का उपयोग करें।
फ़ाइल संग्रह करना आधुनिक दुनिया में एक रोजमर्रा की गतिविधि है क्योंकि हर कोई फ़ाइलों या फ़ोल्डरों को छोटे, पोर्टेबल प्रारूपों में संपीड़ित करके दिए जाने वाले लाभों को प्रमाणित कर सकता है।
ज़िप प्रारूप कंप्यूटिंग की दुनिया में उपयोग किए जाने वाले सबसे लोकप्रिय संग्रह प्रारूपों में से एक है, और यह अत्यधिक अनुशंसित है ऐसे किसी भी व्यक्ति के लिए विकल्प जिसे बेहतर भंडारण, कुशल स्थानांतरण या किसी अन्य के लिए कच्ची फ़ाइलों को संग्रह में परिवर्तित करने की आवश्यकता है कारण।
तो, आपको अपनी फ़ाइलों को संपीड़ित करने पर विचार क्यों करना चाहिए, और आप फ़ाइलों को ZIP में कैसे संपीड़ित कर सकते हैं और उन्हें Node.js का उपयोग करके प्रोग्रामेटिक रूप से उनकी मूल स्थिति में वापस ला सकते हैं?
फ़ाइलें संपीड़ित क्यों करें?
कई बार, फ़ाइलें और फ़ोल्डर्स बहुत बड़े हो जाते हैं, और उन्हें साझा करना या स्थानांतरित करना एक समस्या बन जाती है क्योंकि वे बड़े हो जाते हैं या तो किसी विशिष्ट क्षमता के स्टोरेज ड्राइव पर संग्रहीत करने के लिए बहुत बड़ा है, या उन्हें क्लाउड पर अपलोड करने में बहुत समय लग रहा है भंडारण।
इस जैसे और कई अन्य परिदृश्यों में, आपको ऐसी फ़ाइलों या फ़ोल्डरों को बहुत छोटे आकार में संपीड़ित करना चाहिए। आसान फ़ाइल स्थानांतरण के अलावा, जिन अन्य कारणों से आप अपनी फ़ाइलों को संपीड़ित करने पर विचार कर सकते हैं उनमें शामिल हैं:
- कुशल भंडारण
- बेहतर फ़ाइल संरचना और संगठन
- सुरक्षा (फ़ाइल एन्क्रिप्शन और पासवर्ड सुरक्षा)
- फ़ाइल अखंडता
- फ़ाइल संस्करणीकरण
Node.js आर्काइवर और अनजिपर पैकेज क्या हैं?
पुरालेखपाल पैकेज का आधिकारिक दस्तावेज़ीकरण पैकेज को "संग्रह निर्माण के लिए एक स्ट्रीमिंग इंटरफ़ेस" के रूप में वर्णित करता है। इसका तात्पर्य यह है कि आर्काइवर पैकेज फ़ंक्शंस की एक लाइब्रेरी प्रदान करता है जो संपीड़ित फ़ाइल अभिलेखागार बनाने के लिए Node.js स्ट्रीम का लाभ उठाता है।
आर्काइवर पैकेज डिफ़ॉल्ट रूप से ज़िप, जीज़िप और टीएआर सहित कई संग्रह प्रारूपों का समर्थन करता है। पैकेज आपको फ़ाइलों और निर्देशिकाओं से संग्रह बनाने और बड़े संग्रहों को छोटे भागों (बहु-खंड अभिलेखागार) में विभाजित करने की भी अनुमति देता है। यह आपको संपीड़न के दौरान फ़ाइलों को बाहर करने या फ़िल्टर करने की भी अनुमति देता है।
खोलना पैकेज Node.js में ज़िप अभिलेखागार निकालने के लिए एक बहुत ही कुशल पैकेज है। पैकेज एक उपयोग में आसान एपीआई प्रदान करता है जो डेवलपर्स को कोड की कुछ पंक्तियों के साथ ज़िप फ़ाइलें निकालने की अनुमति देता है।
आर्काइवर और अनज़िपर पैकेज इस ट्यूटोरियल के लिए विकल्प हैं क्योंकि वे Node.js के साथ सहजता से एकीकृत होते हैं एफ.एस मॉड्यूल, सहज अनुकूलता और सरलता सुनिश्चित करता है।
Node.js में फ़ाइलों को ज़िप प्रारूप में कैसे संपीड़ित करें
फ़ाइलें संपीड़ित करना किसी भी अन्य भाषा की तरह ही Node.js में ज़िप प्रारूप बनाना आसान है, आर्काइवर पैकेज के लिए धन्यवाद। इस अनुभाग का अनुसरण करते हुए Node.js में ज़िप संग्रह बनाने के लिए, आपको अपने कंप्यूटर पर एक Node.js विकास वातावरण स्थापित करना होगा।
आप किसी फ़ाइल और फ़ोल्डर को ज़िप प्रारूप में संपीड़ित करने के लिए एक सरल Node.js स्क्रिप्ट बनाएंगे। निम्नलिखित कमांड चलाकर अपने कंप्यूटर पर एक नया नोड प्रोजेक्ट बनाएं:
mkdir नोड-ज़िप-संग्रहकर्ता
सीडी नोड-ज़िप-संग्रहकर्ता
एनपीएम इनिट-वाई
इसके बाद, आपको अपने प्रोजेक्ट में आर्काइवर पैकेज इंस्टॉल करना होगा। दौड़ना एनपीएम इंस्टाल आर्काइवर--सेव इसे स्थापित करने के लिए अपने टर्मिनल में। जब पैकेज इंस्टॉलेशन पूरा हो जाए, तो प्रोजेक्ट डायरेक्टरी में एक नई फ़ाइल बनाएं और इसे अपनी पसंद के अनुसार नाम दें, जैसे ऐप.जे.एस या Archiver.js.
एफ.एस मॉड्यूल फ़ाइल संचालन को संभालता है, जबकि आर्काइवर पैकेज ज़िप अभिलेखागार में फ़ाइलों और फ़ोल्डरों के संपीड़न को संभालेगा, इसलिए, स्क्रिप्ट को दोनों मॉड्यूल की आवश्यकता होती है।
फ़ाइलों से ज़िप पुरालेख बनाना
निम्नलिखित कोड एक फ़ंक्शन का कार्यान्वयन है जो फ़ाइल को तर्क के रूप में स्वीकार करता है और फ़ाइल का एक संपीड़ित ज़िप संस्करण बनाता है।
कॉन्स्ट संग्रहकर्ता = ज़रूरत होना('संग्रहकर्ता')
कॉन्स्ट एफएस = ज़रूरत होना('एफएस')// फ़ाइल से ज़िप बनाएं
कॉन्स्ट createZipFromFile = (फ़ाइल) => {
कॉन्स्ट फ़ाइलपथ = __dirname + '/' +फ़ाइल
कॉन्स्ट आउटपुट = fs.createWriteStream (filePath + '.ज़िप')
कॉन्स्ट पुरालेख = संग्रहकर्ता('ज़िप', {
ज़्लिब: { स्तर: 9 } // संपीड़न स्तर को उच्चतम पर सेट करें
})
संग्रह.पाइप (आउटपुट);
संग्रह.फ़ाइल (फ़ाइलपथ, { नाम: फ़ाइल })
पुरालेख.अंतिमीकरण()
}
फ़ंक्शन संपीड़ित करने के लिए फ़ाइल का फ़ाइल नाम लेता है और समान नाम के साथ एक आउटपुट फ़ाइल उत्पन्न करता है (केवल ज़िप फ़ाइल एक्सटेंशन को जोड़ने का अंतर है)।
फिर, फ़ंक्शन 9 (उच्चतम) पर सेट संपीड़न स्तर के साथ एक नया संग्रह बनाता है और इसका उपयोग करता है पाइप संग्रह की आउटपुट स्ट्रीम को आउटपुट फ़ाइल के इनपुट में स्थानांतरित करने का कार्य।
फ़ाइल फ़ंक्शन संग्रह में एक फ़ाइल जोड़ता है। यह फ़ाइल पथ को एक पैरामीटर और एक वैकल्पिक के रूप में स्वीकार करता है विकल्प पैरामीटर जहां आप संग्रह में फ़ाइल के गुणों को निर्दिष्ट कर सकते हैं।
नाम विकल्प संग्रह के भीतर फ़ाइल का नाम निर्दिष्ट करता है। यदि संग्रह में फ़ाइल जोड़ते समय विकल्प निर्दिष्ट नहीं किया जाता है, तो संग्रहकर्ता निर्देशिका संरचना को संरक्षित करते हुए फ़ाइल को उसके मूल पथ के आधार पर संग्रह में रखता है।
हालाँकि, जब यह स्पष्ट रूप से प्रदान किया जाता है, तो संग्रहकर्ता फ़ाइल को उसके मूल पथ के बिना संग्रह में जोड़ता है, जिससे संग्रह के भीतर कस्टम नामकरण और संगठन की अनुमति मिलती है।
फ़ोल्डरों से ज़िप पुरालेख बनाना
फ़ोल्डरों से ज़िप संग्रह बनाने की प्रक्रिया फ़ाइलों से बहुत अलग नहीं है। मुख्य अंतर आर्काइवर पैकेज का उपयोग है निर्देशिका के विपरीत कार्य करता है फ़ाइल पिछले समारोह में.
किसी फ़ोल्डर को ज़िप संग्रह में संपीड़ित करने के लिए फ़ंक्शन का कार्यान्वयन नीचे दिया गया है।
// फ़ोल्डर से ज़िप बनाएं
कॉन्स्ट createZipFromFolder = (फ़ोल्डर) => {
कॉन्स्ट फ़ोल्डरपथ = __dirname + '/' +फ़ोल्डर
कॉन्स्ट आउटपुट = fs.createWriteStream (फ़ोल्डरपाथ + '.ज़िप')कॉन्स्ट पुरालेख = संग्रहकर्ता('ज़िप', {
ज़्लिब: { स्तर: 9 } // संपीड़न स्तर को उच्चतम पर सेट करें
})
संग्रह.पाइप (आउटपुट)
संग्रह.निर्देशिका (फ़ोल्डरपथ, असत्य)
पुरालेख.अंतिमीकरण()
}
निर्देशिका फ़ंक्शन फ़ोल्डर पथ को अपने पहले तर्क के रूप में और ध्वज को दूसरे तर्क के रूप में लेता है। ध्वज संग्रह के भीतर फ़ोल्डर का स्थान निर्धारित करता है।
जब ध्वज को सेट किया जाता है असत्य, परिणामी संग्रह में फ़ोल्डर को छोड़कर केवल फ़ोल्डर की सामग्री शामिल होगी। लेकिन अगर झंडा सेट है सत्य, संग्रहकर्ता फ़ोल्डर को जेनरेट किए गए संग्रह में ही शामिल करेगा
यदि आप उस स्थान को दूषित होने से बचाना चाहते हैं जहां आप संपीड़ित संग्रह से फ़ाइलों के साथ अपना संग्रह निकाल रहे हैं, तो आपको इसे सेट करने के बारे में सोचना चाहिए झंडा का विकल्प सत्य. हालाँकि, आप इसे सेट कर सकते हैं असत्य, यदि यह आपके उद्देश्यों के लिए बेहतर अनुकूल है।
Node.js में फ़ाइलों को डीकंप्रेस कैसे करें
Node.js में ज़िप फ़ाइलों को निकालने की प्रक्रिया में कई दृष्टिकोण हैं और उपयोग के लिए कई लाइब्रेरी उपलब्ध हैं, लेकिन इस लेख में, अनजिपर पैकेज का उपयोग किया गया है।
अपने प्रोजेक्ट में अनजिपर पैकेज स्थापित करने के लिए अपने टर्मिनल में निम्नलिखित कमांड चलाएँ।
एनपीएम इंस्टाल अनजिपर--सेव
पैकेज स्थापित करने के बाद, इसे अपने कोड में आयात करें और नीचे दिए गए कोड में दिखाए गए ज़िप निष्कर्षण फ़ंक्शन को लागू करें:
कॉन्स्ट ज़िपर = ज़रूरत होना("जिपर खोलना")
// ज़िप फ़ाइल निकालने का कार्य
कॉन्स्ट एक्स्ट्रैक्टज़िप = async (फ़ाइल) => {
कॉन्स्ट फ़ाइलपथ = __dirname + '/' +फ़ाइल
कॉन्स्ट आउटपुटपाथ = __dirname + '/निकाला गया'
इंतजार fs.createReadStream (फ़ाइलपथ)
.पाइप (अनज़िपर. निकालना({ पथ: उत्पादन के पथ }))
।वादा करना()
}
एक्स्ट्रैक्टज़िप फ़ंक्शन एक अतुल्यकालिक फ़ंक्शन है जो ज़िप फ़ाइल की सामग्री को पढ़ने के लिए एक रीड स्ट्रीम बनाता है, और फ़ाइल को निर्दिष्ट आउटपुट पथ पर निकालता है (यह बनाता है) निकाले फ़ोल्डर यदि यह मौजूद नहीं है)।
डीकंप्रेसिंग या निष्कर्षण के मामले में, फ़ाइलों और फ़ोल्डरों के लिए अलग-अलग कार्यों को परिभाषित करने की कोई आवश्यकता नहीं है, क्योंकि ज़िप संग्रह एक फ़ाइल है, चाहे उसमें सामग्री कुछ भी हो।
आपके द्वारा अब तक बनाए गए फ़ंक्शन का परीक्षण करने के लिए, नीचे एक फ़ंक्शन है जिसे आप एप्लिकेशन में जोड़ सकते हैं:
(asyncसमारोह () {
कॉन्स्ट फ़ाइल = 'परीक्षण.पीडीएफ'
कॉन्स्ट फ़ोल्डर = 'test_folder'
कॉन्स्ट ज़िपफ़ाइल = 'test.pdf.zip'
createZipFromFile (फ़ाइल)
सांत्वना देना।लकड़ी का लट्ठा('फ़ाइल से ज़िप संग्रह सफलतापूर्वक बनाया गया')
createZipFromFolder (फ़ोल्डर)
सांत्वना देना।लकड़ी का लट्ठा('फ़ोल्डर से ज़िप संग्रह सफलतापूर्वक बनाया गया')
इंतजार एक्स्ट्रैक्टज़िप (ज़िपफ़ाइल)
सांत्वना देना।लकड़ी का लट्ठा('ज़िप संग्रह सफलतापूर्वक निकाला गया')
}) ()
पिछले सभी कार्य हैं जावास्क्रिप्ट तीर फ़ंक्शन, लेकिन उपरोक्त फ़ंक्शन अलग है क्योंकि यह एक है तुरंत फ़ंक्शन अभिव्यक्ति लागू की गई वह कोड को इनकैप्सुलेट करता है इसके अंदर और इसे तुरंत क्रियान्वित करता है।
कुशल अनुप्रयोगों के निर्माण में फ़ाइल संपीड़न फायदेमंद है
उपयोगकर्ताओं को बेहतर सेवा देने और सुखद उपयोगकर्ता अनुभव बनाए रखने के लिए अपने एप्लिकेशन को यथासंभव कुशल बनाना हमेशा एक लक्ष्य होना चाहिए।
ऐसे परिदृश्यों में जहां आपको अपने एप्लिकेशन के भीतर बहुत सारी फ़ाइलों को स्थानांतरित करने की आवश्यकता होती है, ट्रांसमिट करते समय फ़ाइलों को संपीड़ित और डीकंप्रेस करने पर विचार करें। अधिकांश आधुनिक प्रोग्रामिंग भाषाएँ फ़ाइलों को कुशलतापूर्वक संपीड़ित और डीकंप्रेस करने में सहायता प्रदान करती हैं।