השתמש בחבילות Archiver ו-Unzipper כדי לדחוס ולשחרר קבצים ב-Node.js.
אחסון קבצים בארכיון הוא פעילות יומיומית בעולם המודרני מכיוון שכולם יכולים להעיד על היתרונות שמציעים דחיסת קבצים או תיקיות לפורמטים קטנים יותר וניידים.
פורמט ה-ZIP הוא אחד מפורמטי הארכיון הפופולריים ביותר בשימוש בעולם המחשוב, והוא מומלץ מאוד בחירה לכל מי שצריך להמיר קבצים גולמיים לארכיונים לאחסון טוב יותר, העברה יעילה או כל דבר אחר סיבה.
אז למה כדאי לך לשקול דחיסה של הקבצים שלך, ואיך אתה יכול לדחוס קבצים ל-ZIP ולחלץ אותם בחזרה למצבם המקורי באופן תוכניתי באמצעות Node.js?
למה לדחוס קבצים?
הרבה פעמים, קבצים ותיקיות הופכים גדולים מאוד, ושיתוף או העברתם הופכים לבעיה מכיוון שהם או גדול מדי לאחסון בכונן אחסון בקיבולת מסוימת, או שלוקח להם זמן רב מדי להעלות לענן אִחסוּן.
בתרחישים כמו זה ורבים נוספים, עליך לדחוס קבצים או תיקיות כאלה לגודל קטן בהרבה. מלבד העברת קבצים קלה יותר, סיבות נוספות מדוע כדאי לשקול דחיסת קבצים כוללות:
- אחסון יעיל
- מבנה וארגון קבצים טובים יותר
- אבטחה (הצפנת קבצים והגנה באמצעות סיסמה)
- שלמות הקובץ
- ניהול גרסאות של קבצים
מהן חבילות ה-Node.js Archiver ו-Unzipper?
ה ארכיון התיעוד הרשמי של החבילה מתאר את החבילה כ"ממשק סטרימינג ליצירת ארכיון". זה מרמז שחבילת 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 התקנת ארכיון --שמור בטרמינל שלך כדי להתקין אותו. כאשר התקנת החבילה הושלמה, צור קובץ חדש בספריית הפרויקט ושם לו לפי העדפתך, למשל. app.js אוֹ archiver.js.
ה fs מודול מטפל בפעולות קבצים, בעוד חבילת Archiver תטפל בדחיסה של קבצים ותיקיות לארכיוני ZIP, לפיכך, הסקריפט דורש את שני המודולים.
יצירת ארכיוני ZIP מקבצים
הקוד הבא הוא יישום של פונקציה שמקבלת קובץ כארגומנט ויוצרת גרסת ZIP דחוסה של הקובץ.
const ארכיון = לִדרוֹשׁ('ארכיון')
const fs = לִדרוֹשׁ('fs')// צור ZIP מקובץ
const createZipFromFile = (קוֹבֶץ) => {
const filePath = __dirname + '/' + קובץ
const output = fs.createWriteStream (filePath + '.רוכסן')
const ארכיון = ארכיון('רוכסן', {
zlib: { רָמָה: 9 } // הגדר את רמת הדחיסה לגבוהה ביותר
})
archive.pipe (פלט);
archive.file (filePath, { שֵׁם:קובץ })
archive.finalize()
}
הפונקציה לוקחת את שם הקובץ של הקובץ כדי לדחוס ויוצרת קובץ פלט בשם דומה (כשההבחנה היחידה היא הוספת סיומת הקובץ ZIP).
לאחר מכן, הפונקציה יוצרת ארכיון חדש עם רמת הדחיסה מוגדרת ל-9 (הגבוהה ביותר) ומשתמשת ב- צינור פונקציה להעביר את זרמי הפלט של הארכיון לקלט של קובץ הפלט.
ה קוֹבֶץ הפונקציה מוסיפה קובץ לארכיון. הוא מקבל את נתיב הקובץ כפרמטר ואופציונלי אפשרויות פרמטר שבו אתה יכול לציין את המאפיינים של הקובץ בארכיון.
ה שֵׁם אפשרות מציינת את שם הקובץ בתוך הארכיון. אם האפשרות לא צוינה בעת הוספת קובץ לארכיון, Archiver ממקם את הקובץ בתוך הארכיון בהתבסס על הנתיב המקורי שלו, תוך שמירה על מבנה הספריות.
עם זאת, כאשר הוא מסופק במפורש, Archiver מוסיף את הקובץ לארכיון ללא הנתיב המקורי שלו, ומאפשר מתן שמות וארגון מותאמים אישית בתוך הארכיון.
יצירת ארכיוני ZIP מתיקיות
תהליך יצירת ארכיוני ZIP מתיקיות אינו שונה מאוד מזה של קבצים. ההבדל העיקרי הוא השימוש בחבילת Archiver מַדרִיך לתפקד בניגוד ל קוֹבֶץ בפונקציה הקודמת.
להלן יישום של פונקציה לדחיסת תיקיה לארכיון ZIP.
// צור ZIP מתיקיה
const createZipFromFolder = (תיקייה) => {
const folderPath = __שם שם + '/' + תיקיה
const output = fs.createWriteStream (folderPath + '.רוכסן')const ארכיון = ארכיון('רוכסן', {
zlib: { רָמָה: 9 } // הגדר את רמת הדחיסה לגבוהה ביותר
})
archive.pipe (פלט)
archive.directory (folderPath, שֶׁקֶר)
archive.finalize()
}
ה מַדרִיך הפונקציה לוקחת את נתיב התיקיה כארגומנט הראשון שלה ודגל כארגומנט השני שלה. הדגל קובע את מיקום התיקיה בתוך הארכיון.
כאשר הדגל מוגדר ל שֶׁקֶר, הארכיון שיתקבל יכיל רק את תוכן התיקיה, למעט התיקיה עצמה. אבל אם הדגל מוגדר ל נָכוֹן, Archiver יכלול את התיקיה עצמה בארכיון שנוצר
אם אתה רוצה להימנע מלזהם את המיקום שבו אתה מחלץ את הארכיון שלך עם קבצים מהארכיון הדחוס, עליך לחשוב על הגדרת דֶגֶל אפשרות ל נָכוֹן. עם זאת, אתה יכול להגדיר זאת ל שֶׁקֶר, אם זה מתאים יותר למטרות שלך.
כיצד לפרוק קבצים ב-Node.js
לתהליך חילוץ קבצי ZIP ב-Node.js יש מספר גישות ומספר ספריות זמינות לשימוש, אך במאמר זה נעשה שימוש בחבילת Unzipper.
הפעל את הפקודה הבאה בטרמינל שלך כדי להתקין את חבילת Unzipper בפרויקט שלך.
npm התקנת רוכסן --שמור
לאחר התקנת החבילה, ייבא אותה לקוד שלך והטמיע את פונקציית חילוץ ה-ZIP המוצגת בקוד שלהלן:
const פותח רוכסן = לִדרוֹשׁ("פתח רוכסן")
//פונקציה לחילוץ קובץ ZIP
const extractZip = אסינכרון (קובץ) => {
const filePath = __dirname + '/' + קובץ
const outputPath = __dirname + '/מחולץ'
לְהַמתִין fs.createReadStream (filePath)
.pipe (פותח רוכסן. לחלץ({ נָתִיב: outputPath }))
.הַבטָחָה()
}
ה extractZip function היא פונקציה אסינכרונית שיוצרת זרם קריאה לקריאת התוכן של קובץ ה-ZIP, ומחלצת את הקובץ לנתיב הפלט שצוין (הוא יוצר את מחולץ תיקייה אם היא לא קיימת).
במקרה של פירוק או חילוץ, אין צורך להגדיר פונקציות שונות עבור קבצים ותיקיות, שכן ארכיון ZIP הוא קובץ ללא קשר לתוכן שבו.
להלן פונקציה שתוכל להוסיף לאפליקציה, כדי לבדוק את הפונקציות שיצרת עד כה:
(אסינכרוןפוּנקצִיָה () {
const קובץ = 'test.pdf'
const תיקיה = 'תיקיית_בדיקה'
const zipFile = 'test.pdf.zip'
createZipFromFile (קובץ)
לְנַחֵם.עֵץ('ארכיון ZIP נוצר בהצלחה מקובץ')
createZipFromFolder (תיקיה)
לְנַחֵם.עֵץ('ארכיון ZIP נוצר בהצלחה מתיקיה')
לְהַמתִין extractZip (zipFile)
לְנַחֵם.עֵץ('ארכיון ה-ZIP חולץ בהצלחה')
}) ()
כל הפונקציות הקודמות הן פונקציות חץ JavaScript, אבל הפונקציה לעיל שונה מכיוון שהיא an ביטוי פונקציה שהופעל מיד זֶה מקפל את הקוד בתוכו ומבצע אותו מיד.
דחיסת קבצים מועילה בבניית יישומים יעילים
זה תמיד צריך להיות מטרה להפוך את האפליקציות שלך ליעילות ככל האפשר כדי לשרת את המשתמשים טוב יותר ולשמור על חווית משתמש מהנה.
בתרחישים שבהם אתה צריך להעביר הרבה קבצים בתוך היישום שלך, שקול דחיסה ושחרור של הקבצים תוך כדי שידור. רוב שפות התכנות המודרניות מספקות תמיכה לדחיסת ופירוק קבצים ביעילות.