Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon. Les mer.

Å laste ned filer til lokal lagring i stedet for å holde dem i skylagring har flere fordeler. Disse inkluderer enklere tilgang, tilgang uten internettforbindelse og fullstendig eierskap til dataene dine.

Du kan laste ned enkelt- og flere filer ved hjelp av innebygde Node.js-moduler. Du kan også bruke et tredjepartsbibliotek i stedet for å oppnå de samme resultatene.

Laste ned filer uten et tredjepartsbibliotek

For å laste ned en fil med Node.js, uten hjelp av tredjepartspakker, trenger du tre kjerne Node.js-moduler: fs, https, og sti.

De fs Modulen støtter mange filoppgaver, inkludert lese, opprette, oppdatere, fjerne og gi nytt navn. De https modulen oppretter en webserver for å håndtere forespørsler og levere svar. De sti modulen gir en måte å samhandle med katalog- og filstier.

Ved å bruke disse modulene kan du sende en HTTP GET-forespørsel om å få tilgang til en filressurs fra en webserver og deretter lage en kopi av ressursen i ditt lokale system.

instagram viewer

For å begynne, importer de nødvendige modulene:

konst https = krever('https');
konst fs = krever('fs');
konst bane = krever('sti');

Du må bruke filnavnet fra URL-en som et godt standardnavn for å lagre det. Du kan bruke banemodulens .basename() metode for å få et filnavn fra URL-adressen. Denne metoden tar et baneargument og returnerer den siste delen av en bane.

For eksempel:

konst filnavn = bane.basenavn (url);

Be deretter om filen fra serveren ved å påkalle https.get() metode. Denne metoden tar URL-en som det første argumentet og en tilbakeringingsfunksjon for svaret som det andre argumentet

Send meg url variabel som det første argumentet og deretter en tilbakeringingsfunksjon for behandling når denne metoden mottar en svarstrøm:

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

I tilbakeringingsfunksjonen kan du bruke fs.createWriteStream() metode for å lage en ny skrivbar strøm ved å sende filnavn variabel som argument.

For eksempel:

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

De createWriteStream() metoden letter prosessen med å skrive data til en fil, spesielt når du håndterer store databiter.

De rør() metoden sender deretter GET-svardatastrømmen til filstrøm gjenstand.

For å logge en melding til konsollen etter at skriptet er ferdig med å laste ned filen, legg ved en .på() hendelsessender til filstrøm variabel:

fileStream.on('bli ferdig', () => {
filstrøm.Lukk();
konsoll.Logg('Nedlasting fullført');
});

FileStream-objektet sender ut en bli ferdig hendelse når den har skrevet alle dataene til filen. Fang dette via .på() metode og gi en tilbakeringingsfunksjon for å lukke filstrøm og logg en melding til konsollen.

For bedre utførelse og effektiv gjenbruk av skript, pakk denne koden inn i en funksjon som tar URL-en som argument:

funksjonLast ned fil(url) {
konst filnavn = bane.basenavn (url);

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

fileStream.on('bli ferdig', () => {
filstrøm.Lukk();
konsoll.Logg('Nedlasting fullført')
});
})
}

For å kjøre funksjonen, ring den og send URL-en til filen du vil laste ned:

Last ned fil([fil url]);

For å kjøre skriptet, åpne terminalen og skriv inn node etterfulgt av navnet på JavaScript-filen:

node[skriptnavn]

Dette skriptet vil laste ned fil-URLen du sendte til Last ned fil() funksjon og lagre den i arbeidskatalogen din.

Håndtering av feil ved nedlasting av filer

I Node.js kan det oppstå spesifikke feil som skriving til strømmen, dårlig tjenesteforbindelse eller problemer med selve filen når du laster ned filer. Det er avgjørende å logge feilmeldinger når disse feilene oppstår for å kunne takle problemet.

Prøv/fang blokk

En try-catch-blokk er en programmeringsstruktur som lar deg håndtere potensielle feil og unntak i koden din.

Prøv-og-fang-blokkene utgjør prøve-fang-blokken. Prøv-blokkens kode kjører først, og catch-blokkens kode kjører hvis prøveblokken gir et unntak.

prøve {
Last ned fil([fil url]);
} å fange (feil) {
konsoll.log (feil);
}

Bruk en prøv/fang-blokk for å sikre at du kan fange opp eventuelle nedlastingsrelaterte feil. Du kan deretter håndtere enhver feil etter behov, for eksempel å logge den på konsollen eller prøve nedlastingen på nytt.

HTTP-responsstatuskode

Statuskoder for HTTP-svar viser om en bestemt HTTP-forespørsel har blitt utført.

For eksempel:

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

Hvis forespørselen returnerer en statuskode utenfor suksessområdet, 200-299, det var et problem med forespørselen. Sjekk deretter HTTP-statuskoden slå opp betydningen av statuskoden å håndtere feilen etter behov.

Laste ned flere filer

Du kan laste ned flere filer samtidig ved å sende fil-URLene som argumenter når du kjører node [skriptnavn]. For å utføre denne oppgaven må du endre visse deler av skriptet.

I JavaScript ble argumenter sendt ved siden av node kommandoen er tilgjengelig i process.argv, en egenskap for det globale Node.js-objektet. Denne egenskapen returnerer en rekke av kommandolinjeargumentene. Det første elementet i denne matrisen skal være node, den faktiske kommandoen du kjører. Det andre vil være skriptfilnavnet, så skal hvert påfølgende argument være en URL.

For å laste ned flere filer samtidig, lagre arrayet fra process.argv i en variabel. Kjør deretter slice()-metoden for å fjerne de to første elementene, som ikke er URL-er:

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

De skive() metoden oppretter en ny matrise fra utvalgte elementer i en matrise. Denne metoden velger fra en spesifisert start til en spesifisert (ikke-inkluderende) slutt.

I dette tilfellet, fjerner du en verdi på 2 node kommandonavn og skriptfilnavnet ditt.

Endelig, ved hjelp av JavaScripts kartmetode, passerer hvert element i nettadresser rekke til Last ned fil():

urls.map(url =>{
last ned fil (url)
});

For å kjøre koden, skriv inn node kommando sammen med navnet på JavaScript-filen og URL-ene du vil laste ned:

node[skriptnavn]url1url2url3

Bruke et tredjepartsbibliotek

Du kan også laste ned filer ved å bruke et tredjepartsbibliotek som npm nedlasting pakke.

Inne i skriptkatalogen din, kjør følgende npm-kommando for å installere nedlasting pakke:

npm installere nedlasting

Krev den nedlastede pakken i skriptet ditt, og lagre deretter kommandolinjeargumentene i en matrise:

konst last ned = krever('nedlasting');
konst args = prosess.argv;
konst urls = args.slice(2);

Du kan nå bruke nedlasting bibliotek for å laste ned filer. Du kan gjøre dette på flere måter avhengig av ditt spesielle mål.

For eksempel:

asynkronfunksjonLast ned fil(nettadresser){
avventeLove.all (urls.map((url) => last ned (url, "filer")))
};

nedlastingsfil (urls);

Erklære Last ned fil fungere som asynkron, og lag en Love å vente til den aktuelle oppgaven er fullført med avvente nøkkelord. Kartlegg nettadresser rekke til nedlasting funksjon og send navnet på en lokal mappe—"filer", i dette tilfellet – for å lagre filene i.

Laste ned filer til det lokale filsystemet

Nodes innebygde funksjoner, som fs og https, gjør det enkelt å skrive en filnedlaster. For å gjøre det enda enklere kan du bruke en tredjepartsmodul som nedlasting.

Begge metodene lar deg laste ned filer fra en ekstern server og lagre dem i det lokale filsystemet. Du bør velge den beste metoden for dine behov og bruke den i din neste Node.js-applikasjon.