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 相关文章推荐
CSS+jQuery实现的一个放大缩小动画效果
Sep 24 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
Feb 04 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
jQuery实现页面滚动时智能浮动定位
Jan 08 Javascript
详解vue 中使用 AJAX获取数据的方法
Jan 18 Javascript
js实现登录与注册界面
Nov 01 Javascript
深入研究React中setState源码
Nov 17 Javascript
vue.js中created方法作用
Mar 30 Javascript
webpack4 css打包压缩问题的解决
May 18 Javascript
js数组去重的N种方法(小结)
Jun 07 Javascript
vue基础知识--axios合并请求和slot
Jun 04 Javascript
JavaScript数组常用的增删改查与其他属性详解
Oct 13 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制作静态网站的模板框架(二)
2006/10/09 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
Python性能优化的20条建议
2014/10/25 Python
python多线程threading.Lock锁用法实例
2014/11/01 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
Python的logging模块基本用法
2020/12/24 Python
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
高中同学聚会邀请函
2014/01/11 职场文书
中文专业求职信
2014/06/20 职场文书
项目合作协议书
2014/09/23 职场文书
先进班集体申报材料
2014/12/26 职场文书
毕业论文致谢信
2015/05/14 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
k-means & DBSCAN 总结
2021/04/27 Python
Ajax请求超时与网络异常处理图文详解
2021/05/23 Javascript
Python办公自动化PPT批量转换操作
2021/09/15 Python