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

  • 苹果x指纹设置在哪(苹果x手机指纹设置)

    苹果x指纹设置在哪(苹果x手机指纹设置)

  • 注销微信后手机号能重新注册账号吗(注销微信后手机号多久解绑)

    注销微信后手机号能重新注册账号吗(注销微信后手机号多久解绑)

  • 手机知乎为什么不能复制(手机知乎为什么要下载)

    手机知乎为什么不能复制(手机知乎为什么要下载)

  • pot_al00a是华为什么型号手机

    pot_al00a是华为什么型号手机

  • 支付宝红包发错了怎么撤回(支付宝红包发错人了怎么马上退款?)

    支付宝红包发错了怎么撤回(支付宝红包发错人了怎么马上退款?)

  • 苹果11拍视频怎么打开闪光灯(苹果11拍视频怎么设置最清晰)

    苹果11拍视频怎么打开闪光灯(苹果11拍视频怎么设置最清晰)

  • 爱奇艺下载视频怎么保存到本地(爱奇艺下载视频怎么导出)

    爱奇艺下载视频怎么保存到本地(爱奇艺下载视频怎么导出)

  • 钉钉里的视频怎么转发到微信(钉钉里的视频怎么保存到u盘)

    钉钉里的视频怎么转发到微信(钉钉里的视频怎么保存到u盘)

  • 6.57英寸手机长宽是多少厘米(6.57英寸手机长是多少厘米)

    6.57英寸手机长宽是多少厘米(6.57英寸手机长是多少厘米)

  • 淘宝与天猫的区别???(淘宝与天猫一样吗)

    淘宝与天猫的区别???(淘宝与天猫一样吗)

  • kingston内存条怎么看(kingston内存条怎么看生产日期)

    kingston内存条怎么看(kingston内存条怎么看生产日期)

  • 微信个人信息在哪里查看(怎么推送微信)

    微信个人信息在哪里查看(怎么推送微信)

  • 苹果数据线一定要用原装的吗(苹果数据线一定要买原装的吗)

    苹果数据线一定要用原装的吗(苹果数据线一定要买原装的吗)

  • 华为怎么返回上一步(华为怎么返回上一个版本)

    华为怎么返回上一步(华为怎么返回上一个版本)

  • 魅族m1metal是什么型号(魅族m1metal价格 参数)

    魅族m1metal是什么型号(魅族m1metal价格 参数)

  • 腾讯视频上传转码要多久(腾讯视频传视频怎么传)

    腾讯视频上传转码要多久(腾讯视频传视频怎么传)

  • vpu是什么(v普是什么意思)

    vpu是什么(v普是什么意思)

  • 华为手机屏幕变成黑白颜色怎么办(华为手机屏幕变黄色怎么调回来)

    华为手机屏幕变成黑白颜色怎么办(华为手机屏幕变黄色怎么调回来)

  • 淘宝订单编号能查什么(淘宝订单编号能查到买家信息吗)

    淘宝订单编号能查什么(淘宝订单编号能查到买家信息吗)

  • 苹果11微信提示音怎么换(苹果11微信提示音怎么改其他声音)

    苹果11微信提示音怎么换(苹果11微信提示音怎么改其他声音)

  • 苹果xr怎么设置软件锁(苹果xr怎么设置动态壁纸)

    苹果xr怎么设置软件锁(苹果xr怎么设置动态壁纸)

  • 拼多多可以充话费吗(拼多多充话费可以开发票吗)

    拼多多可以充话费吗(拼多多充话费可以开发票吗)

  • 手机qq中的自动回复怎么设置(手机qq中的自动回复设置)

    手机qq中的自动回复怎么设置(手机qq中的自动回复设置)

  • 电脑显示器模糊的一些原因有哪些?(电脑显示器模糊不清晰是什么原因)

    电脑显示器模糊的一些原因有哪些?(电脑显示器模糊不清晰是什么原因)

  • 股东继续投资
  • 建筑劳务公司做账分录
  • 对方开具红字发票信息表后我们怎么开负数
  • 合同租金总收入怎么填
  • 有外经证的计税收入怎么算?
  • 收到公众号申请的小额打款认证怎么入账?
  • 开具的增值税专用发票上注明的金额
  • 远期转账支票怎么取钱
  • 公司多久不做账会被注销?
  • 减免所得税怎么算税率
  • 个人住房房产税查询
  • 2020年小规模生活服务业优惠政策
  • 税务局代增值税普通发票流程
  • 资产减值损失列示在利润表哪里
  • 奖励费收入是什么
  • win10 5月更新已知bug
  • msvcp140.dll丢失怎么办
  • 用系统自带命令行安装WIN10
  • 比较常见的病有哪些
  • 三七粉的功效与作用及正确吃法
  • aliapp.exe是什么意思
  • php occ
  • 如何进入企业年报系统
  • 代缴费社保
  • 酒店预收款管理制度
  • 出口增值税怎么计算公式
  • 银行转来委托收款
  • 应付职工薪酬年末结转到哪个科目
  • yii2-admin
  • phpmyadmin版本
  • css实现背景图片变透明
  • pytorch csdn
  • 代扣代缴应付职工薪酬账务处理
  • 免缴纳的增值税怎么做账
  • 财务没有及时缴费怎么办
  • python byte数组
  • 收回已冲销的应收账款会计分录
  • 红字发票与作废发票验旧
  • 土地利息可以作为土增扣除吗
  • 企业的预付账款属于金融资产吗
  • 公司无流水要交税不
  • 预留印鉴章是什么章
  • 原材料基本账务处理办法
  • 无形资产减值准备借贷
  • 母子公司间固定资产交换
  • 特殊销售方式下销售额的确定
  • 购货方尚未偿付的货款属于什么会计科目
  • 销售返利如何做账
  • 跟老师出差路上可以聊些什么
  • 农产品增值税公式
  • 研发费用凭证附件
  • 管理费用如何分摊到项目
  • 现金流量补充表的应付项目是什么
  • 发票红冲重新开具怎么做分录
  • 企业为什么要进行绩效管理?
  • 规范的记账凭证是什么
  • sql忽略null
  • sql server数据库怎么导出
  • jdbc连接MySQL实验总结
  • windowsxp2
  • redhat 7.0
  • ccsve是啥
  • 怎么彻底关闭windows更新
  • Linux的bg和fg命令简单介绍
  • win8自动启动项怎么设置
  • 联想 恢复
  • node实战
  • js基础笔记
  • 创建自己的app外卖平台
  • C# list多字段排序sort
  • node js并发加载缓慢
  • angularjs1.5
  • 基于android的app的设计与开发
  • js如何获取浏览器窗口大小
  • bash脚本语法
  • jquery图片左右切换
  • 事件的分发与传播的关系
  • 山西省税务局投诉平台
  • 国家税务局扬州
  • 税务区域代码怎么填
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设