el-upload的两种方式

el-upload的两种上传方式

  • 常规:通过 actionon-success
  • 特殊:通过 http-request ,覆盖默认的上传行为,可以自定义上传的实现

action方式

<!--  action方式主要用到的是以下四个参数|方法:action、headers、data、on-success -->
<el-upload

  :action="action"
  :headers="uploadHeaders"
  :data="uploadData"
  :on-success="handleSuccess"
  
  :before-upload="beforeUpload"
  :on-preview="handlePreview"
  :on-remove="handleRemove"
  :before-remove="beforeRemove"
  :limit="1"
  :on-exceed="handleExceed"
  :file-list="fileList"
>
  <el-button size="small" type="primary">点击上传</el-button>
  <div slot="tip" class="el-upload__tip">{{ tip }}</div>
</el-upload>


handleSuccess(res, file) {
  if (res.code === 1) {
    ···
  } else {
    this.$message.error(`上传失败:${res.message}`)
  }
},

基本上是通过 action 控制上传接口,on-success 来控制上传成功之后的回调

优缺点:

  • 优点:属于elementUI设计的本来用法,各个属性各司其职
  • 缺点:接口的axios是单独的,headers和接口返回状态的判断都需要单独写

http-request方式

<el-upload

  action="/"
  :http-request="uploadFile"
  
  :before-upload="beforeUpload"
  :on-preview="handlePreview"
  :on-remove="handleRemove"
  :before-remove="beforeRemove"
  :limit="1"
  :on-exceed="handleExceed"
  :file-list="fileList"
>
  <el-button size="small" type="primary">点击上传</el-button>
  <div slot="tip" class="el-upload__tip">{{ tip }}</div>
</el-upload>
// 处理其他参数
handleOtherParams(params) {
  const formData = new FormData()
  if (typeof params === 'object' && params) {
    Object.keys(params).forEach(k => {
      formData.append(k, params[k])
    })
  }
  return formData
},
uploadFile(ops) {
  const _file = ops.file

  const formData = this.handleOtherParams({
    file: _file
    // 这里也可以写其他参数
  })

  // 调用接口 - 这里就可以使用全局统一axios处理之后的接口
  uploadUrl(formData).then((res) => {
    this.$message.success(res.message || '文件导入成功,稍后查询处理结果')
  }).catch((err) => {
    throw err
  })
},

单独的上传行为,自定义上传

优缺点:

  • 优点:可以使用全局axios处理之后的接口,避免引入headers和处理返回状态
  • 缺点:由于全局请求拦截已经做了统一处理,所以发生错误的时候不好单独处理(例如全局处理错误是弹错误消息,这里想不弹全局的,弹自己的错误消息格式,就比较困难)
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值