Javascript 如何使用Fetch API下载和保存文件?(Node.js)
我有一个可能很大(100+Mb)文件的url,如何使用fetch将其保存在本地目录中 我环顾四周,但似乎没有太多关于如何做到这一点的资源/教程Javascript 如何使用Fetch API下载和保存文件?(Node.js),javascript,node.js,xmlhttprequest,fetch,fetch-api,Javascript,Node.js,Xmlhttprequest,Fetch,Fetch Api,我有一个可能很大(100+Mb)文件的url,如何使用fetch将其保存在本地目录中 我环顾四周,但似乎没有太多关于如何做到这一点的资源/教程 谢谢大家! 使用Fetch API,您可以编写一个函数,从URL下载,如下所示: const downloadFile = (async (url, path) => { const res = await fetch(url); const fileStream = fs.createWriteStream(path); await
谢谢大家! 使用Fetch API,您可以编写一个函数,从URL下载,如下所示:
const downloadFile = (async (url, path) => {
const res = await fetch(url);
const fileStream = fs.createWriteStream(path);
await new Promise((resolve, reject) => {
res.body.pipe(fileStream);
res.body.on("error", reject);
fileStream.on("finish", resolve);
});
});
如果您希望避免像另一个非常好的答案中那样明确做出承诺,并且可以为整个100+MB文件构建缓冲区,那么您可以做一些更简单的事情:
const fetch = require('node-fetch');
const {writeFile} = require('fs');
const {promisify} = require('util');
const writeFilePromise = promisify(writeFile);
function downloadFile(url, outputPath) {
return fetch(url)
.then(x => x.arrayBuffer())
.then(x => writeFilePromise(outputPath, Buffer.from(x)));
}
但是另一个答案将更加高效,因为它将接收到的数据流直接传输到一个文件中,而无需在缓冲区中累积所有数据流。const{createWriteStream}=require('fs');
const{pipeline}=require('stream');
const{promisify}=require('util');
const fetch=require('node-fetch');
const downloadFile=async(url,路径)=>promisify(管道)(
(等待获取(url)).body,
createWriteStream(路径)
);
Node.js没有集成Fetch。为什么要进行Fetch?Node支持http?我正在创建一个Electron应用程序,支持fetch。为什么要使用fetch而不是纯http,因为它更容易使用(或者说目前为止似乎是这样)。如果有人想用fetch api在浏览器中保存文件(并找到了这个答案),那么请看这里:您甚至可以通过编写res.body.on('error',reject)来缩短文件的长度代码>和fileStream.on('finish',resolve)
.I get errorTypeError:无法读取destroyer(internal/streams/pipeline.js:23:10)上未定义的属性“on”