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 相关文章推荐
javascript 兼容FF的onmouseenter和onmouseleave的代码
Jul 19 Javascript
客户端限制只能上传jpg格式图片的js代码
Dec 09 Javascript
js弹出模式对话框,并接收回传值的方法
Mar 12 Javascript
ext combobox动态加载数据库数据(附前后台)
Jun 17 Javascript
jquery果冻抖动效果实现方法
Jan 15 Javascript
JQuery中上下文选择器实现方法
May 18 Javascript
JS实现的仿淘宝交易倒计时效果
Nov 27 Javascript
js使用原型对象(prototype)需要注意的地方
Aug 28 Javascript
AngularJS实现表单元素值绑定操作示例
Oct 11 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
Jun 28 Javascript
简述ES6新增关键字let与var的区别
Aug 23 Javascript
vue 实现特定条件下绑定事件
Nov 09 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
PHP 图像尺寸调整代码
2010/05/26 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
JS location几个方法小姐
2008/07/09 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
布同自制Python函数帮助查询小工具
2011/03/13 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
Python random模块用法解析及简单示例
2017/12/18 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
numpy库reshape用法详解
2020/04/19 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
港湾网络笔试题
2014/04/19 面试题
个人职业生涯规划书1500字
2013/12/31 职场文书
合作协议书怎么写
2014/04/18 职场文书
群众路线表态发言材料
2014/10/17 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
Java集成swagger文档组件
2021/06/28 Java/Android
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技