const download_file = async (url, save) => {
const writer = fs.createWriteStream(path.resolve(save))
const response = await axios({
url,
method: 'GET',
responseType: 'stream'
})
response.data.pipe(writer)
return new Promise((resolve, reject) => {
writer.on('finish', resolve)
writer.on('error', reject)
})
}
这个函数稍显复杂,因为它引入了两个新包:`fs` 和 `axios`。`fs` 包中的第一个方法不言自明,它创建了一个可写流。你可以在此处了解更多相关信息。
接下来,我们使用 axios 连接服务器的 URL,并告知 axios 响应类型为“流”。最后,由于我们正在处理流,我们将使用 `pipe()` 函数将响应写入流中。
完成上述配置后,剩下的就是将这两个函数组合成可运行的程序。只需添加以下几行代码即可:
let i = 1
const images = await get_links('https://www.iaai.com/Search?url=PYcXt9jdv4oni5BL61aYUXWpqGQOeAohPK3E0n6DCLs%3d')
images.forEach(async (img) => {
await download_file(img, `./images/${i}.svg`)
i += 1
})