node.js使用fetch抓取網路資料後儲存到檔案

 


  • url 為要抓取網路檔案
  • filePath 為放置檔案路徑


引用

方法1. 針對commonjs

const fs = require('node:fs/promises');

或是

方法2. 針對mjs

import fs from 'node:fs/promises';


抓取

const rsp = await fetch(url, {
method: 'GET',
signal: AbortSignal.timeout(5000)
});
if (!rsp.ok) {
throw new Error(`http not okay ${rsp.status}`);
}


儲存

方法1. 使用blob()儲存
const blob = await rsp.blob();
const buf = Buffer.from(await blob.arrayBuffer());
await fs.writeFile(filePath, buf);


方法2. 使用arrayBuffer()
const abuf = await rsp.arrayBuffer();
await fs.writeFile(filePath, Buffer.from(abuf));


其他

之前使用axios的寫法參考

const rsp = await axios({
method: 'get',
url: url,
responseType: 'stream',
timeout: 5000
})
if (rsp.status !== 200)
throw new Error(`http status != 200 ${rsp.status}`);
else if (!rsp.data)
throw new Error(`not found data for ${filePath}`);
rsp.data.pipe(fs.createWriteStream(filePath))


留言