在节点中发布图像的最佳方法是什么?

时间:2015-12-31 00:04:14

标签: node.js image-processing request http-post

在节点中将一些图像上传到服务并捕获响应的最佳方法是什么?

我希望上传一些像

的图像
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

大多数请求包示例都使用表单或多部分,而我只想发送一个简单的图像文件。 或许有另一种更合适的节点方式来做到这一点?

1 个答案:

答案 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');
  });

这看起来非常复杂,所以如果有更简单的方法仍然感兴趣。