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))
留言