詳解Nodejs通過(guò)fs.createWriteStream保存文件

工作中難免會(huì)遇到處理大文件的時(shí)候,有這種stream的處理方式,就不需要一次處理太大的文件,從而導(dǎo)致內(nèi)存不夠用,或者內(nèi)存占用太多。

10余年專注成都網(wǎng)站制作,企業(yè)網(wǎng)站制作,個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站制作,高端網(wǎng)頁(yè)制作,對(duì)電動(dòng)窗簾等多個(gè)行業(yè),擁有多年的網(wǎng)站營(yíng)銷經(jīng)驗(yàn)。

fs.createWriteStream 似乎不會(huì)自己創(chuàng)建不存在的文件夾,所以在使用之前需要注意,保存文件的文件夾一定要提前創(chuàng)建。

const path = '/xxxxxx/ddd/';

if (!fs.existsSync(path)) {
 fs.mkdirSync(path);
}

創(chuàng)建完文件夾,我們就可以進(jìn)行文件添加操作了。我們希望在使用文件添加操作的時(shí)候是通過(guò)saveFile(filePath, fileData);這樣的方式來(lái)調(diào)用。

這里我采用了Promise的方式,個(gè)人比較喜歡這樣的方式

 /**
  * [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)用的時(shí)候,如下

try {
 await saveFileWithStream(filePath, fileData); // 這里的fileData是Buffer類型
} catch (err) {
 console.log(err.stack);
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

新聞標(biāo)題:詳解Nodejs通過(guò)fs.createWriteStream保存文件
文章路徑:http://bm7419.com/article20/pcedjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、定制開發(fā)、標(biāo)簽優(yōu)化、網(wǎng)站營(yíng)銷、網(wǎng)站設(shè)計(jì)公司營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)