位置: IT常识 - 正文

Vue 批量上传,使用 el-upload 实现批量上传文件只调用一个请求,只需要一个上传按钮(vue批量上传图片至oss)

编辑:rootadmin
Vue 批量上传,使用 el-upload 实现批量上传文件只调用一个请求,只需要一个上传按钮 背景介绍需求背景后端需要批量对上传的文件进行处理原生的 el-upload 批量上传会多次调用上传接口,不支持一次调用前端需要对选择的文件进行批量校验

推荐整理分享Vue 批量上传,使用 el-upload 实现批量上传文件只调用一个请求,只需要一个上传按钮(vue批量上传图片至oss),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue批量上传图片至oss,vue批量上传图片,vue批量上传文件,vue批量上传图片,vue批量上传文件报错,vue批量上传图片至oss,vue批量上传文件,vue批量上传图片,内容如对您有帮助,希望把文章链接给更多的朋友!

2、使用 el-upload是因为:

项目是基于饿了吗组件库开发的,不想再引入其他的组件进行开发;原生的input实现上传样式处理也比较费劲。

在网上看了大家的实现方案,发现要不然就是使用 input 进行批量上传;使用 el-upload的场景都需要两个按钮【选择文件、上传】才能实现上面的诉求,考虑到这样的交互都不太友好,所以使用自己的方式实现。

一、实现效果

先来说说实现的效果,点击上传按钮,弹出文件选择,选择后直接调用上传接口进行上传,只调用一个接口。

项目效果 功能效果

Vue 批量上传,使用 el-upload 实现批量上传文件只调用一个请求,只需要一个上传按钮(vue批量上传图片至oss)

请求 template代码 request代码

二、具体说明0. data变量说明data() { return { uploadCfg: { fileList: [], // 默认绑定的文件列表 validFileList: [] // 通过校验的文件列表 } }; }

下面来解释下以上template中重要的两个组件属性

1. handleBeforeUpload

上传文件之前的校验:至少要包含一个excel文件;如果校验通过,请求接口;如果校验不通过,终止接口的请求,并给出校验不通过的提示。

/** * @desc 上传之前进行文件校验 * @param file 当前文件 */handleBeforeUpload(file){ let vm = this; return new Promise((resolve, reject) => { // 收集文件列表 this.uploadCfg.validFileList.push(file); // 校验文件列表 vm.handleDebounceVarifyFile(); setTimeout(function (){ if (!_.isEmpty(vm.uploadCfg.validFileList)){ resolve(true); } else { reject(true); } }, 100); });}

可以看到这里返回了Promise,看下官方给的解释,如下图,就是说支持用 Promise的方式返回结果,没有直接返回 false的原因下面说明一下。

el-upload的handleBeforeUpload会在批量上传的时候触发多次,即选择几个文件就会调用几次,我们的需求是,至少要包含一个excel文件,这种情况下需要收集所有选中的文件进行批量校验,单个的触发是不能满足的,所以这里使用了一个【防抖函数】handleDebounceVarifyFile通过短时间内最后一次触发,来达到批量校验文件的效果。 因为会多次触发,所以这里的校验函数,返回的是一个Promise。

下面是防抖函数的逻辑说明,具体可以根据自己的应用场景去开发这里的逻辑

/** * @desc 防抖触发文件上传前,保证批量校验 */handleDebounceVarifyFile: _.debounce(function (){ let excel_file = {}; if (_.isEmpty(this.uploadCfg.validFileList)){ return; } excel_file = this.uploadCfg.validFileList.find(item => { return /\.(xls)|\.(xlsx)$/.test(item.name); }); // 如果文件校验不合理,清空合法文件列表,并提示 if (_.isEmpty(excel_file)){ this.uploadCfg.validFileList = []; this.$message.warning('至少上传一个xls或者xlsx格式的文件!'); }}, 20)2. handleUploadHttp

这里使用自定义的上传方法,和上传前校验一样, el-ipload默认会多次调用上传接口,我们需要做的也是使用防抖的思路,控制最后一次触发上传回调的时候去构造批量的文件数据,请求接口,下面是具体代码:

/** * @desc 自定义上传 */ handleUploadHttp(){ this.handleDebounceUpload(); }/** * @desc 防抖触发文件上传前,保证批量上传 */ handleDebounceUpload: _.debounce(function (){ if (_.isEmpty(this.uploadCfg.validFileList)){ return; } let formData = new FormData(); this.uploadCfg.validFileList.forEach((item_file) =>{ formData.append(`files`,item_file); }); batchUploadApi.uploadXsxx(formData).then(()=> { this.$message.success('附件已上传成功,请等待数据入库!'); this.uploadCfg.validFileList = []; }).catch(err => { console.log('批量上传附件失败', err); });}, 20)三、结语

至此,个人认为比较完美的解决了问题,分享出来希望可以帮助到有同样问题的人~

本文链接地址:https://www.jiuchutong.com/zhishi/287284.html 转载请保留说明!

上一篇:最贵的域名是什么(最贵的域名是什么名字)

下一篇:ElementPlus DateTimePicker日期时间选择器限制可选时间范围(精确时分秒)

  • 退休金合并其他收入缴纳个税
  • 委托收款和托收承付结算方式,都受结算金额起点的限制
  • 没进项发票的开销项发票多少税?
  • 集装箱维护是做什么的
  • 现金日记账根据哪些凭证登记
  • 企业总资产是否包含累积折旧
  • 垫付的医疗费保险多久可以报销
  • 酒店内部招待费怎么记账
  • 确认收入销售折让分录
  • 酒店代金券怎么做账
  • 分公司往子公司投资如何做税务处理?
  • 二手车公司怎么开发票
  • 企业重组中撤资所得税有哪些处理规则?
  • 企业转增股本要交税吗
  • 增值税普票未上传怎么办
  • 房地产公司收到房款的会计分录
  • 公务用车用油
  • 企业不能抵扣的专票有哪些
  • 差额纳税和全额纳税比例
  • 经营活动现金流量净额
  • 小规模纳税人未达到起征点的增值税怎么做账
  • 应收利息和应计利息有什么不同
  • 销售利润率和毛利率计算
  • 零星工程实施流程
  • 活动展开方式怎么写
  • 应付职工薪酬账户结构
  • php分页函数封装
  • 上一年度的费用入账需要分摊吗
  • kavsvc.exe - kavsvc是什么进程 有什么作用
  • 如何清理电脑浏览器
  • Vue3+element-plus 后台管理系统(含登陆注册功能页面)
  • 待摊费用每月怎么摊
  • 收到借款金额
  • 向银行借入长期借款200000元,存入银行
  • php foreach as
  • 已提足折旧固定资产改建支出 所得税怎么计算
  • phpcms文档
  • sqlserver2005安装步骤教程
  • 公司旅游费会计分录
  • 工程合同主要看什么
  • 投标报名费怎么做分录
  • 职工薪酬包括哪几类
  • sql使用cast进行数据类型转换示例
  • 物业代收代缴是什么意思
  • 发票金额大于付款金额怎么写说明
  • 其他应收款余额在贷方什么意思
  • 工会会员缴纳的医疗互助金列工会什么科目
  • 负债类会计科目新增科目包括
  • 无形资产未取得发票
  • 写字楼物业费按照什么面积
  • 公司章程上的出资额怎么填
  • 财务费用包括什么项目
  • 公司赠送客户礼品怎么做账
  • 劳务费属于哪个会计科目
  • 业务招待费纳税调整会计分录
  • 缴纳工会筹备金应该记什么科目
  • 车船税没发票只交可以吗
  • 其他债权投资减值准备是什么科目
  • 新成立的公司购买的家具可以计入主营业务成本吗
  • 市盈率为负数是说明什么呢
  • sql注入式攻击中单引号的作用
  • mysql 5.7启动
  • xp系统安装惠普1010教程
  • 苹果序列号查询
  • win2008r2下载
  • linux系统的介绍
  • freebsd安装pkg
  • 虚拟机里面如何设置网络
  • linux重启命令网卡
  • win8开始页面
  • javascript的理解
  • cocos2dx-js
  • python中将
  • jquery model
  • 有道词典下载安装
  • android键盘aosp
  • 已经开具的电子专票怎么重新下载
  • 如何开通税务系统
  • 电子税务局怎么删除办税员
  • 四川社保缴费后多久生效
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设