element-ui上传Excel文件

本文介绍了在Vue项目中使用element-ui组件上传Excel文件的实践经验,包括遇到的跨域问题和解决策略。通过设置`auto-upload="false"`实现手动上传,并自定义上传方法处理http-request。同时提醒开发者注意隐藏默认的input上传框,以及在解决实际问题时不要过度依赖文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近在学校接了个小项目,在设计过程中遇到了一个问题,需求中需要可以使用Excel导入数据,这里我就要考虑前端上传Excel文件,最开始想的是在前端把Excel文件处理好了之后将数据传递到后端,但是因为各种原因选择将文件直接送到后端去处理。
我选择了使用element-ui的upload组件进行上传。开始我以为,照着文档 copy过去后修改后台地址和数据格式等限制即可。事实证明,我还是太单纯。过程中出现了,跨域等问题,想设置请求头对文档理解又有些偏差,所以我选择了手动上传

代码
<el-form>
      <el-form-item label="导入学生名单,只支持xls格式文件" prop="file">
        <el-upload
          class="upload-demo"
          ref="upload"
          multiple
          accept=".xlsx"
          action=""
          :http-request="httpRequest"
          :file-list="fileList"
          :auto-upload="false"
        >
          <el-button slot="trigger" size="small" type="primary"
            >选取文件</el-button
          >
          <el-button style="margin-left:5px" size="small" type="primary" @click="submitUploadList">上传</el-button>
        </el-upload>
      </el-form-item>
    </el-form>

**auto-upload=“false”**会将上传方式设置为手动上传。当我们设置手动上传之后,upload组件的 this.$refs.upload.submit(); 方法会调用 http-request 方法,该方法是我们手动上传的自定义方法。注意:当我们选择手动上传之后,监听上传的钩子会全部无效。我们只能在自定义的上传方法中通过请求回调的参数进行接下来的一些列判断和操作。

 data() {
    return {
      fileList: [],
      loadUrl:'https://lishuo.picp.vip/tomcat/uploadServlet'
    };
  },
  methods: {
    httpRequest(param) {
      console.log(param);
      let fileObj = param.file; // 相当于input里取得的files
      let fd = new FormData(); // FormData 对象
      fd.append("file", fileObj); // 文件对象

      let url = this.loadUrl
      let config = {
        headers: {
          "Content-Type": "multipart/form-data",
        },
      };
      axios.post(url, fd, config).then((res) => {
        console.log(res);
        // 上传完成后,后台会将反馈结果反馈到这里,我们可以在这里进行接下来的一系列操作
      });
    },
    submitUploadList() {
      this.$refs.upload.submit();
    },
  },

还要注意的是,我们需要把el-upload下的input的通过css样式隐藏起来。否则页面依然会显示默认的input上传框,贼难看的那种。

.upload-demo input{
  display: none;
}

最后成品
在这里插入图片描述

文章最后感谢csdn博主 提莫拌一团蘑菇,通过阅读该大佬的文章,解决了困扰几天的大问题。
也给诸多前端小白一个建议:多写代码多看文档,但是不要过于依赖文档。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值