使用 Element 上传组件读取文件

17 篇文章 0 订阅
6 篇文章 0 订阅

需求:支持 .txt 和 .sql 后缀文件内容的读取,最大 2MB。显示已读取文件名称、读取进度和读取成功状态。读取按钮重复点击时,已读取文件列表中的文件被新的文件替换。

<template>
  <el-upload
    ref="upload-sql"
    action=''
    accept=".txt,.sql"
    :auto-upload="false"
    :on-change="changeFile"
    :http-request="uploadHandler">
      <el-button class="mr-2" plain slot="trigger" size="small">
        <i class="el-icon-upload mr-1 font-size-14"></i>读取文件
    </el-button>支持 .txt 和 .sql 后缀文件上传,最大2MB
  </el-upload>
</template>

<script>
  export default {
    data () {
      return {
        sqlText: ''
      }
    },
    methods: {
      getRandomNum (min, max) {
        return Math.floor(Math.random() * (max - min + 1) + min)
      },
      changeFile (file, fileList) {
        if (file.status === 'ready') {
          // 已上传文件列表如果存在 2 条记录,移除第一条,实现替换效果
          if (fileList.length === 2) {
            fileList.shift()
          }
          
          // 手动开始上传
          this.$refs['upload-sql'].submit()
        }
      },
      uploadHandler (params) {
        const isLt2M = params.file.size / 1024 / 1024 <= 2
        if (!isLt2M) {
          this.$notify({
            message: '上传的文件不能大于2MB',
            type: 'warning',
            title: '警告'
          })
          return
        }
        
        // 调用 element ui 进度条
        params.onProgress({ percent: this.getRandomNum(19, 99) })
        setTimeout(() => {
          this.readText(params)
        }, 100)
      },
      async readText (params) {
        // UTF-8,GBK,GB2312
        const readFile = new FileReader()
        readFile.onload = (e) => {
          this.sqlText = e.target.result
          
          params.onProgress({ percent: 100 }) // 调用 element ui 进度条
          params.onSuccess() // 调用 element ui 上传成功方法
        }
        readFile.readAsText(params.file)
      },
    }
  }
</script>

<style scoped lang="scss">
  
  // 去掉已上传文件列表的文件移除动画
  /deep/ .el-list-leave-active {
    transition: none;
  }
  /deep/ .el-list-leave-active {
    opacity: 0;
  }
  /deep/ .el-upload-list {
    max-height: 26px;
  }
</style>

效果:
上传进度条

上传成功

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值