Skip to content

multer处理文件上传

了解一下form表单的enctype属性

  • application/x-www-form-urlencoded 一般用于json
  • multipart/form-data 上传文件必须要设置
  • text/plain 普通文本

multer基本使用

  • 在需要上传文件的路由文件中,引入multer模块,并配置一个临时存放目录:
js
// 使用multer处理文件上传,upload 方法返回中间件函数
let multer = require('multer')
let upload = multer({
    dest: 'D:\Users\chaoszhu\Desktop\temp'
})

upload三个常用的方法

  • upload.single('字段名') //前端传递过来的那个input框的名字,只能上传一个文件
  • upload.array('字段名', maxCount) // 上传多个文件,maxCount限制数量
  • upload.fileds([{name: '字段名',maxCount:2},{name: '字段名',maxCount:2},······])

multer处理之后会在req对象上加入了req.file || req.files || req.body三个属性

在路由函数中使用

js
// fileName 为formData对象的key值,value即是文件
router.post('/register', upload.single('fileName') , (req, res) => {
    console.log(req.file)
    let fileName = new Date().getTime() + '-' + req.file.originalname   // 获取文件名称
    let filePath = path.resolve(__dirname, '../../public/avatar', fileName) // 获取将要存入文件的绝对路径
    let fileData = fs.readFileSync(req.file.path) //获取文件数据
    fs.writeFileSync(filePath, fileData) //写文件(保存文件)
}

想要访问到保存的文件,需要配置一下express的静态资源托管

js
// 静态资源托管,用于直接访问保存在静态文件夹的public目录中的文件
app.use(express.static(path.resolve('public')))
// 输入:http://localhost:8000/public/avatar/xxxx  即可访问