vue使用element-ui制作上传文件的效果,要有底部的进度条,中间的上传进度
时间: 2024-05-02 20:22:18 浏览: 220
1. 首先引入element-ui和axios:
```
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import axios from 'axios';
```
2. 在template中添加上传文件的组件:
```
<template>
<div>
<el-upload
class="upload-demo"
:action="uploadUrl"
:on-progress="handleProgress"
:file-list="fileList"
:auto-upload="false"
ref="upload">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<el-button size="small" type="success" @click="submitUpload">上传到服务器</el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>
<el-progress :percentage="uploadPercent" v-if="uploadPercent !== 0"></el-progress>
</div>
</template>
```
3. 在script中定义相关变量和方法:
```
export default {
data() {
return {
uploadUrl: '/api/upload', // 上传文件的url
fileList: [], // 文件列表
uploadPercent: 0 // 上传进度
};
},
methods: {
// 处理上传进度
handleProgress(event, file, fileList) {
this.uploadPercent = event.percent;
},
// 提交上传文件
submitUpload() {
this.$refs.upload.submit();
}
}
};
```
4. 在methods中定义上传文件的方法:
```
export default {
// ...
methods: {
// ...
// 上传文件
uploadFile(file) {
const formData = new FormData();
formData.append('file', file);
axios.post(this.uploadUrl, formData, {
headers: {
'Content-Type': 'multipart/form-data'
},
onUploadProgress: progressEvent => {
this.uploadPercent = Math.round((progressEvent.loaded / progressEvent.total) * 100);
}
}).then(response => {
console.log(response.data);
// 处理上传成功后的操作
}).catch(error => {
console.log(error);
// 处理上传失败后的操作
});
}
}
};
```
5. 最后,将上传文件的方法和submitUpload方法关联起来:
```
export default {
// ...
methods: {
// ...
// 提交上传文件
submitUpload() {
this.fileList.forEach(file => {
this.uploadFile(file.raw);
});
}
}
};
```
这样,就可以实现带有底部进度条和上传进度的文件上传效果了。
阅读全文