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

Send Image from android to Node.js using AsyncHttpClient

我想将图像从 android 应用程序发送到 node.js 服务器以在服务器端保存到 MongoDB。我用AsyncHttpClient来post请求。

我的代码是这样的:

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 对象中动态获取文件类型吗?

您需要在 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。

已解决。 app.use(bodyparser) 和 app.use(multer) 同时使用是可能的。

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

像这样。

和我之前的问题还有一点。 我不知道到底是什么让它在做什么。我只是将 express 版本从 3.x 更改为 4.x 并测试各种情况。在这个过程中,我发现req正确的有图像缓冲,并且可以获取缓冲数据。

谢谢马克和所有对我的问题感兴趣的人。