我想把图像从安卓应用程序发送到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类型的结果。
发布于 2015-05-28 08:51:08
您需要在node.js代码中使用正确类型的正文解析器--从所获得的结果来看,您似乎没有将其解释为多部分形式。
您需要注册用于解释POST的中间件,例如,使用穆特解析器:
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请看github上的multer页面的所有优点。
编辑:添加了bodyparser.json以及穆特。
发布于 2015-05-29 04:32:26
这个问题解决了。可以同时使用app.use( both解析器)和app.use(multer)。
app.use(bodyparser.json()) app.use(multer())
就像这样。
我以前的问题是另外一点。我不知道到底是怎么回事。我只需将速成版本从3.x改为4.x,并测试各种情况。在此过程中,我发现req具有适当的图像缓冲区,并且可以获得缓冲区数据。
谢谢马克和你们都在我的问题上插话。
https://stackoverflow.com/questions/30499133
复制相似问题