如何在Node.js中使用multer上传文件?

我想用MULTER上传图片。 但它不工作。 这里有什么问题?

这段代码在我的路由文件中。

var multer = require('multer'); var upload = multer({ dest: 'public/uploads/' }); 

这是我的邮政路线。

 router.post('/addNewFood', upload.single('avatar'),function (req, res, next) { console.log(req.files); }); 

确保你安装了这个包

npm install –save multer

你可以尝试下面的方法,在服务器端,在你的路由或控制器文件中configurationmulter:

 var multer = require('multer'); var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'public/images/uploads') }, filename: function (req, file, cb) { cb(null, Date.now() + '-' + file.originalname) } }) var upload = multer({ storage: storage }); 

在存储对象中,目的地是代表file upload的地方。 所以请确保在您的项目目录中创build/ public / images / uploadspath。 否则,您可能需要更改文件path。

另外在存储对象中,文件名表示是什么,上传的文件名是什么。 在这里我添加当前时间与原始文件名称使所有文件名称唯一。

现在在你想要的路由,假设

 router.post('/', upload.single('image'), (req, res) => { //here your other task. }); 

现在你的file upload了。 确保客户端使用相同的名称,在这种情况下,“图像”。

 <input type="file" name="image" id="image" class='form-control'> 

这是一个单一的file upload程序。 对于多个文件

 router.post('/', upload.array(), function (req, res, next) { //your task goes here }); 

有关更多信息,请查看此链接 。

试试这个,对我有用。 使用快递和节点。

 var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'public/uploads/') }, filename: function (req, file, cb) { cb(null, file.originalname) } }); var upload = multer({ storage: storage }).single('avatar'); router.post('/addNewFood', //Your authentication check,// function (req, res, next) { upload(req, res, function(err) { if (err) { res.redirect(req.headers.referer + "/error.html"); return; } if (!req.files) { res.redirect(req.headers.referer + "/error.html"); return; } else { //Implement your own logic if needed. Like moving the file, renaming the file, etc. res.redirect(req.headers.referer); } }); } );