Att ladda ner filer till lokal lagring istället för att hålla dem i molnlagring har flera fördelar. Dessa inkluderar enklare åtkomst, åtkomst utan internetanslutning och fullständigt ägande av din data.
Du kan ladda ner enstaka och flera filer med inbyggda Node.js-moduler. Du kan också använda ett tredjepartsbibliotek istället för att uppnå samma resultat.
Ladda ner filer utan ett bibliotek från tredje part
För att ladda ner en fil med Node.js, utan hjälp av tredjepartspaket, behöver du tre kärnmoduler för Node.js: fs, https, och väg.
De fs modulen stöder många filuppgifter inklusive läsa, skapa, uppdatera, ta bort och byta namn. De https modulen skapar en webbserver för att hantera förfrågningar och leverera svar. De väg modulen ger ett sätt att interagera med katalog- och filsökvägar.
Med hjälp av dessa moduler kan du skicka en HTTP GET-förfrågan för att komma åt en filresurs från en webbserver och sedan göra en kopia av resursen i ditt lokala system.
För att börja, importera de nödvändiga modulerna:
konst https = behöva('https');
konst fs = behöva('fs');
konst väg = behöva('väg');
Du måste använda filnamnet från URL: en som ett bra standardnamn för att spara det. Du kan använda sökvägsmodulens .basename() metod för att hämta en fils namn från dess URL. Denna metod tar ett sökvägsargument och returnerar den sista delen av en sökväg.
Till exempel:
konst filnamn = sökväg.basnamn (url);
Begär sedan filen från servern genom att anropa https.get() metod. Denna metod tar URL: en som det första argumentet och en callback-funktion för svaret som det andra argumentet
Skicka url variabel som det första argumentet och sedan en callback-funktion för bearbetning när denna metod tar emot en svarsström:
https.get (url, (res) => {
})
I återuppringningsfunktionen kan du använda fs.createWriteStream() metod för att skapa en ny skrivbar ström genom att passera filnamn variabel som argument.
Till exempel:
konst fileStream = fs.createWriteStream (filnamn);
res.rör(filström);
De createWriteStream() metoden underlättar processen att skriva data till en fil, särskilt när du hanterar stora databitar.
De rör() metoden skickar sedan GET-svarsdataströmmen till filström objekt.
För att logga ett meddelande till konsolen efter att skriptet har laddat ned filen, bifoga en .på() händelsesändare till filström variabel:
fileStream.on('Avsluta', () => {
filström.stänga();
trösta.logga('Nedladdningen är klar');
});
FileStream-objektet avger en Avsluta händelse när den har skrivit all data till filen. Fånga detta via .på() metod och tillhandahålla en återuppringningsfunktion för att stänga filström och logga ett meddelande till konsolen.
För bättre utförande och effektiv återanvändbarhet av skript, slå in den här koden i en funktion som tar URL: en som argument:
fungeranedladdning fil(url) {
konst filnamn = sökväg.basnamn (url);https.get (url, (res) => {
konst fileStream = fs.createWriteStream (filnamn);
res.rör(filström);
fileStream.on('Avsluta', () => {
filström.stänga();
trösta.logga('Nedladdningen är klar')
});
})
}
För att köra funktionen, anropa den och skicka URL: en till filen du vill ladda ner:
nedladdning fil([fil url]);
För att köra skriptet, öppna din terminal och skriv in nod följt av namnet på JavaScript-filen:
nod[skriptnamn]
Det här skriptet laddar ner filens URL som du skickade till nedladdning fil() funktion och spara den i din arbetskatalog.
Hantering av fel vid nedladdning av filer
I Node.js kan specifika fel som att skriva till strömmen, dålig serviceanslutning eller problem med själva filen uppstå vid nedladdning av filer. Det är avgörande att logga felmeddelanden när dessa fel inträffar för att kunna lösa problemet.
Prova/Fånga Block
Ett try-catch-block är en programmeringsstruktur som gör att du kan hantera potentiella fel och undantag i din kod.
Prova-och-fånga-blocken utgör försök...fånga-blocket. Försöksblockets kod körs först, och fångstblockets kod körs om försöksblocket ger ett undantag.
Prova {
nedladdning fil([fil url]);
} fånga (fel) {
trösta.log (fel);
}
Använd ett försök/fånga-block för att säkerställa att du kan fånga eventuella nedladdningsrelaterade fel. Du kan sedan hantera alla fel efter behov, som att logga det till konsolen eller försöka ladda ner igen.
HTTP-svarsstatuskod
Statuskoder för HTTP-svar visar om en viss HTTP-förfrågan har genomförts.
Till exempel:
https.get (url, (res) => {
konst code = res.statusCode();
trösta.log (kod)
konst fileStream = fs.createWriteStream (filnamn);
});
Om begäran returnerar en statuskod utanför framgångsintervallet, 200-299, det uppstod ett problem med begäran. Kontrollera sedan HTTP-statuskoden slå upp innebörden av statuskoden att åtgärda felet vid behov.
Ladda ner flera filer
Du kan ladda ner flera filer samtidigt genom att skicka filens webbadresser som argument när du kör nod [skriptnamn]. För att utföra denna uppgift måste du modifiera vissa delar av ditt skript.
I JavaScript skickades argument vid sidan av nod kommandon är tillgängliga i process.argv, en egenskap för det globala Node.js-objektet. Den här egenskapen returnerar en array med kommandoradsargument. Det första elementet i denna array bör vara nod, det faktiska kommandot som du kör. Det andra kommer att vara skriptets filnamn, sedan bör varje följande argument vara en URL.
För att ladda ner flera filer samtidigt, spara arrayen från process.argv i en variabel. Kör sedan metoden slice() för att ta bort de två första elementen, som inte är webbadresser:
konst args = process.argv;
konst urls = args.slice(2);
De skiva() metoden skapar en ny array från valda element i en array. Denna metod väljer från en specificerad start till en specificerad (icke-inkluderande) slut.
I det här fallet tar du bort värdet 2 om du skickar värdet 2 nod kommandonamn och ditt skriptfilnamn.
Till sist, med hjälp av JavaScripts kartmetod, passera varje element i webbadresser array till nedladdning fil():
urls.map(url =>{
nedladdningsfil (url)
});
För att köra koden, skriv in nod kommando tillsammans med namnet på din JavaScript-fil och webbadresserna du vill ladda ner:
nod[skriptnamn]url1url2url3
Använda ett bibliotek från tredje part
Du kan också ladda ner filer med hjälp av ett tredjepartsbibliotek som npm ladda ner paket.
Kör följande npm-kommando inuti din skriptkatalog för att installera ladda ner paket:
npm Installera ladda ner
Kräv det nedladdade paketet i ditt skript och spara sedan kommandoradsargumenten i en array:
konst ladda ner = behöva('ladda ner');
konst args = process.argv;
konst urls = args.slice(2);
Du kan nu använda ladda ner bibliotek för att ladda ner filer. Du kan göra detta på flera sätt beroende på ditt specifika mål.
Till exempel:
asynkronfungeranedladdning fil(webbadresser){
väntaLöfte.all (urls.map((url) => ladda ner (url, "filer")))
};
nedladdningsfil (urls);
Deklarera nedladdning fil fungera som asynkron, och skapa en Löfte att vänta tills den specifika uppgiften är klar med vänta nyckelord. Kartlägga webbadresser array till ladda ner funktion och skicka namnet på en lokal mapp—"filer", i det här fallet – för att lagra filerna i.
Ladda ner filer till det lokala filsystemet
Nodes inbyggda funktioner, som fs och https, gör det enkelt att skriva en filnedladdning. För att göra det ännu enklare kan du använda en tredjepartsmodul som nedladdning.
Båda metoderna låter dig ladda ner filer från en fjärrserver och spara dem i det lokala filsystemet. Du bör välja den bästa metoden för dina behov och använda den i din nästa Node.js-applikation.