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 相关文章推荐
js获得页面的高度和宽度的方法
Feb 23 Javascript
Javascript中的call()方法介绍
Mar 15 Javascript
基于jQuery实现的菜单切换效果
Oct 16 Javascript
一览画面点击复选框后获取多个id值的方法
May 30 Javascript
实用jquery操作表单元素的简单代码
Jul 04 Javascript
浅谈js的ajax的异步和同步请求的问题
Oct 07 Javascript
深入理解vue中的$set
Jun 01 Javascript
Angular+Node生成随机数的方法
Jun 16 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
Aug 14 Javascript
vue移动端下拉刷新和上拉加载的实现代码
Sep 08 Javascript
JS判断两个数组或对象是否相同的方法示例
Feb 28 Javascript
详解微信小程序动画Animation执行过程
Sep 23 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
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
PHP Hash算法:Times33算法代码实例
2015/05/13 PHP
php生成curl命令行的方法
2015/12/14 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
2019/03/11 PHP
奇妙的js
2007/09/24 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
在vue中给列表中的奇数行添加class的实现方法
2018/09/05 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
Python构建XML树结构的方法示例
2017/06/30 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
python中判断文件结束符的具体方法
2020/08/04 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
2020/08/17 Python
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
CheapTickets香港机票预订网站:CheapTickets.hk
2019/06/26 全球购物
专业实习自我鉴定
2013/10/29 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
应用外语系自荐信
2014/06/26 职场文书
新教师教学工作总结
2015/08/12 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
如何自己动手写SQL执行引擎
2021/06/02 MySQL
HTML基础详解(上)
2021/10/16 HTML / CSS