elementUI el-upload以formData形式请求一次接口,手动上传多文件至服务器-程序员宅基地

技术标签: vue  vue基础  

效果图如下:

在这里插入图片描述

index.vue:

<el-form ref="importList" :model="importList" label-position="left" label-width="100px"
                   style="width:70%;margin-left:50px;">
  <el-form-item label="系统名称:" prop="sysName">
    <el-input v-model="importList.sysName" :disabled="true" placeholder="" size="mini"
              style="width: 90%"/>
  </el-form-item>
  <el-form-item label="资源名称:" prop="resName">
    <el-input v-model="importList.resName" :disabled="true" placeholder="" size="mini"
              style="width: 90%"/>
  </el-form-item>
  <el-form-item label="资源项名称:" prop="resItemName">
    <el-input v-model="importList.resItemName" :disabled="true" placeholder="" size="mini"
              style="width: 90%"/>
  </el-form-item>
  <el-form-item label="附件:" prop="file">
    <el-upload
      class="upload-demo"
      ref="upload"
      multiple
      action=""
      :on-change="fileChange"
      :on-remove="removeFile"
      :file-list="fjLists"
      :auto-upload="false">
      <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
    </el-upload>
  </el-form-item>
</el-form>

methods方法:

//on-change:文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
fileChange(file, fileList) {
    
  let existFile = fileList.slice(0, fileList.length - 1).find(f => f.name === file.name)//如果文件名重复
  if (existFile) {
    
    this.$message.error('当前文件已经存在!');
    fileList.pop()
  }
},
//on-remove:文件列表移除文件时的钩子
removeFile(file, fileList) {
    
  this.fjLists = fileList//此处fileList为删除文件后,剩余的文件
},
//保存上传
saveFile() {
    
   let {
    uploadFiles} = this.$refs.upload
   this.fileData = new FormData();
   uploadFiles.forEach(item => {
    
     if (item.lastModified) {
    
       this.fileData.append('file', item)
     }
   })
  // 此时所有的钩子已经执行完了fileData 中存的是通过校验的数据
  // 此时再调用接口上传该数据
  let config = {
    
    headers: {
    
      'Content-Type': 'multipart/form-data'
    }
  }
  subFile(this.fileData, config).then(res => {
    
    this.diaFile = false
    //-----可写保存成功后执行的操作,此处省略
    this.fjLists = []//清空
  }).catch((res) => {
    
   //-----可写保存失败后执行的操作,此处省略
    this.diaFile = false
  })
},
//取消
cancelUploadFile() {
    
 this.diaFile = false//关闭弹窗
 this.importList = {
    //清空表单其他项
   sysName: '',//系统名称
   resName: '',//资源名称
   resItemName: '',//资源项名称
   fjFileList: ''//文件名列表
 }
 this.fjLists = []
}

备注:

1.subFile为dataReport.js中定义好的接口方法

export function subFile(data) {
    
  return request({
    
    url: 'api/dataReporting/uploadFile',
    method: 'post',
    data
  })
}
export defalut{
    subFile}

2.功能开发期间参考链接
链接一:该链接中的方法可行,但无法做到只请求一次上传多文件,会请求多次接口;在者,在删除操作时,无法重新调用httpReques方法,将列表中余下的文件保存上传

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/JHY_USER/article/details/105071937

智能推荐

vue3 vue-router使用详解_vue3 router-view-程序员宅基地

文章浏览阅读1.2w次,点赞6次,收藏30次。vue3引入router详解,vue3+typescript使用Vue-Router包详解。_vue3 router-view

CMake Tutorial 巡礼(10)_添加生成表达式_build_interface-程序员宅基地

文章浏览阅读911次。CMake Tutorial 跟我一起学_build_interface

B站狂神Docker学习笔记-程序员宅基地

文章浏览阅读1.4w次,点赞26次,收藏190次。内容主要基于B站狂神老师的Docker基础视频与部分网络docker博客总结,按照个人理解所整理总结。PDF需要的自取:https://yxmiaoyu.lanzouu.com/b01dm3ehg密码:1234_b站狂神

Css基础学习_css 打印样式和正常样式区分-程序员宅基地

文章浏览阅读680次。 CSS基础学习现在web开发人员如果不知道CSS那就太落伍了,不过知道不等于会使用,更不等于精通。而我刚好属于那个知道CSS是干什么的,仅此而已的一员。CSS:Cascading Style Sheet,层叠样式表,可以将网页的大部分甚至全部的表示信息从HTML文件中移出,达到表现信息和核心内容相分离,达到易于维护以及美工和程序员分工更加明确的好处。这么好的东西是怎么应用到网页上面的呢?我们先来_css 打印样式和正常样式区分

【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!...-程序员宅基地

文章浏览阅读44次。Himi 原创, 转载请注明! 谢谢。原文地址:http://blog.csdn.net/xiaominghimi/archive/2010/12/23/6094182.aspx 今天讲下在Surfaceview中如何实现两个或者多个Activity之间的切换与数据交互,为了更形象一些我做了一个游戏登录界面的demo,其中对于输入界面的布局这些我也是随意写了下,主要是..._一.编写一个登录demo,里面存在两个activity,一个登录界面一个主界面。 两个界面如

汉字乱码解决方法_中文动态链接库被英文动态链接库覆盖所造成的-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏9次。汉字乱码解决方法 www.xyhhxx.com 发布者: seo 时间: 2005-09-12 我们在使用电脑时,经常会遇到乱码:例如登上港台网站时会看到乱码,打开E-mail时也会看到乱码,更为严重的是原先显示正常的Win9X/Win2K桌面、菜单中汉字一夜之间“面目全非”,本来显示正常的各种应用程序(包括游戏)中汉字也成了乱码!乱码给我们带来了太多的烦恼,告别乱码是我们共同的愿望! 一、汉字乱_中文动态链接库被英文动态链接库覆盖所造成的

随便推点

docker 20.10.9 dockerd containerd containerd-shim-runc-v2 runc 组件分析_devmapper not configured-程序员宅基地

文章浏览阅读3.4k次。下载地址https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz解压到/usr/local/yeqiang@yeqiang-PC:/usr/local/docker$ ll总用量 200848-rwxr-xr-x 1 root staff 33908392 2022-03-14 09:47:07 containerd-rwxr-xr-x 1 root staff 6508544 2022-03-_devmapper not configured

一起来学SpringCloud之 - 路由网关(Zuul)_java cloud的路由叫什么-程序员宅基地

文章浏览阅读1w次。上一篇已经讲了微服务组件中的 分布式配置中心,本章讲述 由JAVA编写的服务路由网关Zuul…_java cloud的路由叫什么

layui框架中switch 开关监听+ajax 数据更新案例_layui-form-switch 触发ajax事件-程序员宅基地

文章浏览阅读1.3w次。layui.use('form', function(){ var form = layui.form ,layer =layui.layer; //监听短信开关 form.on('switch(alert_sms)', function(data){ var index_sms; var alert_value =this.checked ? '1'_layui-form-switch 触发ajax事件

Numpy:repeat用法详解 Python_python np.repeat-程序员宅基地

文章浏览阅读811次。NumPy的函数是一个非常有用的函数,可以用来重复数组中的元素。本文详细介绍了函数的用法,包括扁平化重复操作和按轴重复操作。我们还提供了相应的源代码示例,希望能帮助读者更好地理解和使用函数。_python np.repeat

Mac for postman interceptor安装_mac postman interceptor-程序员宅基地

文章浏览阅读1k次。1、先安装chrome浏览器下载一个chrome,进行正常安装即可,本人chrome版本为92,下载插件一定要最新版本1.1以上;2、再安装postman从官网下载了一个新最的进行正常安装(本人的太老了,取了最新版本postman)3、在chrome中添加插件interceptor下载地址:https://www.crx4chrome.com/crx/560/下载文件名为aicmkgpgakddgnaphhhpliifpcfhicfo-1.1.2-Crx4Chrome.c.._mac postman interceptor

分布式锁,使用redis还是zookeeper?--中篇_zoomkeeper 与redis-程序员宅基地

文章浏览阅读263次。前言上篇已经详细提及到redis实现的redLock算法下的分布式锁,在项目里出现的问题以及提出的解决的方案,现在就针对这个分布式锁的话题,这节就针对zk的锁来详细说明,项目里使用的zk实现分布式锁还是很方便的,使用起来比redis要高效,安全。而且ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件..._zoomkeeper 与redis