Nodejs將Buffer轉化成Stream


編寫接口的時候經常需要將上傳的文件保存到數據庫的情況,在nodejs中文件上傳可以使用multer來接收上傳的文件。如果不想保存到本地,而是直接保存到mongodb中,就要將buffer對象轉化成流再寫入數據庫。

雖然fs模塊的接口文檔中說該模塊可以接收Buffer對象作為參數,但實踐中發現傳入buffer對象會報錯:

var fs = require('fs');
var b = Buffer([80,80,80,80]);
var readStream = fs.createReadStream(b);
console.log(readStream);

// ReadStream {
//   ...
//   path: <Buffer 50 50 50 50>,
//   ...
// }
//
// Error: ENOENT: no such file or directory, open 'PPPP'

根據
https://stackoverflow.com/questions/45891242/how-to-pass-a-buffer-as-argument-of-fs-createreadstream/45891702#45891702
的回答,fs的內部是調用open()函數,所以實際上只能接收文件路徑,並不能使用buffer對象作為參數。

為了實現這個目的,就要將Buffer對象轉化成stream,這列可以使用一個stream模塊:

var stream = require('stream');
// 創建一個bufferstream
var bufferStream = new stream.PassThrough();
//將Buffer寫入
bufferStream.end(new Buffer('Test data.'));
//進一步使用
bufferStream.pipe(process.stdout)

這樣就可以將buffer轉化成stream。

參考https://stackoverflow.com/questions/16038705/how-to-wrap-a-buffer-as-a-stream2-readable-stream


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM