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

  • 上海已监测到XBB.1.5毒株,新冠感染高端局即将打响

    上海已监测到XBB.1.5毒株,新冠感染高端局即将打响

  • 苏康码变黄了怎么办(苏康码变黄了怎么变回来)

    苏康码变黄了怎么办(苏康码变黄了怎么变回来)

  • 抖音观看人次怎么设置(抖音观看人次怎么关闭)

    抖音观看人次怎么设置(抖音观看人次怎么关闭)

  • 为什么群聊突然消失了(为什么群聊突然发不了信息)

    为什么群聊突然消失了(为什么群聊突然发不了信息)

  • 苹果xr wifi连上不能上网(苹果xr连接wifi不稳定怎么解决)

    苹果xr wifi连上不能上网(苹果xr连接wifi不稳定怎么解决)

  • 怎么看下载软件历史(怎么看下载软件是不是官方)

    怎么看下载软件历史(怎么看下载软件是不是官方)

  • 华为手机状态栏有个锁(华为手机状态栏怎么恢复原来的样子)

    华为手机状态栏有个锁(华为手机状态栏怎么恢复原来的样子)

  • 充电宝20000毫安充电多长时间(充电宝20000毫安多少钱)

    充电宝20000毫安充电多长时间(充电宝20000毫安多少钱)

  • opporeno2是不是5g网(OPPOreno2是不是5G)

    opporeno2是不是5g网(OPPOreno2是不是5G)

  • 只读光盘cdrom属于什么(只读光盘简称)

    只读光盘cdrom属于什么(只读光盘简称)

  • mate20x屏幕尺寸

    mate20x屏幕尺寸

  • 微信保存图片失败怎么回事(微信保存图片失败怎么开启权限)

    微信保存图片失败怎么回事(微信保存图片失败怎么开启权限)

  • 20 gb的硬盘表示容量约为(20 gb的硬盘表示容量约为多少一个字节)

    20 gb的硬盘表示容量约为(20 gb的硬盘表示容量约为多少一个字节)

  • 手机备份占用内存吗(手机备份占用空间吗)

    手机备份占用内存吗(手机备份占用空间吗)

  • 苹果11是六核还是八核(苹果11是六核还是十核)

    苹果11是六核还是八核(苹果11是六核还是十核)

  • 抖音合拍怎么放照片(抖音合拍怎么放照片和自己的声音)

    抖音合拍怎么放照片(抖音合拍怎么放照片和自己的声音)

  • 荣耀20s怎么反向充电(荣耀20s怎么反向拍照)

    荣耀20s怎么反向充电(荣耀20s怎么反向拍照)

  • iphone11怎么设置镜像(iphone11怎么设置指纹解锁)

    iphone11怎么设置镜像(iphone11怎么设置指纹解锁)

  • 苹果x怎么给软件加密(苹果x怎么给软件加密码锁)

    苹果x怎么给软件加密(苹果x怎么给软件加密码锁)

  • 现在还有用proe2001编程吗(现在还有用qq聊天的吗)

    现在还有用proe2001编程吗(现在还有用qq聊天的吗)

  • 携程怎么开通信用抢票(携程im怎么开通)

    携程怎么开通信用抢票(携程im怎么开通)

  • 怎么保护电子邮件安全?(如何安全的处置电子邮件)

    怎么保护电子邮件安全?(如何安全的处置电子邮件)

  • vue的proxy代理详解(vue中的proxy代理)

    vue的proxy代理详解(vue中的proxy代理)

  • php高级面试题的要点(php面试题目100及最佳答案)

    php高级面试题的要点(php面试题目100及最佳答案)

  • 电脑学习网强推WP Rocket3.11.4.1最新汉化破解版最强WordPress商用缓存插件-电脑学习网破解(有没有网上学电脑的)

    电脑学习网强推WP Rocket3.11.4.1最新汉化破解版最强WordPress商用缓存插件-电脑学习网破解(有没有网上学电脑的)

  • 受托代销商品款和受托代销商品的区别
  • 财务章备案和不备份区别
  • 农产品一般纳税人开普票免税吗
  • 企业破产时下列受偿等级最高的是
  • 个人处置打包债权取得的收入
  • 资本公积是属于什么类账户
  • 成本类科目期末借方余额表示
  • 会员卡收费怎么办理
  • 调整跨期收入是否调增值税
  • 折让方式
  • 免抵退分录怎么做
  • 小规模纳税人要做账吗
  • 营改增的优惠政策
  • 阿里云增值税专用发票
  • 企业接受固定资产投资
  • 小规模纳税人没有成本票怎么做账
  • 预缴税多交了,税务局退吗
  • 饭店试菜费用如何计算
  • 财税〔2017〕39号
  • 已申报税额什么时候缴纳
  • 银行利息所得税调整方案
  • 原始凭据
  • 贷款本金余额具体是什么意思
  • 外购公司的长期投资如何做账
  • 自己开电子发票要什么软件
  • 金蝶的币别和汇率怎么取消
  • 支付给董事的董事费怎么征收个人所得税?
  • mac鼠标移动到角落立刻显示桌面
  • 代金券消费怎么做分录
  • windows11测试版升级正式版
  • 微软笔记本
  • launcher.exe是什么,每次开机都是否需要进行更改
  • php教程100
  • 工程施工科目借贷方向
  • PHP:curl_copy_handle()的用法_cURL函数
  • 支付代销手续费缴纳增值税吗
  • 进项发票抵扣途中怎么办
  • nvm安装及全局配置node
  • it最高工资
  • 金融资产减值的账务处理
  • c++ 每日十问3-处理数据
  • cvg模型
  • 利润表中的管理费用怎么填
  • mysql事务性能
  • 收到老板的钱怎么做分录
  • 购买方销项负数发票怎么抵扣
  • 财务报表信息的分类
  • 怎么保证发票是真的
  • sqlserver无法打开备份设备
  • 税控盘维护费全额抵扣分录
  • 企业所得税余额为负数
  • 生产成本月末有余额资产负债表平衡吗
  • 建筑劳务公司工作内容
  • 在软件中的操作有哪些
  • 成本核算方法是资源到作业,作业到产品吗?
  • 网上交税已经缴费怎么退
  • 应收账款如何做平
  • 免征的教育费附加怎么做账
  • 应付职工薪酬如何进行会计处理
  • 叉车上牌流程注册登记
  • 工程一直不办结算怎么办
  • 所有者权益增加额怎么计算
  • 建账的内容一般包括什么
  • sql替换快捷键
  • win 10怎么更换系统
  • win2003取消自动锁定
  • win7修改系统版本
  • centos inode
  • cortanawin10在哪
  • 电脑开机蓝屏怎么解决xp系统
  • unity如何避免碰撞穿透
  • ligerUI---ListBox(列表框可移动的实例)
  • [置顶]bilinovel
  • ar现实增强设备
  • python爬虫工作内容
  • node.js ejs
  • 北京税务局网上怎么登录
  • 财政短信是什么意思
  • 国家税务总局39号文
  • 郑州房子契税退税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设