我想将图像从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类型结果。
如何获取img数据?
有一种方法可以动态地从File对象中获取文件的类型吗?
答案 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和我的所有问题。