element-ui 中使用upload多文件上传只请求一次接口


Posted in Javascript onJuly 19, 2019

方法一

不使用组件内部的钩子

<el-upload
 class="upload-image"
 ref="upload"
 multiple
 :action="baseUrl"
 list-type="picture"
 :auto-upload="false"
 accept="image/*">
 <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
 <el-button size="small" type="success" @click="submitUpload">上传到服务器</el-button>
 <div slot="tip">只能上传jpg、png、gif 格式,大小不超过500KB的图片</div>
</el-upload>

js

点击上传服务器的按钮时调用这个函数,也就是说不走upload的钩子,不调用他的方法自己搞

submitUpload () {
   let { uploadFiles } = this.$refs.upload
   let form = new FormData()
   let status = true
   // 在这里对每一张图片进行大小的校验,如果不符合则提示,所有不符合的都提示,校验完成后只要有不符合条件的就不执行下面的操作
   uploadFiles.forEach(item => {
    const size = item.raw.size / 1024 <= 500
    if (!size) {
     this.$message.error(`${item.raw.name}大小超过500KB`)
     status = false
     return
    }
    form.append('image[]', item.raw)
   })
   if (!status) {
    return
   }
   // 符合条件后再将这个FormData对象传递给后端
   //调取接口上传form参数
   
 }

方法二

使用内部的回调去获取对应的

<el-upload
 class="upload-image"
 ref="upload"
 multiple
 :action="baseUrl"
 list-type="picture"
 :auto-upload="false"
 :before-upload="beforeImageUpload"
 :http-request="ImageRequest"
 accept="image/*">
 <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
 <el-button size="small" type="success" @click="submitUpload">上传到服务器</el-button>
 <div slot="tip">只能上传jpg、png、gif 格式,大小不超过500KB的图片</div>
</el-upload>

js

beforeImageUpload (file) { // 上传文件前的钩子对文件进行校验
  const size = file.size / 1024 < 500
  if (!size) {
   this.$message.error('上传图片大小不能超过 500KB!')
  }
  return size
}

上传前钩子返回false之后给文件就不会再往下执行下面的钩子了

因此在http-request的钩子就不会被执行,在该钩子中获取到的都是通过校验的file文件的信息

ImageRequest (file) {
  this.formData.append('image[]', file.file)
}

此时在这个formData 中的数据就是通过校验的数据

submitUpload () {
  this.formData = new FormData()
  // 手动触发上传
  this.$refs.upload.submit()
  // 此时所有的钩子已经执行完了formData 中存的是通过校验的数据
  // 此时在调用接口上传该数据
}

该方法在使用时不符合条件的文件会自动删除只留下符合条件的

可能是before-upload这个钩子的原因不符合之后他会去调用删除的钩子

因此使用方法一比这个要好很多

该方法节省了我们自己写样式以及预览,组件都帮你干了,你只要写逻辑就好啦

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery入门—访问DOM对象方法
Jan 07 Javascript
基于jquery的9行js轻松实现tab控件示例
Oct 12 Javascript
jQuery中的val()示例应用
Feb 26 Javascript
javascript实现验证身份证号的有效性并提示
Apr 30 Javascript
jQuery基于扩展简单实现倒计时功能的方法
May 14 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
Nov 18 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
Jan 11 Javascript
微信小程序中上传图片并进行压缩的实现代码
Aug 28 Javascript
vue项目每30秒刷新1次接口的实现方法
Dec 04 Javascript
ES6的异步终极解决方案分享
Jul 11 Javascript
javascript之分片上传,断点续传的实际项目实现详解
Sep 05 Javascript
vue iview实现动态新增和删除
Jun 17 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
Jul 19 #Javascript
bootstrap table插件动态加载表头
Jul 19 #Javascript
Vue数据驱动表单渲染,轻松搞定form表单
Jul 19 #Javascript
VueJS 取得 URL 参数值的方法
Jul 19 #Javascript
vue自定义表单生成器form-create使用详解
Jul 19 #Javascript
bootstrap table列和表头对不齐的解决方法
Jul 19 #Javascript
JS开发 富文本编辑器TinyMCE详解
Jul 19 #Javascript
You might like
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
php中的实现trim函数代码
2007/03/19 PHP
php 读取shell管道传输过来的内容
2010/03/01 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
js 中 document.createEvent的用法
2010/08/29 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python的设计模式编程入门指南
2015/04/02 Python
Python的多态性实例分析
2015/07/07 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
Python实现12306火车票抢票系统
2019/07/04 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
销售个人求职信范文
2014/04/28 职场文书
幼儿园运动会口号
2014/06/07 职场文书
2014年销售工作总结
2014/12/01 职场文书
库房管理员岗位职责
2015/02/12 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
导游词之任弼时故居
2020/01/07 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL
spring boot中nativeQuery的用法
2021/07/26 Java/Android
Vue2.0搭建脚手架
2022/03/13 Vue.js