基于vue-element的el-upload文件导入数据处理

<template>的组件使用

<template>
  <div>
        <div class="grid-content bg-purple-dark">
              <div class="demo-input-suffix">
                {{ $t('文件导入') }}:
                <!-- 按钮 -->
                <el-upload
                  :multiple="false"
                  :show-file-list="false"
                  :http-request="httpRequest"
                  class="upload"
                  action=""
                  accept="csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet">
                  <el-button >{{ $t('选择文件') }}</el-button>
                  <el-tooltip :content="$t('文件大小不超过5M,支持.xlsx文件格式;文件内容为一列手机号码。示例: 手机号码 13671873945 13768426384')" class="item" effect="dark" placement="top">
                    <i class="el-icon-question"/>
                  </el-tooltip>
                </el-upload>
                <el-button type="text" @click="downloadTemplate">{{ $t('下载模板') }}</el-button>
                <!-- 按钮 end -->
              </div>
            </div>
  </div>
</template>

util.js处理导入的文件,获取文件数据。这里使用Promise,主要是通过resolve(exl),在回调函数里面添加处理逻辑。其中exl就是回调函数的入参

// 读取导入的  Excel数据,fileReader.onload是异步方法,使用回调函数获取值
  // utils.httpRequest(e).then(function (exl) {
  //   if (exl && exl.length > 0) {
  //    }
  // });
  httpRequest(e) {
    return new Promise(function(resolve, reject) {
      // 文件对象
      const file = e.file
      if (!file) {
        // 没有文件
        return false
      } else if (!/\.(xls|xlsx)$/.test(file.name.toLowerCase())) {
        // 格式根据自己需求定义
        this.$message.error('上传格式不正确,请上传xls或者xlsx格式')
        return false
      }
      const fileReader = new FileReader()
      fileReader.readAsBinaryString(file)
      fileReader.onload = (ev) => {
        try {
          const data = ev.target.result
          const workbook = XLSX.read(data, {
            type: 'binary' // 以字符编码的方式解析
          })
          const exlname = workbook.SheetNames[0] // 取第一张表
          const exl = XLSX.utils.sheet_to_json(workbook.Sheets[exlname]) // 生成json表格内容
          resolve(exl)
        } catch (e) {
          console.log('出错了::')
          return false
        }
      }
    })
  },

js交互,在回调函数里面完成后续逻辑处理

// 读取导入的表格数据
    httpRequest(e) {
      var self = this
      utils.httpRequest(e).then(function(excelDataList) {
        // 总导入用户数
        var memberCount = excelDataList.length
       .......
      })
    },

导入文件

回调函数的入参excelDataList:

[
    {"手机号码":12000000058},
     {"手机号码":12000000061},
     {"手机号码":12000000063},
     {"手机号码":12000000066}
]

 

Vue 2中,使用Element UI库的`el-upload`组件可以方便地处理CSV文件上传。以下是基本步骤: 1. 引入依赖:首先需要安装Element UI库,可以在项目中通过npm或yarn添加: ```bash npm install element-ui # 或者 yarn add element-ui ``` 然后在入口文件(如main.js)中引入并注册: ```javascript import { ElUpload } from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.component('el-upload', ElUpload); ``` 2. 在模板中使用`el-upload`:创建一个`<el-upload>`元素,并设置属性,例如允许单次或多文件上传、设置表单数据(如果需要)、提供上传成功的回调等。 ```html <template> <div> <el-upload action="your-api-url" <!-- 服务器接收文件的URL --> :multiple="true" <!-- 是否支持多文件上传,默认false --> :on-success="handleSuccess" <!-- 文件上传成功后的回调 --> :file-list="fileList" <!-- 用于展示已上传文件列表 --> accept="application/vnd.ms-excel, text/csv" <!-- 只接受.csv文件 --> > <i class="el-icon-upload"></i> 点击上传 </el-upload> </div> </template> ``` 3. 实现回调函数:在这里处理上传成功的响应,通常会解析上传的CSV内容,或者将文件保存到本地或者其他地方。 ```javascript <script> export default { data() { return { fileList: [], // 用于存储上传文件的信息 }; }, methods: { handleSuccess(response, file) { if (response.status === 200) { let blob = new Blob([response.data], { type: 'text/csv' }); let url = window.URL.createObjectURL(blob); this.fileList.push({ name: file.name, url }); // 这里可以根据需要进一步操作文件内容,比如解析成表格数据 } }, }, }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值