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 编程引入命名空间的方法与代码
Aug 13 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
Dec 09 Javascript
JavaScript设计模式之抽象工厂模式介绍
Dec 28 Javascript
js表头排序实现方法
Jan 16 Javascript
基于bootstrap3和jquery的分页插件
Jul 31 Javascript
js钢琴按钮波浪式图片排列效果代码分享
Aug 26 Javascript
javascript类型系统 Array对象学习笔记
Jan 09 Javascript
Bootstrap表单布局样式源代码
Jul 04 Javascript
smartupload实现文件上传时获取表单数据(推荐)
Dec 12 Javascript
JavaScript 数据类型详解
Mar 13 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
Jan 12 Javascript
vue实现倒计时获取验证码效果
Apr 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
ASP知识讲座四
2006/10/09 PHP
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php检测用户是否用手机(Mobile)访问网站的类
2014/01/09 PHP
php中使用url传递数组的方法
2015/02/11 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
JavaScript面向对象编程
2008/03/02 Javascript
JavaScript 事件系统
2010/07/22 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
js仿iphone秒表功能 计算平均数
2017/01/11 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
Python 错误和异常小结
2013/10/09 Python
Python计算时间间隔(精确到微妙)的代码实例
2019/02/26 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
python中常用的数据结构介绍
2021/01/12 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
接口中的方法可以是abstract的吗
2015/07/23 面试题
消防安全管理制度
2014/02/01 职场文书
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python
mysql查找连续出现n次以上的数字
2022/05/11 MySQL
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang