在vue中,使用el-upload组件,完成多个文件,一次请求批量上传

在vue中,使用el-upload组件,完成多个文件,一次请求批量上传

直接贴代码:

<el-upload
    class="upload-demo"
    ref="uploadFile"
    name="filedatas"
    :headers="{ Authorization: `${$store.state.user.userInfo.token}`}"
    :action="$interfaces.api.uploadBatch"
    :auto-upload="false"
    multiple
>
     <el-button slot="trigger" size="small" type="primary">批量上传文件</el-button>
     <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">提交到后台</el-button>
</el-upload>

public submitUpload() {
    //@ts-ignore
    let {uploadFiles, action, data} = this.$refs.uploadFile;
    //@ts-ignore
    this.uploadFiles({
      uploadFiles,
      data,
      action,
      success: (response:any) => {
        //@ts-ignore
        this.$refs.uploadFile.clearFiles();
      },
      error: (error:any) => {
        console.log('失败了', error)
      }
    })
  }

public uploadFiles({uploadFiles, headers, data, action, success, error}) {
    let form = new FormData()
    // 文件对象
    //@ts-ignore
    uploadFiles.map(file => form.append("files", file.raw))
    // 附件参数
    for (let key in data) {
      form.append(key, data[key])
    }
    let xhr = new XMLHttpRequest()
    // 异步请求
    xhr.open("post", action, true)
    // 设置请求头
    xhr.setRequestHeader("Authorization", this.$store.state.user.userInfo.token);
    xhr.onreadystatechange = function() {
      if (xhr.readyState == 4){
        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
          success && success(xhr.responseText)
        } else {
          error && error(xhr.status)
        }
      }
    }
    xhr.send(form)
  }

核心就是将多个上传文件合并成一个文件,使用XMLHttpRequest 手动写一个请求fn,完成上传。为了方便可以手动封装成一个单独的上传fn,方便以后的使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值