使用 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 类型结果。
如何获取img数据?
有办法从 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正确的有图像缓冲,并且可以获取缓冲数据。
谢谢马克和所有对我的问题感兴趣的人。
我想将图像从 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 类型结果。
如何获取img数据?
有办法从 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正确的有图像缓冲,并且可以获取缓冲数据。
谢谢马克和所有对我的问题感兴趣的人。