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

  • 华为ntn-an20是什么型号

    华为ntn-an20是什么型号

  • 抖音主页访客关闭后别人能看到吗(抖音主页访客关闭对方还会看到吗)

    抖音主页访客关闭后别人能看到吗(抖音主页访客关闭对方还会看到吗)

  • word表格如何调整行高(word表格如何调换两行)

    word表格如何调整行高(word表格如何调换两行)

  • 内存的主要特点(计算机内存的主要特点)

    内存的主要特点(计算机内存的主要特点)

  • 芒果tv饭团发布要审核多久(芒果tv饭团在哪)

    芒果tv饭团发布要审核多久(芒果tv饭团在哪)

  • 怎么让手机屏幕光滑(怎么让手机屏幕不旋转)

    怎么让手机屏幕光滑(怎么让手机屏幕不旋转)

  • 1660ti和1650ti差多少(1660ti和1650ti区别大吗)

    1660ti和1650ti差多少(1660ti和1650ti区别大吗)

  • .tt是什么域名(tm域名)

    .tt是什么域名(tm域名)

  • 京东自营和京东超市有什么区别(京东自营和京东旗舰店哪个是正品)

    京东自营和京东超市有什么区别(京东自营和京东旗舰店哪个是正品)

  • 照片上传到qq空间占手机内存吗(照片上传到QQ空间好还是网盘)

    照片上传到qq空间占手机内存吗(照片上传到QQ空间好还是网盘)

  • h5视频是什么(h5视频是什么意思)

    h5视频是什么(h5视频是什么意思)

  • 物联网设备主要有哪些(物联网设备具有哪些特点)

    物联网设备主要有哪些(物联网设备具有哪些特点)

  • mate30pro5G是单模还是双模(华为mate30pro5g支持双模吗)

    mate30pro5G是单模还是双模(华为mate30pro5g支持双模吗)

  • 6sp低温关机怎么解决(苹果六温度低就关机)

    6sp低温关机怎么解决(苹果六温度低就关机)

  • iphone11pro max什么时候上市(iPhone11pro Max什么处理器)

    iphone11pro max什么时候上市(iPhone11pro Max什么处理器)

  • 程序语言中的控制成分包括什么(程序控制的定义)

    程序语言中的控制成分包括什么(程序控制的定义)

  • 手机qq怎么清除缓存(手机QQ怎么清除单向好友)

    手机qq怎么清除缓存(手机QQ怎么清除单向好友)

  • 淘宝怎么关闭开售提醒(淘宝怎么关闭开发票)

    淘宝怎么关闭开售提醒(淘宝怎么关闭开发票)

  • oppoa59s忘记锁屏密码了怎么办(oppoa59s忘记锁屏密码怎么办)

    oppoa59s忘记锁屏密码了怎么办(oppoa59s忘记锁屏密码怎么办)

  • 连着wifiqq却显示4g(手机qq连上wifi为什么还显示4g在线)

    连着wifiqq却显示4g(手机qq连上wifi为什么还显示4g在线)

  • 小米mix3怎么调滑盖(小米mix3怎么调屏幕熄灭时间)

    小米mix3怎么调滑盖(小米mix3怎么调屏幕熄灭时间)

  • 分区引导记录是什么(分区引导记录不可引导)

    分区引导记录是什么(分区引导记录不可引导)

  • 亲属卡可以发红包吗(亲属卡发红包)

    亲属卡可以发红包吗(亲属卡发红包)

  • 小米蓝牙耳机充不进去电怎么办(小米蓝牙耳机充电)

    小米蓝牙耳机充不进去电怎么办(小米蓝牙耳机充电)

  • vivo浏览器缓存的视频在哪里(vivo浏览器缓存视频恢复)

    vivo浏览器缓存的视频在哪里(vivo浏览器缓存视频恢复)

  • 优酷如何取消自动续费(优酷如何取消自动扣费服务)

    优酷如何取消自动续费(优酷如何取消自动扣费服务)

  • 以旧换新销售商品
  • 服务外包行业要交社保吗
  • 经销商返点方案范文
  • 企业购入汽车可以抵扣增值税吗
  • 企业前期开办费怎么入账
  • 文化建设费征收依据
  • 城建税可以不交吗
  • 资产负债表里面的应收账款怎么算
  • 按收入比例结转怎么做账
  • 企业中征码怎么办
  • 应付职工薪酬工资贷方有余额要怎么调整
  • 暂存款属于什么费用
  • 试驾车抵税
  • 收到采购商品
  • 文化建设事业费逾期申报有罚款吗
  • 自然人销售固定资产
  • 高速公路抵税
  • 公司支付媒体广告费用必须签订合同吗?如果没有签订合同是否不能税前扣除?
  • 开票系统怎么改管理员名字
  • 银行转账备用金是什么意思
  • 股东的房产无偿提供给公司用
  • 工商企业年报网上申报时间
  • 增值税电子发票公共服务平台
  • 9个点的税率有哪些
  • win7原版系统安装后没有任何驱动
  • 固定资产报废能报保险公司理赔吗
  • 股票的交易费用是怎么算的
  • pcas service进程可以关闭么
  • 销售购物卡如何交税
  • 发票填开的基本规定?
  • mac怎么删除cineware
  • vue数据更新会触发什么生命周期
  • framework启动
  • 长期应付款项目的列示金额
  • 增值税价外费用是什么意思
  • 工资属于收益类科目吗
  • php中定义常量的函数是什么
  • vue.js devtools插件下载
  • 废钢收购无进项怎么处理
  • route命令的作用
  • thinkphp6框架源码完整版下载
  • 持有期间公允价值变动的科目归属
  • 英文描述什么是利润表
  • 专利申请费用能计入无形资产吗
  • 公司赠送客户的产品怎么核算
  • input和printf的区别
  • 应付账款可以用预收账款代替嘛
  • 驱动开发做得长久吗
  • 注册资金认缴和实缴的法律风险
  • 自行申报啥意思
  • 公司运营成本如何计算
  • 增值税直接减免额怎么做账
  • 贷款保险费能否抵扣个税
  • 代扣职工个人所得税的账务处理
  • 发票系统中监控怎么设置
  • 销售配件模式
  • mysql5.6 创建用户
  • windows vista如何安装
  • Windows Server 2003环境更改Boot.ini文件
  • 受限怎么解除
  • win7系统如何关闭更新系统
  • win8无法关机一直转圈
  • windows8怎么设置锁屏密码
  • win8的应用商店
  • win10怎么启用网卡
  • linux操作系统配置网络
  • android app 源码
  • window.open失效
  • python引用方法
  • select类中下拉框选择常见的方法
  • javascriptweb
  • 命令适用于
  • python爬虫代理ip巨量http 代理8元/日
  • js设置rem
  • 仿微信语音聊天
  • js的文件可以直接预览吗
  • 环保税怎么申报?看完你就明白了
  • 美国海关税收起征点
  • 县里的附加税
  • 用于直接销售消费品的消费税计入
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设