להורדת קבצים לאחסון מקומי במקום לשמור אותם באחסון ענן יש מספר יתרונות. אלה כוללים גישה קלה יותר, גישה ללא חיבור לאינטרנט ובעלות מלאה על הנתונים שלך.
אתה יכול להוריד קבצים בודדים וקבצים מרובים באמצעות מודולי Node.js מובנים. אתה יכול גם להשתמש בספריית צד שלישי במקום זאת, כדי להשיג את אותן התוצאות.
הורדת קבצים ללא ספריית צד שלישי
כדי להוריד קובץ באמצעות Node.js, ללא סיוע של חבילות של צד שלישי, תזדקק לשלושה מודולי ליבה של Node.js: fs, https, ו נָתִיב.
ה fs המודול תומך במשימות קבצים רבות כולל קריאה, יצירה, עדכון, הסרה ושינוי שם. ה https מודול יוצר שרת אינטרנט כדי לטפל בבקשות ולספק תגובות. ה נָתִיב מודול מספק דרך ליצור אינטראקציה עם נתיבי ספריות וקבצים.
באמצעות מודולים אלה, תוכל לשלוח בקשת HTTP GET לגשת למשאב קבצים משרת אינטרנט ולאחר מכן ליצור עותק של המשאב במערכת המקומית שלך.
כדי להתחיל, ייבא את המודולים הדרושים:
const https = לִדרוֹשׁ('https');
const fs = לִדרוֹשׁ('fs');
const נתיב = לִדרוֹשׁ('נָתִיב');
תצטרך להשתמש בשם הקובץ מכתובת האתר כשם ברירת מחדל טוב כדי לשמור אותו. אתה יכול להשתמש במודול הנתיב .basename() שיטה להשגת שם קובץ מ-URL שלו. שיטה זו לוקחת ארגומנט נתיב ומחזירה את החלק האחרון של נתיב.
לדוגמה:
const שם קובץ = path.basename (כתובת אתר);
לאחר מכן, בקש את הקובץ מהשרת על ידי הפעלת ה- https.get() שיטה. שיטה זו לוקחת את כתובת האתר כארגומנט הראשון ואת פונקציית התקשרות חוזרת עבור התגובה כארגומנט השני
תעביר את ה כתובת אתר משתנה בתור הארגומנט הראשון ולאחר מכן פונקציית callback לעיבוד כאשר שיטה זו מקבלת זרם תגובה:
https.get (כתובת אתר, (res) => {
})
בפונקציית ההתקשרות חזרה, אתה יכול להשתמש ב- fs.createWriteStream() שיטה ליצירת זרם חדש לכתיבה, תוך העברת ה שם קובץ משתנה כארגומנט.
לדוגמה:
const fileStream = fs.createWriteStream (שם קובץ);
מילואים.צינור(fileStream);
ה createWriteStream() השיטה מקלה על תהליך כתיבת הנתונים לקובץ, במיוחד כאשר אתה מטפל בנתחים גדולים של נתונים.
ה צינור() לאחר מכן, השיטה שולחת את זרם נתוני התגובה של GET אל fileStream לְהִתְנַגֵד.
כדי לרשום הודעה למסוף לאחר שהסקריפט סיים להוריד את הקובץ, צרף א .עַל() פולט אירועים ל fileStream מִשְׁתַנֶה:
fileStream.on('סיים', () => {
fileStream.סגור();
לְנַחֵם.עֵץ('ההורדה הסתיימה');
});
אובייקט fileStream פולט א סיים אירוע כאשר הוא כתב את כל הנתונים לקובץ. תפוס את זה דרך .עַל() שיטה ולספק פונקציית התקשרות חוזרת לסגירת fileStream והתחבר הודעה למסוף.
לביצוע טוב יותר ו שימוש חוזר יעיל בסקריפט, עטוף את הקוד הזה בפונקציה שלוקחת את כתובת האתר כארגומנט שלה:
פוּנקצִיָההורד קובץ(כתובת אתר) {
const שם קובץ = path.basename (כתובת אתר);https.get (כתובת אתר, (res) => {
const fileStream = fs.createWriteStream (שם קובץ);
מילואים.צינור(fileStream);
fileStream.on('סיים', () => {
fileStream.סגור();
לְנַחֵם.עֵץ('ההורדה הסתיימה')
});
})
}
כדי להפעיל את הפונקציה, קרא לה והעביר את כתובת האתר של הקובץ שברצונך להוריד:
הורד קובץ([כתובת אתר של קובץ]);
כדי להפעיל את הסקריפט, פתח את הטרמינל שלך והזן צוֹמֶת ואחריו שם קובץ ה-JavaScript:
צוֹמֶת[שם סקריפט]
סקריפט זה יוריד את כתובת האתר של הקובץ שהעברת ל- הורד קובץ() פונקציה ושמור אותה בספריית העבודה שלך.
טיפול בשגיאות בעת הורדת קבצים
ב-Node.js, שגיאות ספציפיות כמו כתיבה לזרם, חיבור שירות לקוי או בעיות בקובץ עצמו עלולות להתרחש בעת הורדת קבצים. זה חיוני לרשום הודעות שגיאה כאשר שגיאות אלו מתרחשות כדי להיות מסוגל להתמודד עם הבעיה.
נסה/Catch Block
בלוק try-catch הוא מבנה תכנות המאפשר לך לטפל בשגיאות וחריגים פוטנציאליים בקוד שלך.
בלוקי הנסיון-לתפוס מרכיבים את בלוק הנסי...לתפוס. הקוד של בלוק ה-try רץ ראשון, והקוד של בלוק ה-catch פועל אם בלוק ה-try זורק חריג.
לְנַסוֹת {
הורד קובץ([כתובת אתר של קובץ]);
} לתפוס (שגיאה) {
לְנַחֵם.log (שגיאה);
}
השתמש בחסום נסה/תפוס כדי להבטיח שאתה יכול לתפוס שגיאות הקשורות להורדה. לאחר מכן תוכל לטפל בכל שגיאה לפי הצורך, כגון רישום שלה לקונסולה או ניסיון ההורדה מחדש.
קוד סטטוס תגובת HTTP
קודי סטטוס עבור תגובות HTTP מראים אם בקשת HTTP מסוימת בוצעה בהצלחה.
לדוגמה:
https.get (כתובת אתר, (res) => {
const code = res.statusCode();
לְנַחֵם.log (קוד)
const fileStream = fs.createWriteStream (שם קובץ);
});
אם הבקשה מחזירה קוד סטטוס מחוץ לטווח ההצלחה, 200-299, הייתה בעיה עם הבקשה. בדוק את קוד מצב ה-HTTP, לאחר מכן חפש את המשמעות של קוד המצב לטפל בשגיאה לפי הצורך.
הורדת קבצים מרובים
אתה יכול להוריד מספר קבצים בו זמנית על ידי העברת כתובות ה-URL של הקבצים כארגומנטים בעת הפעלה צומת [שם סקריפט]. כדי לבצע משימה זו, עליך לשנות חלקים מסוימים בסקריפט שלך.
ב-JavaScript, ארגומנטים עברו לצד ה- צוֹמֶת הפקודה זמינה ב-process.argv, מאפיין של האובייקט הגלובלי Node.js. מאפיין זה מחזיר מערך של ארגומנטים של שורת הפקודה. האלמנט הראשון במערך הזה צריך להיות צוֹמֶת, הפקודה בפועל שאתה מפעיל. השני יהיה שם קובץ הסקריפט, ואז כל ארגומנט הבא צריך להיות כתובת URL.
כדי להוריד קבצים מרובים בבת אחת, שמור את המערך מ process.argv במשתנה. לאחר מכן הפעל את שיטת slice() כדי להסיר את שני האלמנטים הראשונים, שאינם כתובות אתרים:
const args = process.argv;
const urls = args.slice(2);
ה פרוסה() השיטה יוצרת מערך חדש מאלמנטים נבחרים במערך. שיטה זו בוחרת מהתחלה שצוינה לסוף שצוין (לא כולל).
במקרה זה, העברת ערך של 2 מסירה את ה- צוֹמֶת שם הפקודה ושם קובץ הסקריפט שלך.
סוף כל סוף, באמצעות שיטת המפה של JavaScript, להעביר כל אלמנט ב- כתובות אתרים מערך ל הורד קובץ():
urls.map(כתובת אתר =>{
downloadFile (כתובת אתר)
});
כדי להפעיל את הקוד, הזן את צוֹמֶת הפקודה יחד עם השם של קובץ ה-JavaScript שלך וכתובות האתרים שברצונך להוריד:
צוֹמֶת[שם סקריפט]url1url2כתובת אתר 3
שימוש בספריית צד שלישי
אתה יכול גם להוריד קבצים באמצעות ספריית צד שלישי כמו npm הורד חֲבִילָה.
בתוך ספריית הסקריפט שלך, הפעל את הפקודה npm הבאה כדי להתקין את הורד חֲבִילָה:
npm להתקין הורד
דרוש את החבילה שהורדת בסקריפט שלך, ולאחר מכן שמור את הארגומנטים של שורת הפקודה במערך:
const הורדה = לִדרוֹשׁ('הורד');
const args = process.argv;
const urls = args.slice(2);
כעת אתה יכול להשתמש ב- הורד ספריה להורדת קבצים. אתה יכול לעשות זאת בכמה דרכים בהתאם למטרה הספציפית שלך.
לדוגמה:
אסינכרוןפוּנקצִיָההורד קובץ(כתובות אתרים){
לְהַמתִיןהַבטָחָה.all (urls.map((כתובת אתר) => הורדה (כתובת אתר, "קבצים")))
};
downloadFile (כתובות אתרים);
להכריז על הורד קובץ מתפקד כ אסינכרון, וליצור א הַבטָחָה לחכות עד שהמשימה הספציפית תושלם עם ה לְהַמתִין מילת מפתח. מפה את כתובות אתרים מערך ל הורד פונקציה והעברת שם של תיקיה מקומית—"קבצים", במקרה זה - לאחסון הקבצים.
הורדת קבצים למערכת הקבצים המקומית
הפונקציות המובנות של Node, כמו fs ו-https, מקלות על כתיבת הורדת קבצים. כדי להקל עוד יותר, אתה יכול להשתמש במודול של צד שלישי כמו הורדה.
שתי השיטות מאפשרות להוריד קבצים משרת מרוחק ולשמור אותם במערכת הקבצים המקומית. עליך לבחור את השיטה הטובה ביותר עבור הצרכים שלך ולהשתמש בה ביישום Node.js הבא שלך.