express4.x中上传文件的中间件
multer文档: https://github.com/expressjs/multer
在上传接口中添加multer
中间件
var multer = require('multer')
var storage = multer.diskStorage({
destination: function (req, file, cb) {
var dir = path.resolve(__dirname, '../public', 'photos')
cb(null, dir)
},
filename: function (req, file, cb) {
cb(null, file.originalname)
}
})
var upload = multer({ storage: storage })
single('filename')
此处的filename
为input
标签的name
属性的值。
router.post('/upload', upload.single('photoImage'), function (req, res, next) {
var img = req.file
var name = req.body.photoName || img.originalname
var mathes = /\/(.+)$/.exec(img.mimetype)
if (!name.includes(mathes[1])) {
name = name + '.' + mathes[1]
}
var newPath = path.resolve(__dirname, '../public', 'photos', name)
fs.rename(img.path, newPath, function (err) {
if (err) {
return next(err)
}
Photo.create({
name: name,
path: newPath
}, function(err) {
if (err) {
return next(err)
}
res.redirect('/photos/upload')
})
})
})