位置: 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日期时间选择器限制可选时间范围(精确时分秒)

  • 十个营销中常见的用户心理效应(1)(营销典型)

    十个营销中常见的用户心理效应(1)(营销典型)

  • 苹果手机微信不能扫二维码怎么回事(苹果手机微信不震动了怎么回事)

    苹果手机微信不能扫二维码怎么回事(苹果手机微信不震动了怎么回事)

  • bilibili电视大会员与大会员的区别是什么

    bilibili电视大会员与大会员的区别是什么

  • 苹果12.4系统更新了什么(苹果更新ios12.4)

    苹果12.4系统更新了什么(苹果更新ios12.4)

  • 苹果11电话打过来屏幕不显示怎么办(苹果电话打过去1秒自动挂断)

    苹果11电话打过来屏幕不显示怎么办(苹果电话打过去1秒自动挂断)

  • 苹果手机信号一两格(苹果手机信号一会断一会好)

    苹果手机信号一两格(苹果手机信号一会断一会好)

  • 苹果8最适合的ios版本(苹果8最好用)

    苹果8最适合的ios版本(苹果8最好用)

  • 在word里面怎么打勾(在word里面怎么做架构图)

    在word里面怎么打勾(在word里面怎么做架构图)

  • 图片转成pdf有什么用(图片转为pdf要钱吗)

    图片转成pdf有什么用(图片转为pdf要钱吗)

  • 充电口怎么清灰(如何清除充电口灰尘)

    充电口怎么清灰(如何清除充电口灰尘)

  • 2g显卡够用吗(目前主流显卡)

    2g显卡够用吗(目前主流显卡)

  • ipad ipadair ipadpro的区别(ipad ipadair ipadpro的区别 学生党)

    ipad ipadair ipadpro的区别(ipad ipadair ipadpro的区别 学生党)

  • 微信号密码忘了申诉失败怎么办(微信号密码忘了怎么办又没手机号)

    微信号密码忘了申诉失败怎么办(微信号密码忘了怎么办又没手机号)

  • 小米8手机音量自动变大(小米8手机音量键老是自己调高怎么办)

    小米8手机音量自动变大(小米8手机音量键老是自己调高怎么办)

  • 华为手机手机设置不见了怎么办(华为手机手机设置找不到了)

    华为手机手机设置不见了怎么办(华为手机手机设置找不到了)

  • poe交换机烧坏路由器吗(poe交换机会烧哪些设备)

    poe交换机烧坏路由器吗(poe交换机会烧哪些设备)

  • lon-al00是华为什么型号(lonal00是华为什么型号手机什么时候上市的)

    lon-al00是华为什么型号(lonal00是华为什么型号手机什么时候上市的)

  • 苹果消费如何退费(苹果消费如何退货)

    苹果消费如何退费(苹果消费如何退货)

  • 华为p30如何调音量(华为p30哪里调音量)

    华为p30如何调音量(华为p30哪里调音量)

  • 苹果x有反向充电吗(苹果x有反向充电功能怎么打开)

    苹果x有反向充电吗(苹果x有反向充电功能怎么打开)

  • oppok5是玻璃机身吗(oppok5后面的玻璃摔碎了该怎么办?)

    oppok5是玻璃机身吗(oppok5后面的玻璃摔碎了该怎么办?)

  • 哪个视图不能编辑文档(下面哪个视图中不可以编辑)

    哪个视图不能编辑文档(下面哪个视图中不可以编辑)

  • 蓝牙耳机听歌辐射大吗(蓝牙耳机听音乐对人体的危害)

    蓝牙耳机听歌辐射大吗(蓝牙耳机听音乐对人体的危害)

  • 智慧团建初始密码是啥(智慧团建初始密码不对怎么回事)

    智慧团建初始密码是啥(智慧团建初始密码不对怎么回事)

  • ppt图片怎么换位置(ppt如何更换图片顺序)

    ppt图片怎么换位置(ppt如何更换图片顺序)

  • 快手发的作品能修改吗(快手发的作品能知道位置吗)

    快手发的作品能修改吗(快手发的作品能知道位置吗)

  • 华为p30相册在哪里(华为p30相册在哪个文件夹)

    华为p30相册在哪里(华为p30相册在哪个文件夹)

  • vue最易理解且详细的调用swiper插件(vue常用)

    vue最易理解且详细的调用swiper插件(vue常用)

  • 投资者从其投资企业借款
  • 逾期未申报是什么意思
  • 运输公司的车辆保险费计入什么科目
  • 管道燃气工程设计方案
  • 研发费用直接计入成本吗
  • 差额征税怎么填写申报表
  • 办理契税需要的户口本复印件可以吗
  • 车辆购置税免税申报如何操作
  • 建安企业增值税税负是多少
  • 转账支票遗失能挂失吗
  • 未计提坏账准备金额在哪个科目
  • 别人垫付的医药费,可以报销吗
  • 发放年终奖计提需要调减利润吗
  • 购买的认证标志入什么费用?
  • 公司职员聚餐取个名字
  • 银行承兑汇票盖已承兑登记
  • 年收入12万以内个人所得税
  • 水电开发潜力
  • 预缴纳税申报失败怎么办
  • 职工福利费支出计入什么科目
  • 公司成立之后有人投资怎么做分录?
  • 增值税小规模纳税人免征增值税政策
  • 一般纳税人转让固定资产增值税税率
  • 计算内含报酬率所使用的年金现值系数
  • 电子商务平台怎么下载中标通知书
  • 管理费用和财务费用在资产负债表怎么填
  • Win10升级win11是激活状态吗?
  • 跨年退税怎么处理
  • 收到服务费发票可以计入什么科目
  • 公司被收购后所需资金
  • 外地企业预缴税款流程
  • 数据处理教程
  • 工业企业在进行材料采购
  • 怎么核算购进商品
  • 工程扣款 甲方账务处理
  • 借银行卡给别人过账有什么风险
  • thinkphp案例
  • 对方开了红字信息表我们开发票怎么做账
  • 去年的所得税计提多了怎么做分录
  • 应交税金会计编码
  • 个人所得税经营所得税申报表A表
  • dedecms织梦不同栏目导航显示不同样式的方法
  • 去银行打对账单和回执单需要拿什么
  • 应付利息的会计分录怎么写
  • 预付账款未发货会计分录
  • 小规模纳税人取得普通发票可以抵扣吗
  • 广告牌制作计入什么科目
  • 什么叫递延收益和其他收益
  • 旅行社增值税2020
  • 其他应付款贷方什么意思
  • 小规模纳税人转一般纳税人当月如何申报
  • 党组织专项经费包括什么
  • 职工福利费的计提比例为职工工资总额扣除奖金后的
  • 银行转出去的账可以追回吗?
  • 电子税务局申报比对异常
  • 累计折旧税率
  • 年初未分配利润在利润表怎么填
  • mysql5.7.24安装配置教程
  • eclipse连接mysql代码
  • Linq to SQL 插入数据时的一个问题
  • XP系统怎么设置双屏幕
  • linux系统tar命令
  • ubuntu里怎么装软件
  • centos查看inode
  • avsched32.exe是什么进程 avsched32进程有什么作用
  • mac安全设置在哪里
  • linux添加启动
  • xp系统如何优化
  • windows休眠文件
  • cocos2d安装
  • cocos2dx 3.17
  • cocos2dx游戏案例
  • opengl 绘制
  • shell脚本 定义变量
  • jquery trigger函数执行两次的解决方法
  • Android---43---Service之IntentService
  • 国家河北税务局官网
  • python excel库哪个好
  • 银行存款利息收入现金流量表计入哪
  • 建设工程合同纠纷属于专属管辖吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设