Node.js 使用multer在express中上载文件
我试图上传图像使用multer,但得到错误,上传不是一个功能。这是我的代码Node.js 使用multer在express中上载文件,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我试图上传图像使用multer,但得到错误,上传不是一个功能。这是我的代码 var multer = require('multer'); var uploads = multer({dest: './images'}); app.post('/uploading', uploads.single('image'), function(req, res) { console.log(req.file); var file = __dirname + '/' + req.file.filena
var multer = require('multer');
var uploads = multer({dest: './images'});
app.post('/uploading', uploads.single('image'), function(req, res) {
console.log(req.file);
var file = __dirname + '/' + req.file.filename;
uploads(req.file.path, file, function(err) {
if (err) {
console.log(err);
res.send(500);
} else {
res.json({
message: 'File uploaded successfully',
filename: req.file.filename
});
}
});
正如@Kuldeep所说,您不必在路由中上传
(filePath,file,(err)=>{…})
当您使用multer作为中间件(中间功能)时,multer将自动上载文件,并将文件名、原始名称等公开给路由内的req.file
对象
var multer = require('multer');
var uploads = multer({dest: './images'});
app.post('/uploading', uploads.single('image'), function(req, res) {
// here just write the success or error login
});
您可以在此处查看参考资料:
编辑:以上代码将上载文件名为十六进制字符串的文件,不带任何扩展名。
要添加重命名功能,您需要使用diskStorage
。这是取自第页的代码
现在,您可以使用
uploads
变量作为中间件,如上面的代码片段所示 非常明显上传不是一项功能,但上传是一项功能。所以使用
upload.single('image')
我还没有找到一个关于使用Multer的很好的指南(这个网站对于新手来说只是有点缺乏),所以这里是我的尝试 使用后:
npm install multer --save
将其添加到项目中
对我来说,我希望捕获特定路径上的文件,即:
/customers/:id/upload
因此,我进入customers.js路由文件并添加:
var multer = require('multer');
以及设置存储(diskStorage)和文件名配置调整的代码:
var storage=multer.diskStorage({
destination: function(req,file,cb){
cb(null,'/uploads/');
},
filename: function(req,file,cb){
cb(null,file.fieldname+'-'+Date.now());
}
});
然后,我可以创建上传中间件对象,该对象允许我指定每个路由,我希望Multer如何处理文件上传。在上面的路由中,我只想接收一个具有特定内部文件名的文件,因此我的customers.js路由文件如下所示:
router.post('/:id/targets/upload', upload.single('connections'), function(req,res,next){
console.log("Router:POST: Companies/:_id/upload");
console.log(req.file);
...
});
我看到的所有示例都有东西被添加到app.js文件中,但这些示例看起来有点笨拙和做作。每个路由可能都有不同的文件处理需求,所以对我来说,在每个控制器的基础上配置Multer似乎更合适。YMMV.文件名已显示,但如何上载图像并将名称保存到数据库?模型表示您的收藏名称您可以在此处直接调用您的收藏db.yourcollectionnameimage未上载,将存储具有任何字符串名称的文件这是图像:)这是默认行为。只需添加一个扩展并打开它。为了更好地理解,我添加了重命名函数的代码。
var storage=multer.diskStorage({
destination: function(req,file,cb){
cb(null,'/uploads/');
},
filename: function(req,file,cb){
cb(null,file.fieldname+'-'+Date.now());
}
});
router.post('/:id/targets/upload', upload.single('connections'), function(req,res,next){
console.log("Router:POST: Companies/:_id/upload");
console.log(req.file);
...
});