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扩展插件Validate—4设置错误提示的样式
Sep 05 Javascript
利用js 进行输入框自动匹配字符的小例子
Jun 29 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
May 15 Javascript
node.js中的events.emitter.removeListener方法使用说明
Dec 10 Javascript
node.js中的fs.stat方法使用说明
Dec 16 Javascript
javascript实现博客园页面右下角返回顶部按钮
Feb 22 Javascript
让JavaScript中setTimeout支持链式操作的方法
Jun 19 Javascript
js调用webservice构造SOAP进行身份验证
Apr 27 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
Nov 11 Javascript
JS实现简易留言板(节点操作)
Mar 16 Javascript
Vue绑定用户接口实现代码示例
Nov 04 Javascript
如何制作自己的原生JavaScript路由
May 05 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 判断变量类型实现代码
2009/10/23 PHP
dedecms中使用php语句指南
2014/11/13 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
laravel 数据验证规则详解
2019/10/23 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
JS实现的自定义右键菜单实例二则
2015/09/01 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
windows下python安装小白入门教程
2018/09/18 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
Python 矩阵转置的几种方法小结
2019/12/02 Python
python实现从wind导入数据
2019/12/03 Python
初级Java程序员面试题
2016/03/03 面试题
高考升学宴主持词
2019/06/21 职场文书
教你nginx跳转配置的四种方式
2022/07/07 Servers