【发布时间】:2014-04-25 20:31:35
【问题描述】:
我已经看过并阅读了一些教程,这些教程表明您可以像乐高积木一样将一个流传输到另一个流,但是我找不到任何关于如何在将流通过管道传输到您的对象时捕获管道命令的任何内容。
我的意思是我如何创建一个具有函数的对象以便我可以做到:
uploadWrapper = function (client, file, callback) {
upload = function (client,file,callback){
var file = file
// this.data = 'undefined'
stream.Writable.call(this);
this.end = function () {
if(typeof this.data !== 'undefined') file.data = this.data
callback(file.data,200)
}
// var path = urlB.host('upload').object('files',file.id).action('content').url
// // client.upload(path,file,callback)
}
util.inherits(upload,stream.Writable)
upload.prototype._write = function (chunk, encoding, callback) {
this.data = this.data + chunk.toString('utf8')
callback()
}
return new upload(client,file,callback)
}
exports.upload = uploadWrapper
当数据通过管道传输到我的对象时,我该如何处理?
我看过但我真的找不到任何关于这个的东西(也许我没有看过写的地方?)。
谁能指出我正确的方向?
如果知道它有帮助,我想做的就是捕获一个数据流并构建一个包含二进制编码数据的字符串;无论是来自文件流还是来自服务器的请求流(即多部分请求的文件中的数据)对象。
编辑:我已经更新了记录数据的代码
编辑:我已经修复它,我现在可以接收管道数据,我必须将代码放在返回实现流的函数的包装器中。
编辑:现在不同的问题,_read 中的this.data 不是以上传功能中的this.data 可以读取的方式存储。
编辑:好的,现在我可以处理回调并捕获数据,我需要弄清楚如何判断数据是通过管道传输到它还是作为普通函数使用。
【问题讨论】:
-
听起来你让这变得比它需要的更复杂。如果您只想处理来自文件流的传入数据,只需添加一个
.on('data', cb);事件处理程序。如果您确实需要将其通过管道传输到您的对象,请确保您的对象是可写流。 -
你的意思是这样的吗?(见改变的例子)
-
什么是
client?是否可以流式传输上传而不是缓冲写入流中的所有数据? -
Client 是我构建的一个模块,它是我一直在开发的 SDK for box 的一部分。文件上传工作,但目前必须直接(从服务器上的文件)或从包含二进制编码数据的字符串提供数据。至少有了这个(管道),它可以让我从传入的流中捕获数据,比如来自多部分表单或文件流或任何流。
-
我仍然认为处理这个问题的最好方法是添加一个
on data处理程序,而不是与pipe混为一谈,我以后也许可以写一个这样的例子。除此之外,您已经开始走上正确的道路,使您的对象成为可写流,所以如果这是您想要采取的路线,请继续遵循,我也会看看我可以在这个选项上添加什么。跨度>