发出GET请求并获取节点stream

我试图发送formData ,一个来自我使用请求的图像stream

问题是请求在formData请求后formData 。 有什么办法可以pipe理图像请求识别? 但可以自由地将参数添加到formData

例如:

 var req = request({ method: 'POST', url: 'http://www.foo.bar/api/v1/tag/recognize', formData: { image_file: request('http://visual-recognition-demo.mybluemix.net/images/horses.jpg'), param2: 'value2' }, json: true, }); 

我如何着火:

request('http://visual-recognition-demo.mybluemix.net/images/horses.jpg')所以这个响应可以在req

更新:似乎在Content-Length头缺less
http://visual-recognition-demo.mybluemix.net/images/horses.jpg响应
你只能得到Transfer-Encoding: chunked

更多细节在这里

看看这部分的文档。 你所描述的基本上就是这个块

 request.get('http://google.com/img.png').pipe(request.put('some_url')); 

请注意文档

当这样做时,内容types和内容长度被保存在PUT头部中。

另请注意,如果不指定callback,请求将始终返回一个Stream。 如果您提供callback,则会尝试将响应转换为string。 使用encoding:null来让它返回原始字节。
示例 –

 request({ url: 'some_url', //your image encoding: null //returns resp.body as bytes }, callback..) 

要将呼叫链接在一起(一个接一个地运行),可以嵌套callback或使用promise。 例如,在另一个请求完成后运行请求 –

 var request = require('request'); //1st request('first_url', function (error, response, body) { if (!error && response.statusCode == 200) { //2nd request('other_url', function (error, response, body) { //process resp }); } }); 

或者甚至更好,将请求callback代码转换为Promises。 看到如蓝鸟承诺库如何做到这一点。

这里有一个蓝鸟的例子(然后使用迭代的方式工作)

 var Promise = require("bluebird"); Promise.promisifyAll(require("request")); request.getAsync('some_url').then(function(resp) { request.getAsync('some_other_url').then(..processing code..); });