在节点中将一些图像上传到服务并捕获响应的最佳方法是什么?
我希望上传一些像
的图像curl -F media=@$MEDIAFILE $URL
会这样做。
我已经让request library使用了流和管道,但我无法看到如何捕获输出/响应。
// define a read stream from our source file
var inFile = 'media/uploads/images/abby.jpg';
var source = fs.createReadStream(inFile);
// pipe data to POST request
source.pipe(request.post(wcUrl)
.on('error', function(error){
console.log("ERROR:", error);
})
.on('response', function(response, p1, p2){
console.log(Object.keys(response));
console.log('headers', response.headers);
console.log('statusCode', response.statusCode);
console.log('body', response.body);
})
);
我可以看到statusCode是200响应OK,但无法获得响应的主体。没有返回的字段似乎有有用的数据。
[ '_readableState',
'readable',
'domain',
'_events',
'_eventsCount',
'_maxListeners',
'socket',
'connection',
'httpVersionMajor',
'httpVersionMinor',
'httpVersion',
'complete',
'headers',
'rawHeaders',
'trailers',
'rawTrailers',
'upgrade',
'url',
'method',
'statusCode',
'statusMessage',
'client',
'_consuming',
'_dumped',
'req',
'request',
'toJSON',
'caseless' ]
headers { server: 'nginx/1.8.0',
date: 'Thu, 31 Dec 2015 00:00:34 GMT',
'content-type': 'text/plain',
'content-length': '109',
connection: 'close' }
statusCode 200
body undefined
大多数请求包示例都使用表单或多部分,而我只想发送一个简单的图像文件。 或许有另一种更合适的节点方式来做到这一点?
答案 0 :(得分:0)
啊哈,我必须在响应中嵌套另一个事件:
.on('response', function(response, p1, p2) {
response.on('data', function(data) {
console.log('finalData', data.toString() );
console.log('received ' + data.length + ' bytes of compressed data');
});
这看起来非常复杂,所以如果有更简单的方法仍然感兴趣。