Skip to content

Node.js Multer使用

图片上传是web开发中经常用到的功能,node社区在这方面也有了相对完善的支持。

常用的开源组件有multer、formidable等,借助这两个开源组件,可以轻松搞定图片上传。

我们项目中就主要用到了multer来上传图片

环境初始化

非常简单,一行命令。 cnpm install multer --save

multer使用(中间件)

我们和Joi的使用一样,也是使用中间件的形式,我们看看我们uploader的书写

const multer = require('multer')

...

const userStorage = multer.diskStorage({
  destination: 'public/images/userImage/',
  filename: function (req, file, cb) {
    var fileformat = (file.originalname).split('.')
    cb(null, fileformat[0] + '-' + Date.now() + '.' + fileformat[fileformat.length - 1])
  }
})

module.exports = {
  ...
  userImg: multer({
    storage: userStorage
  })
}

在我们的使用中,我们定义了一个multer.diskStorage,指定了图片上传的位置以及存储的图片的文件名,完成了该中间件后,export该中间件

然后,我们就可以作为一个中间件在routes.js中使用, 如下

app.put('/user',
    uploader.userImg.single('image'),
    authController.updateUser)

那么,经过该中间件后,文件信息存储到req的哪个地方呢?

单文件的话,他的信息就存储在我们的req.file.path里,我们可以在conrtoller中进行使用

await user.update({
  username: req.body.username,
  email: req.body.email,
  phone: req.body.phone,
  img: (req.file) ? req.file.path : user.img
})

多文件的话就存储在req.files里,具体使用同学们可以上他的github文档查看,这篇博客主要说说我们的项目中的使用

github地址: https://github.com/expressjs/multer