詳解Nodejs 通過 fs.createWriteStream 保存文件
工作中難免會遇到處理大文件的時候,有這種stream的處理方式,就不需要一次處理太大的文件,從而導(dǎo)致內(nèi)存不夠用,或者內(nèi)存占用太多。
fs.createWriteStream 似乎不會自己創(chuàng)建不存在的文件夾,所以在使用之前需要注意,保存文件的文件夾一定要提前創(chuàng)建。
const path = '/xxxxxx/ddd/'; if (!fs.existsSync(path)) { fs.mkdirSync(path); }
創(chuàng)建完文件夾,我們就可以進(jìn)行文件添加操作了。我們希望在使用文件添加操作的時候是通過saveFile(filePath, fileData);這樣的方式來調(diào)用。
這里我采用了Promise的方式,個人比較喜歡這樣的方式
/** * [saveFileWithStream description] * @param {String} filePath [文件路徑] * @param {Buffer} readData [Buffer 數(shù)據(jù)] */ static saveFile(filePath, fileData) { return new Promise((resolve, reject) => { // 塊方式寫入文件 const wstream = fs.createWriteStream(filePath); wstream.on('open', () => { const blockSize = 128; const nbBlocks = Math.ceil(fileData.length / (blockSize)); for (let i = 0; i < nbBlocks; i += 1) { const currentBlock = fileData.slice( blockSize * i, Math.min(blockSize * (i + 1), fileData.length), ); wstream.write(currentBlock); } wstream.end(); }); wstream.on('error', (err) => { reject(err); }); wstream.on('finish', () => { resolve(true); }); }); }
實(shí)際調(diào)用的時候,如下
try { await saveFileWithStream(filePath, fileData); // 這里的fileData是Buffer類型 } catch (err) { console.log(err.stack); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
node.js中使用q.js實(shí)現(xiàn)api的promise化
這篇文章主要介紹了node.js中使用q.js實(shí)現(xiàn)api的promise化,promise一個標(biāo)準(zhǔn),它描述了異步調(diào)用的返回結(jié)果,包括正確返回結(jié)果和錯誤處理,需要的朋友可以參考下2014-09-09node.js使用zlib模塊進(jìn)行數(shù)據(jù)壓縮和解壓操作示例
這篇文章主要介紹了node.js使用zlib模塊進(jìn)行數(shù)據(jù)壓縮和解壓操作,結(jié)合實(shí)例形式詳細(xì)分析了node.js基于zlib模塊創(chuàng)建數(shù)據(jù)流以及壓縮和解壓縮等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02node+axios實(shí)現(xiàn)服務(wù)端文件上傳示例
這篇文章主要介紹了node+axios實(shí)現(xiàn)服務(wù)端文件上傳示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06node連接kafka2.0實(shí)現(xiàn)方法示例
這篇文章主要介紹了node連接kafka2.0,nodejs連接kafka2.0的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了kafka2.0的功能、原理、以及node.js連接kafka2.0的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2023-05-05使用Node.js find-up在父目錄中高效尋找文件與目錄
find-up 是一個小巧但功能強(qiáng)大的 Node.js 包,它能幫助我們實(shí)現(xiàn)這一需求,本文將深入探究如何使用 find-up 進(jìn)行有效搜索,并結(jié)合豐富的代碼演示幫助大家快速掌握其用法,需要的朋友可以參考下2024-05-05