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 即可访问