美文网首页
Vue + ElementUI 实现文件上传

Vue + ElementUI 实现文件上传

作者: kurumi_feng | 来源:发表于2022-08-28 17:15 被阅读0次

    vue版本:2.6.14
    ElementUI版本:^2.15.6

    场景描述:
    在开发业务中想要实现EXCEL单文件上传,不想要 ElementUI 中 upload 组件的自动上传,而是上传文件到临时变量中,最后再通过上传按钮将文件上传至后端对应接口。

    关键代码如下:

    <template>
    ...
    <el-upload class="upload-excel" ref="upload" action="#" accept=".xlsx,.xls" :limit="1" :http-request="handleUploadFile">
              <span class="tag">数据文件</span>
              <el-button size="small" type="primary">点击上传</el-button>
            </el-upload>
    
    <el-button class="btn-sure" type="primary" @click="uploadFile">确认上传</el-button>
    ...
    </template>
    
    <script>
    export default {
      ...
      data() {
        return {
          dataFile: {}
        }
      },
      ...
      methods: {
        // 文件上传
        async uploadDataModel() {
          // 调用对应文件上传接口
          const { data: res } = await sendUploadRequest(this.dataFile);
          ...
        },
        // 文件提交
        handleUploadFile({ file }) {
          this.dataFile = new FormData();
          this.dataFile.append('file', file);
        }
      }
    }
    </script>
    

    注意点:

    1. action 属性必填,官方规定,因为想要手动点击上传按钮再上传,所以这里没有填写接口地址,随便填写一个字符串即可。
    2. 由于想要实现单文件上传,所以需要 :limit="1" 限制文件上传个数。
    3. 使用 :http-request 来覆盖 el-upload 的默认上传行为,这里我只需要拿到上传的文件,然后存储在一个临时变量中即可(file 文件需要封装到 FormData 再传给后端,后端使用的是 MultipartFile 接收的文件)
    4. 上面的 { file } 是采用了解构取值,等同于:
    handleUploadFile(fileObj) {
       this.dataFile = new FormData();
       this.dataFile.append('file', fileObj.file);
    } 
    

    相关文章

      网友评论

          本文标题:Vue + ElementUI 实现文件上传

          本文链接:https://www.haomeiwen.com/subject/nsqknrtx.html