vue+element-ui中上传文件使用Progress自定义实时更新进度条

使用Upload+Progress实现文件上传进度条实时更新功能,需要借助http-request属性。具体使用方法如下:

<el-upload
     action="#"
     :file-list="fileList"
     :on-change="changeData"
     :http-request="handleRequest"
     :before-upload="beforeUpload">
     <el-button class="btn upload-btn">上传附件</el-button>
     <div slot="tip" class="el-upload__tip">上传文件大小不超过50M</div>
  </el-upload>
  <el-progress :stroke-width="16" :percentage="progressPercent"></el-progress>
  
  //上传前对文件大小进行校验
  beforeUpload(file) {
      const isLt2M = file.size / 1024 / 1024 < 50;
      if (!isLt2M) {
        this.$message.error('上传文件大小大小不能超过 50MB!');
        return isLt2M;
      }
  },
  changeData (file, fileList) {
       // 数据小于0.1M的时候按KB显示
      const size = file.size/1024/1024 > 0.1 ? `(${(file.size/1024/1024).toFixed(1)}M)` : `(${(file.size/1024).toFixed(1)}KB)`
      file.name.indexOf('M')>-1 || file.name.indexOf('KB')>-1 ? file.name : file.name += size
  },

  handleRequest (data) {
      let formdata = new FormData()
      formdata.append('file', data.file)
      const config = {
        onUploadProgress: progressEvent => {
          // progressEvent.loaded:已上传文件大小
          // progressEvent.total:被上传文件的总大小
          this.progressPercent = Number((progressEvent.loaded / progressEvent.total * 100).toFixed(2))
        }
      }
      this.$axios.post(this.actionURL,formdata,config).then(res => {
        if (res.data.code===1) {}
      })
  },
  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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); }); } } }; ``` 这样,就可以实现带有底部进度条和上传进度的文件上传效果了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值