Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

Baixar arquivos para armazenamento local em vez de mantê-los no armazenamento em nuvem tem várias vantagens. Isso inclui acesso mais fácil, acesso sem conexão com a Internet e propriedade total de seus dados.

Você pode baixar arquivos únicos e múltiplos usando módulos Node.js integrados. Você também pode usar uma biblioteca de terceiros para obter os mesmos resultados.

Baixando arquivos sem uma biblioteca de terceiros

Para baixar um arquivo usando o Node.js, sem a ajuda de pacotes de terceiros, você precisará de três módulos principais do Node.js: fs, https, e caminho.

O fs O módulo suporta muitas tarefas de arquivo, incluindo ler, criar, atualizar, remover e renomear. O https O módulo cria um servidor da Web para lidar com solicitações e fornecer respostas. O caminho O módulo fornece uma maneira de interagir com diretórios e caminhos de arquivos.

Usando esses módulos, você pode enviar uma solicitação HTTP GET para acessar um recurso de arquivo de um servidor da Web e, em seguida, fazer uma cópia do recurso em seu sistema local.

Para começar, importe os módulos necessários:

const https = exigir('https');
const fs = exigir('fs');
const caminho = exigir('caminho');

Você precisará usar o nome do arquivo da URL como um bom nome padrão para salvá-lo. Você pode usar o caminho do módulo .basename() método para obter o nome de um arquivo de sua URL. Esse método usa um argumento de caminho e retorna a última parte de um caminho.

Por exemplo:

const nome do arquivo = path.basename (url);

Em seguida, solicite o arquivo do servidor invocando o https.get() método. Este método usa a URL como o primeiro argumento e uma função de retorno de chamada para a resposta como o segundo argumento

Passe o url variável como o primeiro argumento e, em seguida, uma função de retorno de chamada para processamento quando este método recebe um fluxo de resposta:

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

Na função de retorno de chamada, você pode usar o fs.createWriteStream() método para criar um novo fluxo gravável, passando o nome do arquivo variável como um argumento.

Por exemplo:

const fileStream = fs.createWriteStream (nome do arquivo);
res.cano(fileStream);

O criarWriteStream() O método facilita o processo de gravação de dados em um arquivo, especialmente quando você está lidando com grandes blocos de dados.

O cano() método então envia o fluxo de dados de resposta GET para o fileStream objeto.

Para registrar uma mensagem no console depois que o script terminar de baixar o arquivo, anexe um .sobre() emissor de evento para o fileStream variável:

fileStream.on('terminar', () => {
fileStream.fechar();
console.registro('Baixar finalizado');
});

O objeto fileStream emite um terminar evento quando tiver gravado todos os dados no arquivo. Pegue isso através do .sobre() método e fornecer uma função de retorno de chamada para fechar o fileStream e registre uma mensagem no console.

Para uma melhor execução e reutilização de script eficiente, envolva esse código em uma função que usa a URL como argumento:

função⇬ Fazer download do arquivo(url) {
const nome do arquivo = path.basename (url);

https.get (url, (res) => {
const fileStream = fs.createWriteStream (nome do arquivo);
res.cano(fileStream);

fileStream.on('terminar', () => {
fileStream.fechar();
console.registro('Baixar finalizado')
});
})
}

Para executar a função, chame-a e passe a URL do arquivo que deseja baixar:

⇬ Fazer download do arquivo([url do arquivo]);

Para executar o script, abra seu terminal e digite seguido pelo nome do arquivo JavaScript:

[nome do roteiro]

Este script fará o download da URL do arquivo que você passou para o ⇬ Fazer download do arquivo() função e salve-o em seu diretório de trabalho.

Lidando com erros ao baixar arquivos

No Node.js, erros específicos como gravação no stream, conexão de serviço ruim ou problemas com o próprio arquivo podem ocorrer durante o download de arquivos. É crucial registrar mensagens de erro quando esses erros ocorrem para poder resolver o problema.

Tentar/Pegar Bloco

Um bloco try-catch é uma estrutura de programação que permite lidar com possíveis erros e exceções em seu código.

Os blocos try-and-catch compõem o bloco try...catch. O código do bloco try é executado primeiro e o código do bloco catch é executado se o bloco try lançar uma exceção.

tentar {
⇬ Fazer download do arquivo([url do arquivo]);
} pegar (erro) {
console.log (erro);
}

Use um bloco try/catch para garantir que você possa detectar quaisquer erros relacionados ao download. Você pode lidar com qualquer erro conforme necessário, como registrá-lo no console ou tentar novamente o download.

Código de status de resposta HTTP

Os códigos de status para respostas HTTP mostram se uma determinada solicitação HTTP foi realizada com sucesso.

Por exemplo:

https.get (url, (res) => {
const código = res.statusCode();
console.log (código)
const fileStream = fs.createWriteStream (nome do arquivo);
});

Se a solicitação retornar um código de status fora do intervalo de sucesso, 200-299, Houve um problema com o pedido. Verifique o código de status HTTP e, em seguida, procure o significado do código de status lidar com o erro conforme necessário.

Baixando vários arquivos

Você pode baixar vários arquivos simultaneamente passando os URLs dos arquivos como argumentos durante a execução nó [nome do script]. Para executar esta tarefa, você deve modificar certas partes do seu script.

Em JavaScript, os argumentos passados ​​junto com o estão disponíveis em process.argv, uma propriedade do objeto Node.js global. Essa propriedade retorna uma matriz dos argumentos da linha de comando. O primeiro elemento nesta matriz deve ser , o comando real que você executa. O segundo será o nome do arquivo do script, então cada argumento a seguir deve ser um URL.

Para baixar vários arquivos de uma só vez, salve a matriz de processo.argv em uma variável. Em seguida, execute o método slice() para remover os dois primeiros elementos, que não são URLs:

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

O fatiar() O método cria uma nova matriz de elementos selecionados em uma matriz. Este método seleciona de um início especificado para um fim especificado (não inclusivo).

Neste caso, passar um valor de 2 remove o nome do comando e seu nome de arquivo de script.

Finalmente, usando o método map do JavaScript, passe cada elemento no URLs matriz para ⇬ Fazer download do arquivo():

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

Para executar o código, digite o comando junto com o nome do seu arquivo JavaScript e os URLs que você deseja baixar:

[nome do roteiro]url1url2url3

Usando uma biblioteca de terceiros

Você também pode baixar arquivos usando uma biblioteca de terceiros como o npm download pacote.

Dentro do diretório do script, execute o seguinte comando npm para instalar o download pacote:

npm instalar download

Exija o pacote baixado em seu script e salve os argumentos da linha de comando em uma matriz:

const baixar = exigir('download');
const args = processo.argv;
const urls = args.slice(2);

Agora você pode usar o download biblioteca para baixar arquivos. Você pode fazer isso de várias maneiras, dependendo do seu objetivo específico.

Por exemplo:

assíncronofunção⇬ Fazer download do arquivo(URLs){
aguardamPromessa.all (urls.map((url) => baixar (url, "arquivos")))
};

downloadArquivo (urls);

Declare o ⇬ Fazer download do arquivo funciona como assíncrono, e crie um Promessa esperar até que a tarefa específica seja concluída com o aguardam palavra-chave. Mapeie o URLs matriz para o download função e passar o nome de uma pasta local—"arquivos", neste caso, para armazenar os arquivos.

Baixando arquivos para o sistema de arquivos local

As funções integradas do Node, como fs e https, facilitam a criação de um downloader de arquivos. Para facilitar ainda mais, você pode usar um módulo de terceiros como o download.

Ambos os métodos permitem baixar arquivos de um servidor remoto e salvá-los no sistema de arquivos local. Você deve escolher o melhor método para suas necessidades e usá-lo em seu próximo aplicativo Node.js.