我正在尝试编写一个节点模块,该模块接受传入的管道二进制(或base-64编码)流,但是坦率地说,我什至不知道从哪里开始。我在Node docs中看不到任何有关处理传入流的示例;我只看到食用它们的例子吗?
举例来说,我希望能够做到这一点:
var asset = new ProjectAsset('myFile', __dirname + '/image.jpg')
var stream = fs.createReadStream(__dirname + '/image.jpg', { encoding: 'base64' }).pipe(asset)
stream.on('finish', function() {
done()
})
我ProjectAsset
看起来像这样,但是我不知道接下来要去哪里:
'use strict'
var stream = require('stream'),
util = require('util')
var ProjectAsset = function() {
var self = this
Object.defineProperty(self, 'binaryData', {
configurable: true,
writable: true
})
stream.Stream.call(self)
self.on('pipe', function(src) {
// does it happen here? how do I set self.binaryData?
})
return self
}
util.inherits(ProjectAsset, stream.Stream)
module.exports = ProjectAsset
module.exports.DEFAULT_FILE_NAME = 'file'
可以继承stream.Stream
并使其起作用,但是根据我建议从文档中获得的内容,建议从继承stream.Writable
。管道成stream.Writable
你需要有_write(chunk, encoding, done)
规定来处理管道。这是一个例子:
var asset = new ProjectAsset('myFile', __dirname + '/image.jpg')
var stream = fs.createReadStream(__dirname + '/image.jpg', { encoding: 'base64' }).pipe(asset)
stream.on('finish', function() {
console.log(asset.binaryData);
})
项目资产
'use strict'
var stream = require('stream'),
util = require('util')
var ProjectAsset = function() {
var self = this
self.data
self.binaryData = [];
stream.Writable.call(self)
self._write = function(chunk, encoding, done) {
// Can handle this data however you want
self.binaryData.push(chunk.toString())
// Call after processing data
done()
}
self.on('finish', function() {
self.data = Buffer.concat(self.binaryData)
})
return self
}
util.inherits(ProjectAsset, stream.Writable)
module.exports = ProjectAsset
module.exports.DEFAULT_FILE_NAME = 'file'
如果您还希望阅读的内容stream
,请查看继承自stream.Duplex
该_read(size)
方法,并包括该方法。
如果您正在做一些更简单的事情,还可以使用简化的构造函数api。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句