Angularjs 将图像从ionic上传到express.js multer
我已经用很多方法尝试过了,但我的ionic framework上传图片的代码还是不走运(你可以简单地复制粘贴它,然后在android上运行) 我从库中获取图像并获取url没有问题。 下面的代码是我使用multer完成工作的服务器端代码Angularjs 将图像从ionic上传到express.js multer,angularjs,node.js,express,ionic-framework,multer,Angularjs,Node.js,Express,Ionic Framework,Multer,我已经用很多方法尝试过了,但我的ionic framework上传图片的代码还是不走运(你可以简单地复制粘贴它,然后在android上运行) 我从库中获取图像并获取url没有问题。 下面的代码是我使用multer完成工作的服务器端代码 var express = require('express'); var http = require('http'); var multer = require('multer'); var bodyParser = require('body-parser'
var express = require('express');
var http = require('http');
var multer = require('multer');
var bodyParser = require('body-parser');
var multerS3 = require('multer-s3');
var aws = require('aws-sdk');
var app = express();
app.use(bodyParser.json({
limit: '50mb'
}));
app.use(bodyParser.urlencoded({
limit: '50mb',
extended: true
}));
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, './uploads');
console.log('hit storage');
},
filename: function (req, file, callback) {
callback(null, file.fieldname + '-' + Date.now());
console.log('hit storage');
}
});
var upload = multer({
storage: storage
}).single('userPhoto');
app.post('/upload2', function (req, res) {
console.log('hit post');
upload(req, res, function (err) {
if (err) {
console.log(err);
//console.log(req);
return res.end("Error uploading file.");
} else {
console.log('done');
res.end("File is uploaded");
}
});
});
您只需在server.js和test中复制并粘贴上述代码即可
我得到的错误是
{ [Error: Unexpected field]
code: 'LIMIT_UNEXPECTED_FILE',
field: 'file',
storageErrors: [] }
仅供参考:我使用chrome inspect设备功能在android中运行本地主机。
(chrome://inspect/#devices)
另一件事,为什么我得到这样的图像url
"content://com.android.providers.media.documents/document/image%3A42"
甲酸盐缺失,这有什么意义吗
我的爱奥尼亚信息
您的系统信息:
请尝试以下方法上载图像:
var fs = require('fs');
var tmp_path = fs.createReadStream(req.files.image.path);
var target_path = './public/images/' + req.files.file.name + randomNumber;
fs.rename(tmp_path, target_path, function(err) {
// if (err) throw err;
fs.unlink(tmp_path, function() {
// if (err) throw err;
//res.send('File uploaded to: ' + target_path + ' - ' + req.files.file.size + ' bytes');
});
});
我有完全相同的问题,我发现在使用multer时,我们必须确保这一行的名称('userPhoto')。single('userPhoto');匹配html表单中的文件名,问题是我们没有使用html表单获取任何图像,我们使用cordova插件从相机中获取它们。我用POSTMAN测试了端点,它可以在请求体中加载图像,并指定相同的名称“userPhoto”作为密钥。希望这能很快得到有用的答案。仅传递图像的url在multer中不起作用,它是body parser模块的扩展。因此,您需要将图像或文件与请求正文一起传递。对于
userPhoto
问题,请删除single
标记,因为它只允许上载名为userPhoto
的单个照片multer({storage:storage,fileFilter:fileFilter}).any()代码>
Cordova CLI: 5.4.1
Gulp version: CLI version 3.9.1
Gulp local:
Ionic CLI Version: 1.7.14
Ionic App Lib Version: 0.7.0
ios-deploy version: 1.8.4
ios-sim version: 5.0.4
OS: Mac OS X El Capitan
Node Version: v5.7.0
Xcode version: Xcode 7.2.1 Build version 7C1002
var fs = require('fs');
var tmp_path = fs.createReadStream(req.files.image.path);
var target_path = './public/images/' + req.files.file.name + randomNumber;
fs.rename(tmp_path, target_path, function(err) {
// if (err) throw err;
fs.unlink(tmp_path, function() {
// if (err) throw err;
//res.send('File uploaded to: ' + target_path + ' - ' + req.files.file.size + ' bytes');
});
});