在 Node 中下载远程文件 URL 数组的最有效方法?
Most efficient way to download array of remote file URLs in Node?
我正在开发一个 Node 项目,其中有一组文件,例如
var urls = ["http://web.site/file1.iso", "https://web.site/file2.pdf", "https://web.site/file3.docx", ...];
我希望以最有效的方式将这些文件下载到本地。这个数组中可能有几十个 URL...有没有一个好的库可以帮助我抽象出来?我需要一些我可以用数组调用的东西和所需的本地目录,它将遵循重定向、使用 http 和 https、智能地限制同时下载等。
node-fetch 是一个可爱的小库,它为节点带来了 fetch
能力。由于 fetch
returns 一个承诺,管理并行下载很简单。这是一个例子:
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))
})
})
我正在开发一个 Node 项目,其中有一组文件,例如
var urls = ["http://web.site/file1.iso", "https://web.site/file2.pdf", "https://web.site/file3.docx", ...];
我希望以最有效的方式将这些文件下载到本地。这个数组中可能有几十个 URL...有没有一个好的库可以帮助我抽象出来?我需要一些我可以用数组调用的东西和所需的本地目录,它将遵循重定向、使用 http 和 https、智能地限制同时下载等。
node-fetch 是一个可爱的小库,它为节点带来了 fetch
能力。由于 fetch
returns 一个承诺,管理并行下载很简单。这是一个例子:
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))
})
})