element UI el-upload上传组件使用

这篇博客记录了如何使用Element UI组件库中的el-upload实现文件上传功能,特别是配置了拖拽上传、文件类型限制、数量限制及上传成功和失败的回调处理。通过设置属性如`action`、`accept`、`limit`、`on-success`和`on-error`等,实现了单文件上传并控制了上传过程。此外,还展示了处理文件超出限制和清除文件的函数。

项目场景:

最近在项目中遇到了需要上传文件的地方,第一次用,此处作为学习的记录,有不足望指正


描述:

el-upload的方法名和属性请参照element官方文档,这里只贴我使用的一些

我使用的样式是可拖拽上传
在这里插入图片描述

代码如下:

<el-upload
  ref="myUpload"                                     上传文件的名字
  name="file"
  class="upload-demo"
  drag                                               允许拖拽(不写默认false)
  action="/XXXXXXX"                                  上传的地址
  accept=".xls,.XLS,.xlsx,.XLSX,.csv,.CSV"           允许上传的文件格式,可以自定义
  multiple="false"                                   是否支持多选文件
  limit="1"                                          允许上传的文件个数(此处可结合上一个属性)
  :auto-upload="false"                               是否自动上传(此处为了效果选择false)
  :on-exceed="handleExceed"                          文件超出个数限制时的钩子(可在此设置提示)
  :on-success="handleSuccess"                        文件上传成功时的钩子
  :on-error="handleError"                            文件上传失败时的钩子
  :data="ruleForm"                                   上传时附带的额外参数
 >
  <i class="el-icon-upload"></i>
  <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  <div class="el-upload__tip" slot="tip">只能上传xls,xlsx,csv文件</div>
</el-upload>

要注意的是文件上传的方式是表单上传,所以参数的格式不是JSON,而是multipart/form-data


下面是我用到的一些钩子函数

//文件超出限制时
handleExceed() {
   this.$message.warning('当前只允许选择 1 个文件!')
},

// 移除文件
clearFiles() {
   this.$refs['myUpload'].clearFiles()
},

// 弹窗中的新增
employee() {
    this.$refs['myUpload'].submit()
},

// 文件上传成功时
handleSuccess(res) {
  this.$message.success('上传成功!')
  // 可以写一些其他操作,例如刷新页面
},

// 文件上传失败时
handleError(res) {
  this.$message.error('<错误的提示>')
}
### Element UI el-upload 组件 auto-upload 属性用法及配置 `auto-upload` 是 Element UI 的 `el-upload` 组件中的一个属性,用于控制文件上传是否在选择文件后立即触发。如果将其设置为 `false`,则需要手动调用组件的 `submit` 方法来触发上传操作[^1]。 以下是关于 `auto-upload` 属性的具体说明和使用方法: #### 1. 基本用法 当 `auto-upload` 属性被设置为 `true`(默认值)时,用户选择文件后会立即触发上传操作。如果将其设置为 `false`,则需要通过手动调用组件实例的 `submit` 方法来执行上传操作。 ```html <el-upload action="https://jsonplaceholder.typicode.com/posts/" :auto-upload="false" :on-change="handleChange"> <el-button slot="trigger" type="primary">选取文件</el-button> <el-button style="margin-left: 10px;" @click="uploadFile">上传到服务器</el-button> </el-upload> ``` #### 2. 手动触发上传 当 `auto-upload` 设置为 `false` 时,可以通过以下方式手动触发上传- 在模板中绑定按钮事件,调用组件实例的 `submit` 方法。 - 示例代码如下: ```javascript export default { methods: { uploadFile() { this.$refs.upload.submit(); // 调用组件实例的 submit 方法 }, handleChange(file, fileList) { console.log('文件改变:', file, fileList); } } } ``` #### 3. 自定义上传逻辑 如果需要实现自定义上传逻辑,可以结合 `http-request` 属性来实现。例如,使用 Axios 发起自定义的 HTTP 请求。 ```html <el-upload action="#" :auto-upload="false" :http-request="customUpload"> <el-button slot="trigger" type="primary">选取文件</el-button> <el-button style="margin-left: 10px;" @click="uploadFile">上传到服务器</el-button> </el-upload> ``` ```javascript export default { methods: { uploadFile() { this.$refs.upload.submit(); }, customUpload(params) { const formData = new FormData(); formData.append('file', params.file); axios.post('https://jsonplaceholder.typicode.com/posts/', formData) .then(response => { console.log('上传成功:', response); }) .catch(error => { console.error('上传失败:', error); }); } } } ``` #### 4. 注意事项 - 如果 `auto-upload` 设置为 `false`,必须确保通过 `submit` 方法手动触发上传,否则文件不会被上传- 在自定义上传逻辑中,可以使用 `before-upload` 钩子函数对文件进行预处理或校验。 - 如果需要显示上传进度,可以结合 `on-progress` 钩子函数实现[^2]。 ### 总结 `auto-upload` 属性提供了灵活的文件上传控制机制。通过将其设置为 `false`,可以实现更复杂的上传逻辑,例如批量上传、文件校验或自定义 HTTP 请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值