Самый эффективный способ загрузки массива URL удаленных файлов в Node? - PullRequest
0 голосов
/ 26 июня 2019

Я работаю над проектом Node, где у меня есть массив файлов, таких как

var urls = ["http://web.site/file1.iso", "https://web.site/file2.pdf", "https://web.site/file3.docx", ...];

Я хочу скачать эти файлы локально наиболее эффективным способом. В этом массиве может быть несколько десятков URL-адресов ... Есть ли хорошая библиотека, которая поможет мне абстрагироваться? Мне нужно что-то, что я могу вызвать с массивом и нужным локальным каталогом, к которому будут следовать перенаправления, работать с http и https, разумно ограничивать одновременные загрузки и т. Д.

1 Ответ

1 голос
/ 26 июня 2019

node-fetch - прекрасная небольшая библиотека, которая предоставляет возможность fetch узлу.Поскольку fetch возвращает обещание, управлять параллельными загрузками очень просто.Вот пример:

const fetch = require('node-fetch')
const fs = require('fs')

// You can expand this array to include urls are required
const urls = ['http://web.site/file1.iso', 'https://web.site/file2.pdf']

// Here we map the list of urls -> a list of fetch requests
const requests = urls.map(fetch)

// Now we wait for all the requests to resolve and then save them locally
Promise.all(requests).then(files => {
  files.forEach(file => {
    file.body.pipe(fs.createWriteStream('PATH/FILE_NAME.EXT'))
  })
})

В качестве альтернативы, вы можете написать каждый файл по мере его разрешения:

const fetch = require('node-fetch')
const fs = require('fs')

const urls = ['http://web.site/file1.iso', 'https://web.site/file2.pdf']

urls.map(file => {
  fetch(file).then(response => {
    response.body.pipe(fs.createWriteStream('DIRECTORY_NAME/' + file))
  })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...