Descărcarea fișierelor în stocarea locală, mai degrabă decât păstrarea lor în stocarea în cloud, are mai multe avantaje. Acestea includ acces mai ușor, acces fără conexiune la internet și proprietatea completă a datelor dvs.
Puteți descărca fișiere unice și multiple folosind modulele Node.js încorporate. Puteți folosi, de asemenea, o bibliotecă terță parte, pentru a obține aceleași rezultate.
Descărcarea fișierelor fără o bibliotecă terță parte
Pentru a descărca un fișier folosind Node.js, fără ajutorul pachetelor terțe, veți avea nevoie de trei module principale Node.js: fs, https, și cale.
The fs Modulul acceptă multe sarcini de fișiere, inclusiv citirea, crearea, actualizarea, eliminarea și redenumirea. The https modul creează un server web pentru a gestiona cererile și a furniza răspunsuri. The cale modulul oferă o modalitate de a interacționa cu căile de director și fișiere.
Folosind aceste module, puteți trimite o solicitare HTTP GET pentru a accesa o resursă de fișier de pe un server web și apoi puteți face o copie a resursei în sistemul dumneavoastră local.
Pentru a începe, importați modulele necesare:
const https = cere('https');
const fs = cere(„fs”);
const cale = cere('cale');
Va trebui să utilizați numele fișierului de la adresa URL ca nume implicit bun pentru a-l salva. Puteți utiliza modulul de cale .basename() metoda de a obține numele unui fișier din adresa URL a acestuia. Această metodă ia un argument cale și returnează ultima porțiune a unei căi.
De exemplu:
const nume de fișier = cale.nume de bază (url);
Apoi, solicitați fișierul de la server, invocând fișierul https.get() metodă. Această metodă ia URL-ul ca prim argument și o funcție de apel invers pentru răspuns ca al doilea argument
Treceți url variabilă ca prim argument și apoi o funcție de apel invers pentru procesare atunci când această metodă primește un flux de răspuns:
https.get (url, (res) => {
})
În funcția de apel invers, puteți utiliza fs.createWriteStream() metoda de a crea un nou flux de scriere, trecând nume de fișier variabilă ca argument.
De exemplu:
const fileStream = fs.createWriteStream (nume fișier);
res.teava(fileStream);
The createWriteStream() metoda ușurează procesul de scriere a datelor într-un fișier, mai ales atunci când manipulați bucăți mari de date.
The teava() apoi trimite fluxul de date de răspuns GET către fileStream obiect.
Pentru a înregistra un mesaj în consolă după ce scriptul a terminat de descărcat fișierul, atașați a .pe() emițător de evenimente către fileStream variabil:
fileStream.on('finalizarea', () => {
fileStream.închide();
consolă.Buturuga(„Descărcare terminată”);
});
Obiectul fileStream emite a finalizarea eveniment când a scris toate datele în fișier. Prinde asta prin intermediul .pe() metoda și furnizați o funcție de apel invers pentru a închide fileStream și înregistrați un mesaj pe consolă.
Pentru o mai bună execuție și reutilizare eficientă a scriptului, împachetați acest cod într-o funcție care ia URL-ul drept argument:
funcţiedescărcare fișier(url) {
const nume de fișier = cale.nume de bază (url);https.get (url, (res) => {
const fileStream = fs.createWriteStream (nume fișier);
res.teava(fileStream);
fileStream.on('finalizarea', () => {
fileStream.închide();
consolă.Buturuga(„Descărcare terminată”)
});
})
}
Pentru a rula funcția, apelați-o și transmiteți adresa URL a fișierului pe care doriți să-l descărcați:
descărcare fișier([url fișier]);
Pentru a rula scriptul, deschideți terminalul și intrați nodul urmat de numele fișierului JavaScript:
nodul[numele scenariului]
Acest script va descărca adresa URL a fișierului pe care l-ați transmis descărcare fișier() funcția și salvați-o în directorul dvs. de lucru.
Gestionarea erorilor la descărcarea fișierelor
În Node.js, la descărcarea fișierelor pot apărea erori specifice, cum ar fi scrierea în flux, conexiune slabă la serviciu sau probleme cu fișierul în sine. Este esențial să înregistrați mesajele de eroare atunci când au loc aceste erori pentru a putea rezolva problema.
Încearcă/Prindă Blocare
Un bloc try-catch este o structură de programare care vă permite să gestionați potențialele erori și excepții din codul dvs.
Blocurile try-and-catch formează blocul try...catch. Codul blocului try rulează primul, iar codul blocului catch rulează dacă blocul try lansează o excepție.
încerca {
descărcare fișier([url fișier]);
} captură (eroare) {
consolă.log (eroare);
}
Utilizați un bloc try/catch pentru a vă asigura că puteți detecta orice erori legate de descărcare. Apoi puteți gestiona orice eroare după cum este necesar, cum ar fi înregistrarea în consolă sau reîncercarea de descărcare.
Cod de stare a răspunsului HTTP
Codurile de stare pentru răspunsurile HTTP arată dacă o anumită solicitare HTTP a fost efectuată cu succes.
De exemplu:
https.get (url, (res) => {
const cod = res.statusCode();
consolă.log (cod)
const fileStream = fs.createWriteStream (nume fișier);
});
Dacă solicitarea returnează un cod de stare în afara intervalului de succes, 200-299, a apărut o problemă cu cererea. Apoi, verificați codul de stare HTTP căutați semnificația codului de stare pentru a trata eroarea după cum este necesar.
Descărcarea mai multor fișiere
Puteți descărca mai multe fișiere simultan, trecând URL-urile fișierelor ca argumente atunci când rulați nod [nume script]. Pentru a efectua această sarcină, trebuie să modificați anumite părți ale scriptului.
În JavaScript, argumentele au trecut alături de nodul comanda sunt disponibile în process.argv, o proprietate a obiectului global Node.js. Această proprietate returnează o matrice a argumentelor liniei de comandă. Primul element din această matrice ar trebui să fie nodul, comanda reală pe care o executați. Al doilea va fi numele fișierului script, apoi fiecare argument următor ar trebui să fie o adresă URL.
Pentru a descărca mai multe fișiere simultan, salvați matricea din proces.argv într-o variabilă. Apoi rulați metoda slice() pentru a elimina primele două elemente, care nu sunt adrese URL:
const args = proces.argv;
const urls = args.slice(2);
The felie() metoda creează o nouă matrice din elementele selectate dintr-o matrice. Această metodă selectează de la un început specificat la un sfârșit specificat (neinclusiv).
În acest caz, trecerea unei valori de 2 elimină nodul numele comenzii și numele fișierului dvs. de script.
In cele din urma, folosind metoda hărții JavaScript, treceți fiecare element în URL-uri matrice la descărcare fișier():
urls.map(url =>{
descărcare fișier (url)
});
Pentru a rula codul, introduceți nodul comanda împreună cu numele fișierului JavaScript și adresele URL pe care doriți să le descărcați:
nodul[numele scenariului]url1url2url3
Utilizarea unei biblioteci terță parte
De asemenea, puteți descărca fișiere folosind o bibliotecă terță parte, cum ar fi npm Descarca pachet.
În directorul de script, rulați următoarea comandă npm pentru a instala Descarca pachet:
npm instalare Descarca
Solicitați pachetul descărcat în scriptul dvs., apoi salvați argumentele liniei de comandă într-o matrice:
const descărcare = cere('Descarca');
const args = proces.argv;
const urls = args.slice(2);
Acum puteți utiliza Descarca bibliotecă pentru a descărca fișiere. Puteți face acest lucru în mai multe moduri, în funcție de obiectivul dvs.
De exemplu:
asincronfuncţiedescărcare fișier(URL-uri){
așteaptăPromisiune.all (urls.map((url) => descărcare (url, "fisiere")))
};
downloadFile (urls);
Declarați descărcare fișier functioneaza ca asincron, și creați un Promisiune să așteptați până când sarcina specială este finalizată cu așteaptă cuvânt cheie. Harta URL-uri matrice la Descarca funcția și transmiteți numele unui folder local—"fișiere", în acest caz—pentru a stoca fișierele în.
Descărcarea fișierelor în sistemul de fișiere local
Funcțiile încorporate ale lui Node, cum ar fi fs și https, facilitează scrierea unui program de descărcare de fișiere. Pentru a face și mai ușor, puteți utiliza un modul terță parte, cum ar fi descărcarea.
Ambele metode vă permit să descărcați fișiere de pe un server la distanță și să le salvați în sistemul de fișiere local. Ar trebui să alegeți cea mai bună metodă pentru nevoile dvs. și să o utilizați în următoarea aplicație Node.js.