vue el-upload 常见问题解决

本文详细解析了Element UI中el-upload组件的高级应用技巧,包括如何限制上传文件数量、自定义文件类型验证、获取文件流及错误信息的清除。通过实例代码展示了如何提升用户体验,避免常见陷阱。

在用el-upload上传组件的时候需要注意

  1. accept 官网上讲可以控制文件上传的类型,但实际上并不可以 还需要土方法(获取文件后缀名进行判断)进行控制
  2. limit 不是很好用 它虽然限制了文件只能上传一个,但是你选择了一个 就不能再去选择第二个文件,正常情况下测试想要选择第二个,然后最后一个是有效的,这里可以替换一下。
  3. 获取文件的文件流的方法
  4. 在获取完正确文件之后,之前的错误提示信息要删除

文件上传

html代码

<el-upload action="11" ref="editEnc" :on-remove="editEncFileRemove" :on-change="encFileEdit" :auto-upload="false" accept=".p7b,.cer,.pem">
    <el-button size="small" type="primary" class="btn-upload">导入</el-button>
    <span slot="tip" class="el-upload_tip">支持.p7b、.cer、.pem格式</span>
  </el-upload>

判断文件类型
这种情形是截取最后一个小数点后的字符串来判断文件的类型是否符合p7b,cer,pem中的一种

encFileEdit(file,fileList){
  if(fileList.length>1){      //这里只获取最后一次选择的问津
    fileList.splice(0,1);
  }
  if(fileList.length>0){
    let fileName = fileList[0].name.substring(fileList[0].name.lastIndexOf('.')+1);
    let extension1 = fileName === 'p7b';
    let extension2 = fileName === 'cer';
    let extension3 = fileName === 'pem';
    if(!extension1 && !extension2 && !extension3){
      this.$refs.editEnc.clearFiles();
      this.$notify({
        type:'error',
        title:'提示',
        message:'请导入p7b、cer、pem格式的证书',
      });
      return false;
    }else{
      this.applyInfo.enc_cert_name = fileList[0].raw;
    }
  }
},

文件个数限制

html代码如上个html代码
官网上有limit属性,使用方法如下
在这里插入图片描述
但是在使用的时候我们会发现加了这个属性,可以实现只选择一个文件,但是用户体验感比较差,如果选错了就要删除,而不是直接再选一次。
这时候我们可以不用这个属性 在代码里加一个判断

encFileEdit(file,fileList){
  if(fileList.length>1){      //这里只获取最后一次选择的文件
    fileList.splice(0,1);
  }
  if(fileList.length>0){     //如果有文件的情况下获取文件流
	 this.applyInfo.enc_cert_name = fileList[0].raw;
  }
},

获取文件流

this.applyInfo.enc_cert_name = fileList[0].raw;

清空文件上传列表

清除ref属性为editEnc的元素 执行clearFiles()方法,清空已上传的文件列表(该方法不支持在 before-upload 中调用)

this.$refs.editEnc.clearFiles();

选择文件之后清除之前Item错误信息

html代码

<el-form-item label="签名证书" prop="sign_cert_name" :label-width="formLabelWidth" ref="editFormSign">
  <el-upload action="11" ref="editSign" :on-remove="editSignFileRemove" :on-change="signFileEdit" :auto-upload="false" accept=".p7b,.cer">
    <el-button size="small" type="primary" class="btn-upload">导入</el-button>
    <span slot="tip" class="el-upload_tip">支持.p7b、.cer格式</span>
  </el-upload>
</el-form-item>

因为错误信息是item的,所以我们只需要获取到item元素然后清除他的错误提示就行了

this.$refs.editEnc.clearValidate();
### 如何在 Vue 中设置 `el-upload` 组件的宽度 为了调整 `el-upload` 的宽度,可以通过自定义样式实现。以下是具体的方法和示例: #### 使用 CSS 调整 `.el-upload` 宽度 通过覆盖 Element Plus 提供的类名(如 `.el-upload--picture-card` 或 `.el-upload-dragger`),可以直接设置其宽度。 ```css /deep/ .el-upload { width: 200px; /* 自定义宽度 */ } ``` 此方法适用于大多数场景下的上传框宽度调整[^1]。 #### 配合静态 Class 设置固定宽度 如果需要更灵活地控制特定区域的宽度,可以在模板中为 `el-upload` 添加一个额外的静态类名,并单独为其设置样式。 ```html <el-upload class="custom-width"> </el-upload> ``` ```css .custom-width { width: 300px !important; /* 强制应用宽度 */ } ``` 这种方式能够避免全局样式的干扰,同时保持代码清晰[^1]。 #### 动态绑定 Style 属性 对于动态变化的需求,可通过 JavaScript 计算并绑定内联样式至组件实例。 ```html <el-upload :style="{ width: uploadWidth + 'px' }"></el-upload> ``` ```javascript data() { return { uploadWidth: 250, // 初始宽度值 }; }, methods: { updateWidth(newWidth) { this.uploadWidth = newWidth; }, }, ``` 这种方法适合运行时根据条件改变宽度的情况[^2]。 --- ### 注意事项 当涉及图片卡片模式 (`list-type="picture-card"`) 时,还需同步调整列表项的宽度以匹配整体布局效果: ```css /deep/ .el-upload-list--picture-card .el-upload-list__item { width: 100px; /* 单张图片展示区宽度 */ height: auto; /* 建议保留自动高度以便适应不同比例图像 */ } ``` 此外,在某些情况下可能还需要处理动画过渡期间可能出现的显示异常问题[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值