nodejs 使用request 下載檔案報錯 Error: read ECONNRESET 的修復方式
阿新 • • 發佈:2020-12-07
技術標籤:前端技術下載檔案nodejsaxiosrequest
最近在編寫影象識別模型的時候, 需要爬取一些樣本圖片,於是用NodeJS編寫了一個簡單的爬蟲。但是在下載圖片過程中, 經常會報如下錯誤:
報錯部分程式碼:
//通過流的方式,把圖片寫到本地/image目錄下,並用新聞的標題和圖片的標題作為圖片的名稱
await request(gif).pipe(fs.createWriteStream('./appleCode/' + img_filename)).on;
一開始我以為是伺服器對IP進行了頻率驗證,後來檢視 request 發現官方已經棄用了。於是盲猜是 pipe 流同時執行的程序超出了限制。
條條大路,通羅馬,於是改用 Axios 來下載檔案
npm install axios
然後參考官方示例編寫一個下載操作函式
/**
* @param {string} imgUrl 圖片地址
* @param {string} filepath 檔案儲存的本地目錄
* @param {string} flieName 儲存的檔名
*/
async function downloadFile(imgUrl, filepath, flieName) {
if (!fs.existsSync(filepath)) {
fs.mkdirSync(filepath);
}
const mypath = path.resolve(filepath, flieName);
const writer = fs.createWriteStream(mypath); // 建立寫入物件
const response = await Axios({
url: imgUrl,
method: "GET",
responseType: "stream",
}); // 請求圖片地址獲取二進位制資料流
response.data.pipe(writer); // 寫入圖片資料到檔案中
return new Promise((resolve, reject) => {
writer.on("finish", resolve);
writer.on("error", reject);
});
}
啪的一下,很快啊,問題就解決了