vue3+element-plus的el-upload上传excel表格

1.drag使用拖拽功能,:before-upload="beforeUpload"上传文件之前的钩子函数,img是展示上传文件成功展示图标的,此时的imgs是等于false,上传成功就是ture展示图片

<el-upload
          class="upload"
          http-request="#"
          drag
          :before-upload="beforeUpload"
          :http-request="uploadHttpRequest"
        >
          <div class="img_box" v-if="imgs">
            <img src="../../../../assets/img/excel-ext.png" />
          </div>
          <span class="box_text">导入</span>
        </el-upload>

2.获取到上传文件进行校验是否是excel文件,拿到file点击确定按钮可进行调接口上传

 //上传文件之前先判断该文件是否是Excel文件
      beforeUpload(file) {
        //获取上传文件
        let formData = new FormData(); //FormData对象,添加参数只能通过append('key', value)的形式添加
        formData.append("file", file); //添加文件对象
        state.formData = formData;
        const Xls = file.name.split(".");
        if (Xls[1] === "xls" || Xls[1] === "xlsx" || Xls[1] === "csv") {
          state.imgs = true; //打开图片
          return file;
        } else {
          // ElMessage.error("请上传excel格式的文件!");
          return false;
        }
      },

//确定导入未使用信息
onSubmit() {
        ruleFormRef.value.validate((valid) => {
          if (valid) {
            unitregisterImport(state.unitId, state.formData).then((res) => {
              if (res == true) {
                state.innerVisible = true;
                methods.getDetails();
                // ElMessage.success("导入成功");
              } else {
                // ElMessage.warning("导入失败");
              }
            });
          } else {
            return false;
          }
        });
      },

3.上面是点击按钮上传,也可以不需要按钮在获取到flie的时候直接调接口上传,这是业务逻辑操作根据个人业务场景参考

//上传文件之前先判断该文件是否是Excel文件
      beforeUpload(file) {
        const Xls = file.name.split(".");
        if (Xls[1] === "xls" || Xls[1] === "xlsx" || Xls[1] === "csv") {
          state.imgs = true; //打开图片
          return file;
        } else {
          // ElMessage.error("请上传excel格式的文件!");
          return false;
        }
      },
      // 允许自行实现上传文件的请求
       uploadHttpRequest(param) {
         let formData = new FormData(); //FormData对象,添加参数只能通过append('key', value)的形式添加
         formData.append("file", param.file); //添加文件对象
         state.formData = formData;
//调用上传接口
        unitregisterImport(state.unitId, state.formData).then((res) => {
              if (res == true) {
                state.innerVisible = true;
                methods.getDetails();
                // ElMessage.success("导入成功");
              } else {
                // ElMessage.warning("导入失败");
              }
            });

       },

效果图如下:

还未导入文件

导入之后

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,关于这个问题,你需要先在你的项目中安装 element-plus 和 axios 这两个库,然后按照以下步骤来实现文件上传: 1. 在组件中导入要使用的库: ``` import { defineComponent } from 'vue' import { ElUpload } from 'element-plus' import axios from 'axios' ``` 2. 创建上传函数,并将 formData 发送至服务器: ``` export default defineComponent({ components: { ElUpload }, methods: { uploadFile(file) { const formData = new FormData() formData.append('file', file.raw) axios.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' } }) .then(response => { console.log(response.data); }) } } }) ``` 3. 在模板中引入上传组件: ``` <template> <el-upload class="upload-demo" :action="uploadFile" list-type="picture" :on-success="onSuccess" :on-change="onChange" :before-upload="beforeUpload" > <el-button size="small" type="primary">点击上传</el-button> </el-upload> </template> ``` 4. 最后,通过 on-success 回调函数来处理服务器返回的上传成功信息: ``` export default defineComponent({ components: { ElUpload }, methods: { uploadFile(file) { const formData = new FormData() formData.append('file', file.raw) axios.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' } }) .then(response => { console.log(response.data); }) }, onSuccess(response, file, fileList) { console.log('上传成功'); console.log(response); console.log(file); console.log(fileList); } } }) ``` 希望这个回答能够帮到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值