Χρησιμοποιήστε τα πακέτα Archiver και Unzipper για συμπίεση και αποσυμπίεση αρχείων στο Node.js.
Η αρχειοθέτηση αρχείων είναι μια καθημερινή δραστηριότητα στον σύγχρονο κόσμο, καθώς ο καθένας μπορεί να επιβεβαιώσει τα πλεονεκτήματα που προσφέρει η συμπίεση αρχείων ή φακέλων σε μικρότερες, φορητές μορφές.
Η μορφή ZIP είναι μια από τις πιο δημοφιλείς μορφές αρχειοθέτησης που χρησιμοποιούνται στον κόσμο των υπολογιστών και συνιστάται ιδιαίτερα επιλογή για οποιονδήποτε χρειάζεται να μετατρέψει ακατέργαστα αρχεία σε αρχεία για καλύτερη αποθήκευση, αποτελεσματική μεταφορά ή οποιοδήποτε άλλο λόγος.
Λοιπόν, γιατί θα πρέπει να εξετάσετε το ενδεχόμενο συμπίεσης των αρχείων σας και πώς μπορείτε να συμπιέσετε αρχεία σε ZIP και να τα εξαγάγετε πίσω στην αρχική τους κατάσταση μέσω προγραμματισμού χρησιμοποιώντας το Node.js;
Γιατί να συμπιέσω αρχεία;
Πολλές φορές, τα αρχεία και οι φάκελοι γίνονται πολύ μεγάλα και η κοινή χρήση ή η μεταφορά τους γίνεται πρόβλημα επειδή είναι είτε είναι πολύ μεγάλο για αποθήκευση σε μονάδα αποθήκευσης συγκεκριμένης χωρητικότητας, είτε καθυστερεί να μεταφορτωθούν στο cloud αποθήκευση.
Σε σενάρια όπως αυτό και πολλά άλλα, θα πρέπει να συμπιέσετε τέτοια αρχεία ή φακέλους σε πολύ μικρότερο μέγεθος. Εκτός από την ευκολότερη μεταφορά αρχείων, άλλοι λόγοι για τους οποίους μπορείτε να εξετάσετε τη συμπίεση των αρχείων σας περιλαμβάνουν:
- Αποτελεσματική αποθήκευση
- Καλύτερη δομή και οργάνωση αρχείων
- Ασφάλεια (κρυπτογράφηση αρχείων και προστασία με κωδικό πρόσβασης)
- Ακεραιότητα αρχείου
- Εκδόσεις αρχείων
Τι είναι τα πακέτα Archiver και Unzipper Node.js;
ο Αρχειοθέτη Η επίσημη τεκμηρίωση του πακέτου περιγράφει το πακέτο ως "μια διεπαφή ροής για τη δημιουργία αρχείων". Αυτό σημαίνει ότι το πακέτο Archiver παρέχει μια βιβλιοθήκη συναρτήσεων που αξιοποιούν τις ροές Node.js για τη δημιουργία συμπιεσμένων αρχείων αρχείων.
Το πακέτο Archiver υποστηρίζει πολλές μορφές αρχειοθέτησης από προεπιλογή, συμπεριλαμβανομένων των ZIP, GZIP και TAR. Το πακέτο σάς επιτρέπει επίσης να δημιουργείτε αρχεία από αρχεία και καταλόγους και να χωρίζετε μεγάλα αρχεία σε μικρότερα μέρη (αρχεία πολλών τόμων). Σας επιτρέπει επίσης να αποκλείετε ή να φιλτράρετε αρχεία κατά τη συμπίεση.
ο Ξεφερμουάρ Το πακέτο είναι ένα πολύ αποτελεσματικό πακέτο για την εξαγωγή αρχείων ZIP στο Node.js. Το πακέτο παρέχει ένα εύχρηστο API που επιτρέπει στους προγραμματιστές να εξάγουν αρχεία ZIP με λίγες μόνο γραμμές κώδικα.
Τα πακέτα Archiver και Unzipper είναι οι επιλογές για αυτό το σεμινάριο επειδή ενσωματώνονται άψογα με το Node.js fs μονάδα, εξασφαλίζοντας ομαλή συμβατότητα και απλότητα.
Τρόπος συμπίεσης αρχείων σε μορφή ZIP στο Node.js
Συμπίεση αρχείων σε μορφή ZIP στο Node.js είναι εύκολη όπως και σε οποιαδήποτε άλλη γλώσσα, χάρη στο πακέτο Archiver. Για να δημιουργήσετε αρχεία ZIP στο Node.js ενώ ακολουθείτε αυτήν την ενότητα, χρειάζεστε ένα περιβάλλον ανάπτυξης Node.js να έχει ρυθμιστεί στον υπολογιστή σας.
Θα δημιουργήσετε ένα απλό σενάριο Node.js για να συμπιέσετε ένα αρχείο και έναν φάκελο σε μορφή ZIP. Δημιουργήστε ένα νέο έργο Node στον υπολογιστή σας εκτελώντας τις ακόλουθες εντολές:
mkdir node-zip-archiver
CD node-zip-archiver
npm init -y
Στη συνέχεια, πρέπει να εγκαταστήσετε το πακέτο Archiver στο έργο σας. Τρέξιμο npm εγκατάσταση αρχειοθέτησης --save στο τερματικό σας για να το εγκαταστήσετε. Όταν ολοκληρωθεί η εγκατάσταση του πακέτου, δημιουργήστε ένα νέο αρχείο στον κατάλογο του έργου και ονομάστε το σύμφωνα με τις προτιμήσεις σας, π.χ. app.js ή archiver.js.
ο fs Η ενότητα χειρίζεται λειτουργίες αρχείων, ενώ το πακέτο Archiver θα χειριστεί τη συμπίεση αρχείων και φακέλων σε αρχεία ZIP, επομένως, το σενάριο απαιτεί και τις δύο ενότητες.
Δημιουργία αρχείων ZIP από αρχεία
Ο παρακάτω κώδικας είναι η υλοποίηση μιας συνάρτησης που δέχεται ένα αρχείο ως όρισμα και δημιουργεί μια συμπιεσμένη έκδοση ZIP του αρχείου.
συνθ αρχειοθέτης = απαιτώ("αρχειοθέτης")
συνθ fs = απαιτώ('fs')// δημιουργία ZIP από το αρχείο
συνθ createZipFromFile = (αρχείο) => {
συνθ filePath = __dirname + '/' + αρχείο
συνθ output = fs.createWriteStream (filePath + '.φερμουάρ')
συνθ αρχείο = αρχειοθέτης('φερμουάρ', {
zlib: { επίπεδο: 9 } // ορίστε το επίπεδο συμπίεσης στο υψηλότερο
})
archive.pipe (έξοδος);
archive.file (filePath, { όνομα: αρχείο })
archive.finalize()
}
Η συνάρτηση παίρνει το όνομα αρχείου του αρχείου για συμπίεση και δημιουργεί ένα αρχείο εξόδου με παρόμοιο όνομα (με μόνη διάκριση την προσθήκη της επέκτασης αρχείου ZIP).
Στη συνέχεια, η συνάρτηση δημιουργεί ένα νέο αρχείο με το επίπεδο συμπίεσης ορισμένο στο 9 (υψηλότερο) και χρησιμοποιεί το σωλήνας λειτουργία για τη μεταφορά των ροών εξόδου του αρχείου στην είσοδο του αρχείου εξόδου.
ο αρχείο συνάρτηση προσθέτει ένα αρχείο στο αρχείο. Αποδέχεται τη διαδρομή του αρχείου ως παράμετρο και ως προαιρετική επιλογές παράμετρος όπου μπορείτε να καθορίσετε τις ιδιότητες του αρχείου στο αρχείο.
ο όνομα Η επιλογή ορίζει το όνομα του αρχείου μέσα στο αρχείο. Εάν η επιλογή δεν καθορίζεται κατά την προσθήκη ενός αρχείου στο αρχείο, το Archiver τοποθετεί το αρχείο μέσα στο αρχείο με βάση την αρχική του διαδρομή, διατηρώντας τη δομή του καταλόγου.
Ωστόσο, όταν παρέχεται ρητά, το Archiver προσθέτει το αρχείο στο αρχείο χωρίς την αρχική του διαδρομή, επιτρέποντας προσαρμοσμένη ονομασία και οργάνωση εντός του αρχείου.
Δημιουργία αρχείων ZIP από φακέλους
Η διαδικασία δημιουργίας αρχείων ZIP από φακέλους δεν διαφέρει πολύ από αυτή των αρχείων. Η κύρια διαφορά είναι η χρήση του πακέτου Archiver Ευρετήριο λειτουργούν σε αντίθεση με αρχείο στην προηγούμενη λειτουργία.
Παρακάτω είναι η υλοποίηση μιας συνάρτησης για τη συμπίεση ενός φακέλου σε ένα αρχείο ZIP.
// δημιουργία ZIP από το φάκελο
συνθ createZipFromFolder = (ντοσιέ) => {
συνθ folderPath = __dirname + '/' + φάκελος
συνθ output = fs.createWriteStream (folderPath + '.φερμουάρ')συνθ αρχείο = αρχειοθέτης('φερμουάρ', {
zlib: { επίπεδο: 9 } // ορίστε το επίπεδο συμπίεσης στο υψηλότερο
})
archive.pipe (έξοδος)
archive.directory (folderPath, ψευδής)
archive.finalize()
}
ο Ευρετήριο Η συνάρτηση παίρνει τη διαδρομή φακέλου ως πρώτο όρισμα και μια σημαία ως δεύτερο όρισμα. Η σημαία καθορίζει την τοποθέτηση του φακέλου μέσα στο αρχείο.
Όταν η σημαία έχει οριστεί σε ψευδής, το αρχείο που προκύπτει θα περιέχει μόνο τα περιεχόμενα του φακέλου, εξαιρουμένου του ίδιου του φακέλου. Αλλά αν η σημαία έχει οριστεί σε αληθής, Το Archiver θα συμπεριλάβει τον ίδιο τον φάκελο στο αρχείο που δημιουργήθηκε
Εάν θέλετε να αποφύγετε τη μόλυνση της τοποθεσίας όπου εξάγετε το αρχείο σας με αρχεία από το συμπιεσμένο αρχείο, θα πρέπει να σκεφτείτε να ρυθμίσετε την σημαία επιλογή να αληθής. Ωστόσο, μπορείτε να το ρυθμίσετε σε ψευδής, εάν ταιριάζει καλύτερα στους σκοπούς σας.
Πώς να αποσυμπιέσετε αρχεία στο Node.js
Η διαδικασία εξαγωγής αρχείων ZIP στο Node.js έχει πολλαπλές προσεγγίσεις και αρκετές βιβλιοθήκες είναι διαθέσιμες για χρήση, αλλά σε αυτό το άρθρο χρησιμοποιείται το πακέτο Unzipper.
Εκτελέστε την ακόλουθη εντολή στο τερματικό σας για να εγκαταστήσετε το πακέτο Unzipper στο έργο σας.
npm εγκατάσταση unzipper --save
Αφού εγκαταστήσετε το πακέτο, εισαγάγετε το στον κώδικά σας και εφαρμόστε τη λειτουργία εξαγωγής ZIP που φαίνεται στον παρακάτω κώδικα:
συνθ ξεφερμουάρ = απαιτώ("ξεκολλώ το φερμουάρ")
//λειτουργία για εξαγωγή αρχείου ZIP
συνθ extractZip = ασυγχρονισμός (αρχείο) => {
συνθ filePath = __dirname + '/' + αρχείο
συνθ outputPath = __dirname + '/εξάγονται'
αναμένω fs.createReadStream (FilePath)
.σωλήνας (ξεκολλ. Εκχύλισμα({ μονοπάτι: outputPath }))
.υπόσχεση()
}
ο extractZip Η συνάρτηση είναι μια ασύγχρονη συνάρτηση που δημιουργεί μια ροή ανάγνωσης για την ανάγνωση του περιεχομένου του αρχείου ZIP και εξάγει το αρχείο στην καθορισμένη διαδρομή εξόδου (δημιουργεί το εξάγονται φάκελο αν δεν υπάρχει).
Σε περίπτωση αποσυμπίεσης ή εξαγωγής, δεν χρειάζεται να ορίσετε διαφορετικές λειτουργίες για αρχεία και φακέλους, καθώς ένα αρχείο ZIP είναι ένα αρχείο ανεξάρτητα από το περιεχόμενο σε αυτό.
Ακολουθεί μια λειτουργία που μπορείτε να προσθέσετε στην εφαρμογή, για να δοκιμάσετε τις λειτουργίες που έχετε δημιουργήσει μέχρι τώρα:
(ασυγχρονισμόςλειτουργία () {
συνθ αρχείο = 'test.pdf'
συνθ φάκελος = "test_folder"
συνθ zipFile = 'test.pdf.zip'
createZipFromFile (αρχείο)
κονσόλα.κούτσουρο("Το αρχείο ZIP δημιουργήθηκε με επιτυχία από αρχείο")
createZipFromFolder (φάκελος)
κονσόλα.κούτσουρο("Το αρχείο ZIP δημιουργήθηκε με επιτυχία από το φάκελο")
αναμένω extractZip (zipFile)
κονσόλα.κούτσουρο("Το αρχείο zip εξήχθη με επιτυχία")
}) ()
Όλες οι προηγούμενες λειτουργίες είναι Λειτουργίες βέλους JavaScript, αλλά η παραπάνω συνάρτηση είναι διαφορετική γιατί είναι ένα Έκφραση συνάρτησης που επικαλείται αμέσως ότι ενσωματώνει τον κώδικα μέσα σε αυτό και το εκτελεί αμέσως.
Η συμπίεση αρχείων είναι ευεργετική για τη δημιουργία αποτελεσματικών εφαρμογών
Θα πρέπει πάντα να είναι στόχος να κάνετε τις εφαρμογές σας όσο πιο αποτελεσματικές μπορούν να είναι, προκειμένου να εξυπηρετούν καλύτερα τους χρήστες και να διατηρούν μια ευχάριστη εμπειρία χρήστη.
Σε σενάρια όπου χρειάζεται να μεταφέρετε πολλά αρχεία εντός της εφαρμογής σας, σκεφτείτε να συμπιέσετε και να αποσυμπιέσετε τα αρχεία κατά τη μετάδοση. Οι περισσότερες σύγχρονες γλώσσες προγραμματισμού παρέχουν υποστήριξη για αποτελεσματική συμπίεση και αποσυμπίεση αρχείων.