Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission. Læs mere.

At downloade filer til lokalt lager i stedet for at opbevare dem i skylager har flere fordele. Disse omfatter lettere adgang, adgang uden internetforbindelse og fuldstændigt ejerskab af dine data.

Du kan downloade enkelte og flere filer ved hjælp af indbyggede Node.js-moduler. Du kan også bruge et tredjepartsbibliotek i stedet for at opnå de samme resultater.

Download af filer uden et tredjepartsbibliotek

For at downloade en fil ved hjælp af Node.js, uden hjælp fra tredjepartspakker, skal du bruge tre kerne Node.js-moduler: fs, https, og sti.

Det fs modul understøtter mange filopgaver, herunder læse, oprette, opdatere, fjerne og omdøbe. Det https modul opretter en webserver til at håndtere anmodninger og levere svar. Det sti modul giver en måde at interagere med mappe- og filstier.

Ved at bruge disse moduler kan du sende en HTTP GET-anmodning om at få adgang til en filressource fra en webserver og derefter lave en kopi af ressourcen i dit lokale system.

instagram viewer

For at begynde skal du importere de nødvendige moduler:

konst https = kræve('https');
konst fs = kræve('fs');
konst sti = kræve('sti');

Du skal bruge filnavnet fra URL'en som et godt standardnavn for at gemme det. Du kan bruge stimodulets .basename() metode til at hente en fils navn fra dens URL. Denne metode tager et sti-argument og returnerer den sidste del af en sti.

For eksempel:

konst filnavn = sti.basenavn (url);

Anmod derefter om filen fra serveren ved at kalde https.get() metode. Denne metode tager URL'en som det første argument og en tilbagekaldsfunktion for svaret som det andet argument

Bestå url variabel som det første argument og derefter en tilbagekaldsfunktion til behandling, når denne metode modtager en svarstrøm:

https.get (url, (res) => {
})

I tilbagekaldsfunktionen kan du bruge fs.createWriteStream() metode til at oprette en ny skrivbar strøm, der passerer filnavn variabel som argument.

For eksempel:

konst fileStream = fs.createWriteStream (filnavn);
res.rør(filstream);

Det createWriteStream() metoden letter processen med at skrive data til en fil, især når du håndterer store bidder af data.

Det rør() metoden sender derefter GET-svardatastrømmen til filstream objekt.

For at logge en besked til konsollen, efter at scriptet er færdig med at downloade filen, skal du vedhæfte en .på() begivenhedsudsender til filstream variabel:

fileStream.on('Afslut', () => {
filstream.tæt();
konsol.log('Download færdig');
});

FileStream-objektet udsender en Afslut hændelse, når den har skrevet alle data til filen. Fang dette via .på() metode og give en tilbagekaldsfunktion for at lukke filstream og log en besked til konsollen.

For bedre udførelse og effektiv script genbrugelighed, pak denne kode ind i en funktion, der tager URL'en som sit argument:

fungeredownload fil(url) {
konst filnavn = sti.basenavn (url);

https.get (url, (res) => {
konst fileStream = fs.createWriteStream (filnavn);
res.rør(filstream);

fileStream.on('Afslut', () => {
filstream.tæt();
konsol.log('Download færdig')
});
})
}

For at køre funktionen skal du kalde den og sende URL'en til den fil, du vil downloade:

download fil([fil url]);

For at køre scriptet skal du åbne din terminal og indtaste node efterfulgt af navnet på JavaScript-filen:

node[scriptnavn]

Dette script vil downloade den fil-URL, du sendte til download fil() funktion og gem den i din arbejdsmappe.

Håndtering af fejl ved download af filer

I Node.js kan der opstå specifikke fejl som skrivning til streamen, dårlig serviceforbindelse eller problemer med selve filen, når filer downloades. Det er afgørende at logge fejlmeddelelser, når disse fejl opstår for at kunne løse problemet.

Prøv/fang blok

En try-catch blok er en programmeringsstruktur, der gør dig i stand til at håndtere potentielle fejl og undtagelser i din kode.

Prøv-og-fang-blokkene udgør prøve...fang-blokken. Prøv-blokkens kode kører først, og catch-blokkens kode kører, hvis try-blokken kaster en undtagelse.

prøve {
download fil([fil url]);
} fangst (fejl) {
konsol.log (fejl);
}

Brug en try/catch-blok for at sikre, at du kan fange eventuelle download-relaterede fejl. Du kan derefter håndtere enhver fejl efter behov, såsom at logge den på konsollen eller prøve at downloade igen.

HTTP-svarstatuskode

Statuskoder for HTTP-svar viser, om en bestemt HTTP-anmodning er blevet udført.

For eksempel:

https.get (url, (res) => {
konst kode = res.statusKode();
konsol.log (kode)
konst fileStream = fs.createWriteStream (filnavn);
});

Hvis anmodningen returnerer en statuskode uden for succesintervallet, 200-299, der var et problem med anmodningen. Tjek derefter HTTP-statuskoden slå op på betydningen af ​​statuskoden at håndtere fejlen efter behov.

Download af flere filer

Du kan downloade flere filer samtidigt ved at sende filens URL'er som argumenter, når du kører node [scriptnavn]. For at udføre denne opgave skal du ændre visse dele af dit script.

I JavaScript gik argumenter ved siden af node kommandoen er tilgængelige i process.argv, en egenskab for det globale Node.js-objekt. Denne egenskab returnerer en række af kommandolinjeargumenterne. Det første element i dette array skal være node, den faktiske kommando, du kører. Det andet vil være scriptet filnavn, så skal hvert efterfølgende argument være en URL.

For at downloade flere filer på én gang skal du gemme arrayet fra process.argv i en variabel. Kør derefter slice()-metoden for at fjerne de første to elementer, som ikke er URL'er:

konst args = proces.argv;
konst urls = args.slice(2);

Det skive() metoden opretter et nyt array fra udvalgte elementer i et array. Denne metode vælger fra en specificeret start til en specificeret (ikke inkluderende) slutning.

I dette tilfælde fjerner en værdi på 2 node kommandonavn og dit script-filnavn.

Endelig, ved hjælp af JavaScripts kortmetode, videregive hvert element i webadresser række til download fil():

urls.map(url =>{
downloadfil (url)
});

For at køre koden skal du indtaste node kommando sammen med navnet på din JavaScript-fil og de URL'er, du vil downloade:

node[scriptnavn]url1url2url3

Brug af et tredjepartsbibliotek

Du kan også downloade filer ved hjælp af et tredjepartsbibliotek som npm Hent pakke.

Kør følgende npm-kommando inde i dit script-bibliotek for at installere Hent pakke:

npm installere Hent

Kræv den downloadede pakke i dit script, og gem derefter kommandolinjeargumenterne i et array:

konst download = kræve('Hent');
konst args = proces.argv;
konst urls = args.slice(2);

Du kan nu bruge Hent bibliotek til at downloade filer. Du kan gøre dette på flere måder afhængigt af dit specifikke mål.

For eksempel:

asynkronfungeredownload fil(webadresser){
venteLøfte.all (urls.map((url) => download (url, "filer")))
};

downloadfil (urls);

Erklære download fil fungere som asynkron, og opret en Løfte at vente, indtil den bestemte opgave er færdig med vente søgeord. Kortlæg webadresser række til Hent funktion og videregive navnet på en lokal mappe—"filer", i dette tilfælde – for at gemme filerne i.

Download af filer til det lokale filsystem

Nodes indbyggede funktioner, som fs og https, gør det nemt at skrive en fildownloader. For at gøre det endnu nemmere kan du bruge et tredjepartsmodul som download.

Begge metoder lader dig downloade filer fra en ekstern server og gemme dem i det lokale filsystem. Du bør vælge den bedste metode til dine behov og bruge den i din næste Node.js-applikation.