el-upload 上传文件的使用方式(总结)

需求

使用element ui中el-upload组件实现文件上传功能,主要分为两种:
 1. 通过action, url为服务器的地址
 2. 通过http-request(覆盖默认的上传行为,可以自定义上传的实现), 注意此时 on-success 和 on-error事件无法使用

方法1: action (上传xls文件)

 <el-upload
    class="upload-demo"
    accept=".xls,.xlsx" 
    action="/dashboardSystem/manage/uploadFile" // 服务器地址
    :data="fileupload"  // 上传时附带的额外参数, 通常为{}, 比如 {date: '2023-05-05'}, 则,上传参数为{date: xx, file: Binary}
    :style="{ textAlign: 'left' }"
    ref="upload"
    :show-file-list="true"
    :before-upload="beforeUpload" // 判断文件类型和文件大小
    :on-exceed="handleExceed" // 上传文件个数限制
    :on-success="fileSuccess" // function(res, file, fileList)	上传成功,res为服务器返回的数据,可以判断是否解析成功
    :on-error="showError" // function(err, file, fileList) 上传失败
    :limit="1"
    >
      <el-button
        slot="trigger"
        :style="{ display: 'inlineBlock' }"
        size="small"
        type="primary"
        >选择文件
      </el-button>
   </el-upload>

方法2: 通过http-request自定义上传文件,没有on-success, on-error

 <el-upload
    :show-file-list="false"
    class="upload-demo"
    action="" // 必填
    :limit="1"
    accept=".csv"
    :http-request="uploadFile">
    <el-button size="small" type="primary">上传文件</el-button>
 </el-upload>

uploadFile(params){
  	 const file = params.file;
     // 使用FormData传参数和文件
     var form = new FormData();
     // 添加键值对
     form.append("file", file);
     form.append("date", this.urlId);
     // 传给后台FormData, 此时form = {date: xx, file: xxx(FormData)}
     this.uploadFileRequest("/xxx", form).then(resp=>{
       if(resp && resp.status == 200){
         this.$message("成功了");
       }
     })
   },
// 在api.js中编写上传方法,并导出
 const uploadFileRequest = (url, params) => {
  return axios({
    method: 'post',
    url: `${base}${url}`,  // base为axios中baseUrl
    data: params, // post请求,参数是放在data中传递的
    // 注意设置header
    headers: {
      'Content-Type': 'multipart/form-data'     
    }
  });
}

— 补充一个上传文件的

  handleAvatarSuccess(res, file) {
      this.imageUrl = URL.createObjectURL(file.raw); // 转为url地址
    },

关于el-upload中before-upload钩子使用场景

官方文档

  • 使用场景: 在上传文件之前判断相关参数是否符合校验,不符合则停止上传
  • 问题:使用普通的function返回true或者false, 返回false后仍然向后端上传文件(百度了一圈,发现官网中已有说明,—总是那么的简洁!!!!)
// 表单结构: uploadForm: {date:xxx, file: '待上传的文件'}, date日期必填
  beforeUpload(file) {
      return new Promise((resolve, reject) => {
        this.$refs.uploadForm.validate((valid) => {
          if (valid) {
            const isLt10M = file.size / 1024 / 1024 < 10
            if (!isLt10M) {
              this.$message.error('最大上传10M')
              return reject(false)
            } else {
              return resolve(true)
            }
          } else {
            return reject(false)
          }
        })
      })
    },

表单校验不通过,成功阻止上传!!!!

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
el-upload组件可以用于上传文件流。根据引用\[1\]中的描述,你可以使用递归的方式一次上传一个文件,等待前一个文件上传成功或失败后再上传下一个文件。这样可以减小服务器的压力,但上传时间会比较长。在el-upload组件中,你可以使用before-upload钩子来进行文件上传前的参数校验。根据引用\[3\]中的描述,你可以在beforeUpload方法中判断相关参数是否符合校验,如果不符合则返回false停止上传,如果符合则返回true继续上传。在handleAvatarSuccess方法中,你可以处理上传成功后的逻辑,比如将文件转为URL地址。这样就可以实现el-upload上传文件流的功能。 #### 引用[.reference_title] - *1* [el-upload多文件上传;el-upload采用递归依次上传文件el-upload采用递归在上一个文件上传成功后再传下一...](https://blog.csdn.net/i_am_a_div/article/details/127431603)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [el-upload 上传文件使用方式总结)](https://blog.csdn.net/qq_33404590/article/details/130510848)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值