Jak pobierać pliki za pomocą Node.js

Jak pobierać pliki za pomocą Node.js

Pobieranie plików do pamięci lokalnej zamiast przechowywania ich w chmurze ma kilka zalet. Obejmują one łatwiejszy dostęp, dostęp bez połączenia z Internetem i pełną własność danych.

Możesz pobierać pojedyncze i wiele plików za pomocą wbudowanych modułów Node.js. Zamiast tego możesz także użyć biblioteki innej firmy, aby osiągnąć te same wyniki.

Pobieranie plików bez biblioteki innej firmy

Aby pobrać plik przy użyciu Node.js, bez pomocy pakietów innych firm, potrzebujesz trzech podstawowych modułów Node.js: fs , https i path .

Moduł fs obsługuje wiele zadań związanych z plikami, w tym odczyt, tworzenie, aktualizowanie, usuwanie i zmianę nazwy. Moduł https tworzy serwer WWW do obsługi żądań i dostarczania odpowiedzi. Moduł path umożliwia interakcję ze ścieżkami do katalogów i plików.

Za pomocą tych modułów można wysłać żądanie HTTP GET w celu uzyskania dostępu do zasobu plikowego z serwera WWW, a następnie wykonać kopię zasobu w systemie lokalnym.

Aby rozpocząć, zaimportuj wymagane moduły:

const https = require('https');
const fs = require('fs');
const path = require('path');

Będziesz musiał użyć nazwy pliku z adresu URL jako dobrej nazwy domyślnej, aby go zapisać. Możesz użyć metody .basename() modułu ścieżki, aby uzyskać nazwę pliku z jego adresu URL. Ta metoda pobiera argument ścieżki i zwraca ostatnią część ścieżki.

Na przykład:

const filename = path.basename(url);

Następnie zażądaj pliku z serwera, wywołując metodę https.get() . Ta metoda przyjmuje adres URL jako pierwszy argument, a funkcję wywołania zwrotnego dla odpowiedzi jako drugi argument

Przekaż zmienną url jako pierwszy argument, a następnie funkcję wywołania zwrotnego do przetwarzania, gdy ta metoda otrzyma strumień odpowiedzi:

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

W funkcji wywołania zwrotnego można użyć metody fs.createWriteStream() , aby utworzyć nowy zapisywalny strumień, przekazując jako argument zmienną nazwa pliku .

Na przykład:

const fileStream = fs.createWriteStream(filename);
res.pipe(fileStream);

Metoda createWriteStream() upraszcza proces zapisywania danych do pliku, zwłaszcza w przypadku dużych porcji danych.

Następnie metoda pipe() wysyła strumień danych odpowiedzi GET do obiektu fileStream .

Aby zarejestrować komunikat w konsoli po zakończeniu pobierania pliku przez skrypt, dołącz emiter zdarzeń .on () do zmiennej fileStream :

fileStream.on('finish', () => {
  fileStream.close();
  console.log('Download finished');
});

Obiekt fileStream emituje zdarzenie finish po zapisaniu wszystkich danych w pliku. Przechwyć to za pomocą metody .on() i udostępnij funkcję wywołania zwrotnego, aby zamknąć fileStream i zarejestrować komunikat w konsoli.

W celu lepszego wykonania i efektywnego ponownego użycia skryptu umieść ten kod w funkcji, która jako argument przyjmuje adres URL:

function downloadFile(url) {
    const filename = path.basename(url);

    https.get(url, (res) => {
        const fileStream = fs.createWriteStream(filename);
        res.pipe(fileStream);


        fileStream.on('finish', () => {
            fileStream.close();
            console.log('Download finished')
        });
    })
}

Aby uruchomić funkcję, wywołaj ją i podaj adres URL pliku, który chcesz pobrać:

downloadFile([file url]);

Aby uruchomić skrypt, otwórz terminal i wprowadź node , a następnie nazwę pliku JavaScript:

node [script name]

Ten skrypt pobierze adres URL pliku przekazany do funkcji downloadFile() i zapisze go w twoim katalogu roboczym.

Obsługa błędów podczas pobierania plików

W Node.js podczas pobierania plików mogą wystąpić określone błędy, takie jak zapisywanie do strumienia, słabe połączenie z usługą lub problemy z samym plikiem. Rejestrowanie komunikatów o błędach w przypadku wystąpienia tych błędów ma kluczowe znaczenie, aby móc rozwiązać problem.

Spróbuj/złap blok

Blok try-catch to struktura programistyczna, która umożliwia obsługę potencjalnych błędów i wyjątków w kodzie.

Bloki try-and-catch składają się na blok try…catch. Kod bloku try jest uruchamiany jako pierwszy, a kod bloku catch jest uruchamiany, jeśli blok try zgłasza wyjątek.

try {
    downloadFile([file url]);
} catch (error) {
    console.log(error);
}

Użyj bloku try/catch, aby upewnić się, że możesz przechwycić wszelkie błędy związane z pobieraniem. Następnie możesz w razie potrzeby obsłużyć każdy błąd, na przykład zalogować się do konsoli lub ponowić próbę pobrania.

Kod stanu odpowiedzi HTTP

Kody stanu dla odpowiedzi HTTP pokazują, czy dane żądanie HTTP zostało pomyślnie zrealizowane.

Na przykład:

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

Jeśli żądanie zwróci kod stanu spoza zakresu sukcesu, 200-299 , wystąpił problem z żądaniem. Sprawdź kod stanu HTTP, a następnie wyszukaj znaczenie kodu stanu, aby w razie potrzeby poradzić sobie z błędem.

Pobieranie wielu plików

Możesz pobrać wiele plików jednocześnie, przekazując adresy URL plików jako argumenty podczas uruchamiania węzła [nazwa skryptu] . Aby wykonać to zadanie, musisz zmodyfikować niektóre części skryptu.

W JavaScript argumenty przekazywane wraz z poleceniem node są dostępne w process.argv, właściwości globalnego obiektu Node.js. Ta właściwość zwraca tablicę argumentów wiersza poleceń. Pierwszym elementem w tej tablicy powinien być node , rzeczywiste polecenie, które uruchamiasz. Drugim będzie nazwa pliku skryptu, a następnie każdy kolejny argument powinien być adresem URL.

Aby pobrać wiele plików jednocześnie, zapisz tablicę z pliku process.argv w zmiennej. Następnie uruchom metodę slice(), aby usunąć pierwsze dwa elementy, które nie są adresami URL:

const args = process.argv;
const urls = args.slice(2);

Metoda slice() tworzy nową tablicę z wybranych elementów w tablicy. Ta metoda wybiera od określonego początku do określonego (nieobejmującego) końca.

W takim przypadku przekazanie wartości 2 usuwa nazwę polecenia węzła i nazwę pliku skryptu .

Na koniec, używając metody mapy JavaScript, przekaż każdy element tablicy urls do downloadFile() :

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

Aby uruchomić kod, wprowadź polecenie node wraz z nazwą pliku JavaScript i adresami URL, które chcesz pobrać:

node [script name] url1 url2 url3

Korzystanie z biblioteki stron trzecich

Możesz także pobierać pliki przy użyciu biblioteki innej firmy, takiej jak npm download package.

W katalogu skryptów uruchom następującą komendę npm, aby zainstalować pakiet do pobrania :

npm install download

Wymagaj pobranego pakietu w swoim skrypcie, a następnie zapisz argumenty wiersza poleceń w tablicy:

const download = require('download');
const args = process.argv;
const urls = args.slice(2);

Możesz teraz używać biblioteki pobierania do pobierania plików. Możesz to zrobić na kilka sposobów, w zależności od konkretnego celu.

Na przykład:

async function downloadFile(urls){
await Promise.all(urls.map((url) => download(url, "files")))
};

downloadFile(urls);

Zadeklaruj funkcję downloadFile jako async i utwórz obietnicę oczekiwania na zakończenie określonego zadania za pomocą słowa kluczowego await . Odwzoruj tablicę adresów URL na funkcję pobierania i przekaż nazwę folderu lokalnego — w tym przypadku pliki , w którym mają być przechowywane pliki.

Pobieranie plików do lokalnego systemu plików

Wbudowane funkcje Node, takie jak fs i https, ułatwiają napisanie narzędzia do pobierania plików. Aby było to jeszcze łatwiejsze, możesz użyć modułu innej firmy, takiego jak pobieranie.

Obie metody umożliwiają pobieranie plików ze zdalnego serwera i zapisywanie ich w lokalnym systemie plików. Powinieneś wybrać najlepszą metodę dla swoich potrzeb i użyć jej w następnej aplikacji Node.js.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *