el-upload的两种方式

本文详细介绍了Element UI的el-upload组件如何实现文件上传,包括常规的通过action和on-success方式进行上传,以及通过http-request覆盖默认上传行为的特殊方式。action方式下,上传接口和回调处理需独立设置,而http-request方式则允许全局axios处理,但可能在错误处理上存在不便。两种方式各有优缺点,适用于不同的项目需求。

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

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和处理返回状态
  • 缺点:由于全局请求拦截已经做了统一处理,所以发生错误的时候不好单独处理(例如全局处理错误是弹错误消息,这里想不弹全局的,弹自己的错误消息格式,就比较困难)
### 调整 Element UI 中 `el-upload` 组件文本显示区域与整体样式的布局 为了交换 `el-upload` 组件中的 `.el-upload__text` 和 `.el-upload--text` 的位置,可以通过自定义 CSS 或者修改模板结构来实现。以下是两种不同的解决方案: #### 方法一:通过自定义CSS调整顺序 如果仅需视觉上改变两者的位置而不改动HTML结构,可以利用绝对定位或Flexbox布局属性。 ```css /* 使用 Flex 布局 */ .el-upload { display: flex; flex-direction: column-reverse; /* 反转子元素排列方向 */ } /* 如果有其他样式需求可继续补充 */ ``` 这种方法简单快捷,适用于不需要大幅度更改原有DOM树的情况[^1]。 #### 方法二:重写模板结构调整层次关系 对于更复杂的场景,可能需要直接操作Vue组件内部的slot插槽来自定义内容展示方式。这通常涉及到创建一个新的包裹容器,并在此基础上构建所需的UI逻辑。 ```html <template> <div class="custom-upload"> <!-- 自定义文本 --> <span slot="tip" class="el-upload__tip">将文件拖到此处...</span> <!-- 文件列表和其他交互控件保持默认行为 --> <el-upload :action="uploadUrl" ... > <!-- 默认插槽用于放置触发按钮或其他提示信息 --> <i class="el-icon-plus"></i> </el-upload> </div> </template> <style scoped lang="scss"> .custom-upload{ .el-upload__tip{/* 样式定制 */} } </style> ``` 此方案提供了更大的灵活性,允许开发者完全掌控上传区内的各个部分是如何组合在一起的[^2]。 需要注意的是,在实际开发过程中应当充分考虑用户体验以及业务逻辑的一致性,确保任何界面变化都不会影响功能正常使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值