在Vue中使用element-ui的上传组件上传图片
时间: 2023-10-24 14:17:32 浏览: 117
vue element-ui table 组件封装使用
1. 首先,在项目中安装element-ui和axios:
```
npm install element-ui axios --save
```
2. 在main.js中引入element-ui和axios:
```
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import axios from 'axios'
Vue.use(ElementUI)
Vue.prototype.$axios = axios
```
3. 在组件中使用上传组件:
```
<template>
<div>
<el-upload
class="avatar-uploader"
action="/api/upload"
:show-file-list="false"
:on-success="handleSuccess"
:before-upload="beforeUpload"
>
<img v-if="imageUrl" :src="imageUrl" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
</template>
```
4. 在组件中定义上传前和上传成功的方法:
```
<script>
export default {
data() {
return {
imageUrl: ''
}
},
methods: {
beforeUpload(file) {
const isJPG = file.type === 'image/jpeg'
const isPNG = file.type === 'image/png'
if (!isJPG && !isPNG) {
this.$message.error('只能上传jpg或png格式的图片')
return false
}
const isLt2M = file.size / 1024 / 1024 < 2
if (!isLt2M) {
this.$message.error('上传的图片大小不能超过2MB')
return false
}
return true
},
handleSuccess(response) {
this.imageUrl = response.data.url
}
}
}
</script>
```
5. 在服务器端,需要接收上传的图片,并将其保存到指定路径:
```
const express = require('express')
const multer = require('multer')
const path = require('path')
const app = express()
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, path.join(__dirname, '/public/images'))
},
filename: function (req, file, cb) {
const extname = path.extname(file.originalname)
cb(null, Date.now() + extname)
}
})
const upload = multer({ storage: storage })
app.post('/api/upload', upload.single('file'), (req, res) => {
const url = `http://localhost:3000/images/${req.file.filename}`
res.json({
code: 0,
data: {
url: url
}
})
})
app.listen(3000, () => {
console.log('server is running at http://localhost:3000')
})
```
以上就是在Vue中使用element-ui的上传组件上传图片的方法。
阅读全文