我正在尝试以formData
的形式发送来自我使用request的图片的流
问题是请求在formData
请求后触发。
有什么方法可以管理图像请求识别吗?但是可以自由地向formData
添加参数吗?
e.g:
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
标题
http://visual-recognition-demo.mybluemix.net/images/horses.jpg回复
你只得到Transfer-Encoding: chunked
更多详情here
答案 0 :(得分:3)
查看文档this part。您所描述的内容基本上就是这个块
request.get('http://google.com/img.png').pipe(request.put('some_url'));
请注意文档
执行此操作时,内容类型和内容长度将保留在 PUT标头。
另请注意,如果您未指定回调,请求将始终返回流。如果确实提供了回调,它会尝试将响应转换为String。使用encoding:null
使其返回原始字节
示例 -
request({
url: 'some_url', //your image
encoding: null //returns resp.body as bytes
}, callback..)
要将呼叫链接在一起(一个接一个地运行),您可以嵌套回调或使用promises。例如,在另一个请求完成后运行请求 -
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
});
}
});
甚至更好,将请求回调代码转换为Promises。 See a promise library like Bluebird关于如何做到这一点。
以下是bluebird的一个例子(然后用于迭代时效)
var Promise = require("bluebird");
Promise.promisifyAll(require("request"));
request.getAsync('some_url').then(function(resp) {
request.getAsync('some_other_url').then(..processing code..);
});