使用AsyncHttpClient将图像从android发送到Node.js

时间:2015-05-28 06:48:54

标签: android node.js mongodb asynchttpclient

我想将图像从android app发送到node.js服务器以保存到服务器端的MongoDB中。我使用AsyncHttpClient发布请求。

我的代码是这样的:

Android - >

RequestParams param = new RequestParams();
param.put("email", email);
param.put("image", file, "image/jpg");

System.out.println("Param : " + param);
HttpClient.post("uploadImg_Profile/", param, new AsyncHttpResponseHandler() {

Node.js - >

app.js->
app.post('/uploadImg_Profile/', function(req, res){
    uploadImg_Profile.uploadImg_Profile(req, res);
})

uploadImg_Profile.js->

exports.uploadImg_Profile= function(req, res){
    var User = new user({ 
        email : req.body.email,
        img : req.body.image
    });
    //
    console.log("req : " + req);

    console.log("email : "+ User.email);
    console.log("image : " + User.img);

但是console.log结果未定义。我认为这是看到 jhgdsfejdi734634jdhfdf 这样的BSON类型结果。

  1. 如何获取img数据?

  2. 有一种方法可以动态地从File对象中获取文件的类型吗?

2 个答案:

答案 0 :(得分:0)

您需要在node.js代码中使用正确类型的正文解析器 - 从您获得的结果来看,您似乎并未将其解释为多部分表单。

您需要注册用于解释POST的中间件,例如,使用multer解析器:

app.js:

var multer = require('multer');

app.use(bodyparser.json());
app.use(multer({ inMemory: true, putSingleFilesInArray: true }));

app.post('/uploadImg_Profile/', function(req, res){
    uploadImg_Profile.uploadImg_Profile(req, res);
});

uploadImg_Profile.js:

exports.uploadImg_Profile= function(req, res){
    var User = new user({ 
        email : req.body.email,
        img : req.files['image'][0].buffer
    });

    console.log("req : " + req);

    console.log("email : "+ User.email);
    console.log("image : " + User.img);
}

Multer还会填充有关该文件的各种其他属性,因此您应该可以使用以下方法检索图像的类型:

req.files['image'][0].mimetype

查看multer page on github的所有善意。

编辑:添加了bodyparser.json以及multer。

答案 1 :(得分:0)

它解决了。 app.use(bodyparser)和app.use(multer)可能同时使用。

app.use(bodyparser.json()) app.use(multer())

喜欢这个。

我之前的问题是另一个问题。 我不知道究竟是做什么的。我只是将快递版本从3.x更改为4.x并测试各种情况。在这个过程中,我发现req有正确的图像缓冲区,并且可以获得缓冲区数据。

感谢Mark和我的所有问题。