您好,登錄后才能下訂單哦!
工作中難免會遇到處理大文件的時候,有這種stream的處理方式,就不需要一次處理太大的文件,從而導致內存不夠用,或者內存占用太多。
fs.createWriteStream 似乎不會自己創建不存在的文件夾,所以在使用之前需要注意,保存文件的文件夾一定要提前創建。
const path = '/xxxxxx/ddd/'; if (!fs.existsSync(path)) { fs.mkdirSync(path); }
創建完文件夾,我們就可以進行文件添加操作了。我們希望在使用文件添加操作的時候是通過saveFile(filePath, fileData);這樣的方式來調用。
這里我采用了Promise的方式,個人比較喜歡這樣的方式
/** * [saveFileWithStream description] * @param {String} filePath [文件路徑] * @param {Buffer} readData [Buffer 數據] */ 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); }); }); }
實際調用的時候,如下
try { await saveFileWithStream(filePath, fileData); // 這里的fileData是Buffer類型 } catch (err) { console.log(err.stack); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。