本文共 2054 字,大约阅读时间需要 6 分钟。
本文分两个部分,第一部分为nodejs+express和前端原生js+axios,第二部分为实际应用Vue+elementUI和node+express中配置。
const express = require('express')
const multer = require('multer')
const app = express()
const upload = multer({ dest: __dirname + '/uploads'})
app.use(require('cors')())
app.use('/uploads', express.static(__dirname + '/uploads'))
upload.single('file')
小括号里面的file
可以随意起名,但是一定要和前端发来的数据名称一致,看到前端部分你就知道怎么回事了。app.post('/upload', upload.single('file'), async (req, res) => { const file = req.file
file
添加一个url
属性,传给前端之后,就把这个url
赋值给图片的src
file.url = `http://localhost:3000/uploads/${ file.filename}` res.send(file)})app.listen(3000, () => { console.log('Start Up...')})
axios
FormData
,在其中添加的数据,其key值一定要和node端的upload.single('file')
小括号中名称一致。async
和await
,理解和详细用法同上。
:action
中的$http
是自己封装的axios对象,或者你可以写死上传路径。:on-success="uploadSuccsss"
上传成功之后的回调。:before-upload="beforeAvatarUpload"
上传前做的一些工作,如验证文件类型,文件大小。:action="$http.defaults.baseURL + '/upload'" :show-file-list="false" :on-success="uploadSuccsss" :before-upload="beforeAvatarUpload">
this.$set()
,大致意思就是让响应式的赋值,让Vue 能够监听到这个值发生变化了。这段时间有空的话会写一篇博客说说,没空就留坑吧。大家先可以百度一下。beforeAvatarUpload(file) { const isJPG = file.type === 'image/jpeg' || 'image/png'; const isLt2M = file.size / 1024 / 1024 < 8; if (!isJPG) { this.$message.error('上传头像图片只能是 JPG 或者 PNG 格式!'); } if (!isLt2M) { this.$message.error('上传头像图片大小不能超过 8MB!'); } return isJPG && isLt2M; }, uploadSuccsss(res) { this.$set(this.model, 'avatar', res.url) }
码字不易,如果对你有帮助的话,请给一个赞吧
转载地址:http://ueozi.baihongyu.com/