了解一下form表单的enctype属性
application/x-www-form-urlencoded (默认)
multipart/form-data(上传文件必须要设置)
text/plain(一般不用)
使用 multer 模块:npm install multer --save
在需要上传文件的路由文件中,引入multer模块,并配置一个临时存放目录:
// 使用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三个属性
在路由函数中使用:
// 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的静态资源托管
// 静态资源托管,用于直接访问保存在静态文件夹的public目录中的文件
app.use(express.static(path.resolve('public')))
输入:http://localhost:8000/public/avatar/xxxx 即可访问
网友评论