通过POST将图像从Python发送到NodeJS + Express

时间:2017-07-25 20:58:14

标签: java python node.js express

在前端设备上,我使用Python运行OpenCV。然后,我将计算的图像发送到服务器以进行进一步处理。我的问题是我无法使用Express解码图像。

我从这个前端设备发送图像(在Python 2.7中):

import requests

url = "http://10.1.10.194:3000"
files ={'image':open('testimg.jpg','rb')}
r = requests.post(url,files=files)

这会成功向我的Express应用程序发送一个post命令,该应用程序会听到post请求并执行以下操作:

app.post('/', function(request, respond) {
console.log(request.headers)
var image = request.body
fs.writeFile('test.jpg', image, function(err){
  if (err) throw err
      console.log('File saved.');
        });
respond.end('thanks');
});

我知道我正确接收图片,因为标题正确列出了文件大小,但是当我打印图像时,它只是一个文本文件[对象对象]。

Express应用程序的输出位于:

{ host: '10.1.10.194:3000',
  'content-length': '14551',
  'accept-encoding': 'gzip, deflate',
  accept: '*/*',
  'user-agent': 'python-requests/2.9.1',
  connection: 'keep-alive',
  'content-type': 'multipart/form-data; boundary=e664d9584c484962bfe4d1577bd4d91b' }
POST / 200 15.754 ms - -
File saved.

我的Express应用程序成功加载了body-parser,但我似乎无法弄清楚如何从request.body中获取我的原始数据。欢迎任何建议。谢谢!

2 个答案:

答案 0 :(得分:2)

您是否尝试使用Multer模块?

var multer = require('multer');
var upload = multer({dest: './uploads/'});

app.post('/', upload.single('file'), function(request, respond) {
    if(request.file) console.log(request.file);
}

https://github.com/expressjs/multer

答案 1 :(得分:0)

您需要等待提取帖子数据。

            if (request.method == 'POST') {
                var body = '';
                request.on('data',function(data) { body += data; });
                request.on('end', function(data) {
                 fs.writeFile('test.jpg', body, function(err){ ... })

            });