1. 程式人生 > 其它 >nodejs 使用request 下載檔案報錯 Error: read ECONNRESET 的修復方式

nodejs 使用request 下載檔案報錯 Error: read ECONNRESET 的修復方式

技術標籤:前端技術下載檔案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); }); }

啪的一下,很快啊,問題就解決了