Lezers zoals jij steunen MUO. Wanneer u een aankoop doet via links op onze site, kunnen we een aangesloten commissie verdienen. Lees verder.

Het downloaden van bestanden naar lokale opslag in plaats van ze in cloudopslag te bewaren, heeft verschillende voordelen. Deze omvatten eenvoudigere toegang, toegang zonder internetverbinding en volledig eigendom van uw gegevens.

U kunt enkele en meerdere bestanden downloaden met behulp van ingebouwde Node.js-modules. U kunt in plaats daarvan ook een bibliotheek van derden gebruiken om dezelfde resultaten te bereiken.

Bestanden downloaden zonder een bibliotheek van derden

Om een ​​bestand te downloaden met Node.js, zonder de hulp van pakketten van derden, heb je drie Node.js-kernmodules nodig: fs, https, En pad.

De fs module ondersteunt veel bestandstaken, waaronder lezen, maken, bijwerken, verwijderen en hernoemen. De https module creëert een webserver om verzoeken af ​​te handelen en antwoorden te leveren. De pad module biedt een manier om te communiceren met directory- en bestandspaden.

Met behulp van deze modules kunt u een HTTP GET-verzoek verzenden om toegang te krijgen tot een bestandsbron vanaf een webserver en vervolgens een kopie maken van de bron in uw lokale systeem.

Importeer om te beginnen de vereiste modules:

const https= vereisen('https');
const f = vereisen('fs');
const pad = vereisen('pad');

U moet de bestandsnaam van de URL gebruiken als een goede standaardnaam om deze op te slaan. U kunt de padmodule gebruiken .basisnaam() methode om de naam van een bestand uit de URL te halen. Deze methode neemt een padargument en retourneert het laatste deel van een pad.

Bijvoorbeeld:

const bestandsnaam = pad.basisnaam (url);

Vraag vervolgens het bestand op bij de server door de https.get() methode. Deze methode neemt de URL als het eerste argument en een callback-functie voor het antwoord als het tweede argument

Geef de url variabele als het eerste argument en vervolgens een callback-functie voor verwerking wanneer deze methode een responsstroom ontvangt:

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

In de callback-functie kunt u de fs.createWriteStream() methode om een ​​nieuwe beschrijfbare stream te maken, waarbij de bestandsnaam variabele als een argument.

Bijvoorbeeld:

const fileStream = fs.createWriteStream (bestandsnaam);
res.pijp(Bestandsstroom);

De createWriteStream() methode vereenvoudigt het proces van het schrijven van gegevens naar een bestand, vooral wanneer u grote hoeveelheden gegevens verwerkt.

De pijp() methode stuurt vervolgens de GET-antwoordgegevensstroom naar de Bestandsstroom voorwerp.

Om een ​​bericht naar de console te loggen nadat het script klaar is met het downloaden van het bestand, voegt u een .op() gebeurteniszender naar de Bestandsstroom variabele:

bestandStream.on('finish', () => {
Bestandsstroom.dichtbij();
troosten.log('Download voltooid');
});

Het fileStream-object zendt een finish gebeurtenis wanneer het alle gegevens naar het bestand heeft geschreven. Vang deze op via de .op() methode en bieden een callback-functie om de Bestandsstroom en log een bericht naar de console.

Voor een betere uitvoering en efficiënte herbruikbaarheid van scripts, verpak deze code in een functie die de URL als argument heeft:

functiedownload bestand(url) {
const bestandsnaam = pad.basisnaam (url);

https.get (url, (res) => {
const fileStream = fs.createWriteStream (bestandsnaam);
res.pijp(Bestandsstroom);

bestandStream.on('finish', () => {
Bestandsstroom.dichtbij();
troosten.log('Download voltooid')
});
})
}

Om de functie uit te voeren, roept u deze op en geeft u de URL door van het bestand dat u wilt downloaden:

download bestand([bestands-URL]);

Om het script uit te voeren, opent u uw terminal en voert u in knooppunt gevolgd door de naam van het JavaScript-bestand:

knooppunt[scriptnaam]

Dit script downloadt de bestands-URL die u hebt doorgegeven aan het download bestand() functie en sla het op in uw werkdirectory.

Omgaan met fouten bij het downloaden van bestanden

In Node.js kunnen specifieke fouten optreden, zoals schrijven naar de stream, slechte serviceverbinding of problemen met het bestand zelf tijdens het downloaden van bestanden. Het is van cruciaal belang om foutmeldingen te loggen wanneer deze fouten optreden om het probleem aan te kunnen pakken.

Probeer/vang blok

Een try-catch-blok is een programmeerstructuur waarmee u mogelijke fouten en uitzonderingen in uw code kunt afhandelen.

De try-and-catch-blokken vormen het try...catch-blok. De code van het try-blok wordt eerst uitgevoerd en de code van het catch-blok wordt uitgevoerd als het try-blok een uitzondering genereert.

poging {
download bestand([bestands-URL]);
} vangst (fout) {
troosten.log (fout);
}

Gebruik een try/catch-blok om ervoor te zorgen dat u downloadgerelateerde fouten kunt opvangen. U kunt vervolgens eventuele fouten afhandelen, zoals inloggen op de console of opnieuw proberen te downloaden.

HTTP-antwoordstatuscode

Statuscodes voor HTTP-antwoorden geven aan of een bepaald HTTP-verzoek met succes is uitgevoerd.

Bijvoorbeeld:

https.get (url, (res) => {
const code = res.statusCode();
troosten.log (code)
const fileStream = fs.createWriteStream (bestandsnaam);
});

Als het verzoek een statuscode retourneert die buiten het succesbereik ligt, 200-299, er was een probleem met het verzoek. Controleer vervolgens de HTTP-statuscode zoek de betekenis van de statuscode op om de fout zo nodig op te lossen.

Meerdere bestanden downloaden

U kunt meerdere bestanden tegelijk downloaden door de bestands-URL's als argumenten door te geven tijdens het uitvoeren knooppunt [scriptnaam]. Om deze taak uit te voeren, moet u bepaalde delen van uw script wijzigen.

In JavaScript worden argumenten doorgegeven naast de knooppunt commando zijn beschikbaar in process.argv, een eigenschap van het globale Node.js-object. Deze eigenschap retourneert een array van de opdrachtregelargumenten. Het eerste element in deze array zou moeten zijn knooppunt, de daadwerkelijke opdracht die u uitvoert. De tweede is de bestandsnaam van het script, daarna moet elk volgend argument een URL zijn.

Als u meerdere bestanden tegelijk wilt downloaden, slaat u de array op vanuit proces.argv in een variabele. Voer vervolgens de methode slice() uit om de eerste twee elementen, die geen URL's zijn, te verwijderen:

const args = proces.argv;
const URL's = args.slice(2);

De plak() methode maakt een nieuwe array van geselecteerde elementen in een array. Deze methode selecteert van een gespecificeerd begin tot een gespecificeerd (niet-inclusief) einde.

In dit geval wordt bij het doorgeven van een waarde van 2 de knooppunt opdrachtnaam en uw scriptbestandsnaam.

Eindelijk, met behulp van de kaartmethode van JavaScript, geef elk element door in de URL's array naar download bestand():

URL.map(url =>{
downloadBestand (url)
});

Voer de code in om de code uit te voeren knooppunt opdracht samen met de naam van uw JavaScript-bestand en de URL's die u wilt downloaden:

knooppunt[scriptnaam]url1url2url3

Een bibliotheek van derden gebruiken

U kunt ook bestanden downloaden met behulp van een bibliotheek van derden, zoals de npm downloaden pakket.

Voer in uw scriptdirectory de volgende npm-opdracht uit om het downloaden pakket:

npm installeren downloaden

Vereist het gedownloade pakket in uw script en sla vervolgens de opdrachtregelargumenten op in een array:

const downloaden = vereisen('downloaden');
const args = proces.argv;
const URL's = args.slice(2);

U kunt nu de downloaden bibliotheek om bestanden te downloaden. U kunt dit op verschillende manieren doen, afhankelijk van uw specifieke doel.

Bijvoorbeeld:

asynchroonfunctiedownload bestand(URL's){
wachtenBelofte.all (urls.map((url) => downloaden (url, "bestanden")))
};

downloadBestand (urls);

Verklaar de download bestand Functioneert als asynchroon, en maak een Belofte om te wachten tot de specifieke taak is voltooid met de wachten trefwoord. Breng de kaart in kaart URL's reeks naar de downloaden functie en geef de naam van een lokale map door—"bestanden", in dit geval—om de bestanden in op te slaan.

Bestanden downloaden naar het lokale bestandssysteem

De ingebouwde functies van Node, zoals fs en https, maken het gemakkelijk om een ​​bestandsdownloader te schrijven. Om het nog gemakkelijker te maken, kunt u een module van derden gebruiken, zoals downloaden.

Met beide methoden kunt u bestanden van een externe server downloaden en opslaan in het lokale bestandssysteem. U moet de beste methode kiezen voor uw behoeften en deze gebruiken in uw volgende Node.js-toepassing.