ElementUI的upload组件手动上传,并携带参数和excel文件流提交给后台_this.$refs.upload.submit()-程序员宅基地

技术标签: Vue 深入浅出  excel  upload  vue  ElementUI  上传文件  个人感触  

使用场景:

选取好excel文件后,再把导入的excel文件和参数同时提交给服务器,需要用到文件的手动上传,但是直接拷贝官网的demo会出现问题,下面会具体说明要注意的问题点。

 

直接上代码:

index.vue

<el-form ref="importList" :rules="ImportRules" :model="importList" label-position="left" label-width="100px"
               style="width:70%;margin-left:50px;">
        <el-form-item label="平台号:" prop="platNum">
          <el-input v-model="importList.platNum" clearable maxlength="50" placeholder="请输入平台号" size="mini"  style="width: 90%"/>
        </el-form-item>
        <el-form-item label="任务名称:" prop="taskName">
          <el-input v-model="importList.taskName" clearable maxlength="50" placeholder="请输入任务名称" size="mini"  style="width: 90%"/>
        </el-form-item>
        <el-form-item label="Excel文件:" prop="file">
          <el-upload
            class="upload-demo"
            ref="upload"
            multiple
            accept=".xls"
            action=""
            :with-credentials="true"
            :http-request="httpRequest"
            :on-preview="handlePreview"
            :on-remove="handleRemove"
            :on-change="fileChange"
            :on-success="upFile"
            :file-list="fileList"
            :data="getUploadList"
            :auto-upload="false">
            <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
            <div slot="tip" class="el-upload__tip" style="display: inline-block;margin-left: 20px">只能上传xls格式的 excel文件</div>
          </el-upload>
        </el-form-item>
</el-form>

<div slot="footer" class="dialog-footer">
        <el-button @click="cancelFinishPlatform">取消</el-button>
        <el-button style="margin-left: 10px;" type="success" @click="submitUploadList">上传到服务器</el-button>
</div>

 

 

// param是自带参数。 this.$refs.upload.submit() 会自动调用 httpRequest方法.在里面取得file
httpRequest(param) {
  console.log(param)
  let fileObj = param.file // 相当于input里取得的files
  let fd = new FormData()// FormData 对象
  fd.append('file', fileObj)// 文件对象
  fd.append('platNum', this.importList.platNum)
  fd.append('taskName', this.importList.taskName)

  let url = process.env.CMS1_BASE_API + 'cdnDel/uploadExcel'
  let config = {
    headers: {
     'Content-Type': 'multipart/form-data'
    }
  }
  axios.post(url, fd, config).then(res=>{
   if(res.code===0){
     this.submitForm();//提交表单
   }
  })
}

手动上传的话,action 可以不用关注咯。

:auto-upload="false" 设置为flase ,为手动上传。

 

upload组件注意点:

 

1. 选取好文件后,如何触发上传到服务器的操作呢?

我们可以使用官网提供的 submit() 方法

this.$refs.upload.submit();

但是要注意执行submit方法后,他会触发upload组件中的 http-request ,而 httpRequest 这个方法是需要你自己去定义的,实例请见上面的代码,亲测可用。

:http-request="httpRequest"

官网定义如下:

 

2. 注意在增加文件和删除文件时,对 :file-list 上传的文件列表进行相应的增减

<el-upload
     :on-remove="handleRemove"
     :on-change="fileChange"
     :file-list="dataList"
     :auto-upload="false">
      <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
      <div slot="tip" class="el-upload__tip" style="display: inline-block;margin-left: 20px">只能上传xls格式的 excel文件</div>
</el-upload>

 


// fileList 是文件列表发生变化后,返回的修改后的列表对象,这里直接赋值就好啦!
fileChange(file, fileList) {
  // console.log(file.raw)
  this.dataList = fileList
},

on-change 是文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用

 

3. 注意上传时,请求头要修改为 ‘multipart/form-data’ 

我们需要创建一个 FormData 对象,以表单的形式上传参数和excel文件

// param是自带参数。 this.$refs.upload.submit() 会自动调用 httpRequest方法.在里面取得file
httpRequest(param) {
  console.log(param)
  let fileObj = param.file // 相当于input里取得的files
  let fd = new FormData()// FormData 对象
  fd.append('file', fileObj)// 文件对象
  fd.append('platNum', this.importList.platNum)
  fd.append('taskName', this.importList.taskName)

}

4. 如果把提交函数用在http-request钩子中,fileList多长就执行请求多少次接口,依旧是无法做到只请求一次上传多文件

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

智能推荐

Jmeter录制HTTPS脚本-程序员宅基地

文章浏览阅读1.4k次。Jmeter录制HTTPS脚本。

Java 大后端各种架构图汇总(建议收藏!!)-程序员宅基地

文章浏览阅读3.7k次。点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!每天14:00更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2021超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库中间件 Sharding-JDBC 和 MyCAT 源码解析..._后端系统架构图

EndOfStreamException: Unable to read additional data from client sessionid 0x0, likely client has cl-程序员宅基地

文章浏览阅读3.3w次。今天在hbase中执行下面的命令disable 'iw:test06'alter 'iw:test06',NAME=>'i',COMPRESSION=>'SNAPPY'count 'iw:test06'提示下面的异常信息2018-01-15 10:49:20,660 [myid:2] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0_endofstreamexception: unable to read additional data from server sessionid 0

Android属性动画--基础使用_android animatorinflater-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏8次。Android属性动画–基础使用转载请注明出处,谢谢~~ 首先这篇文章是第一次用Markdown编写的,有什么问题(格式上的)请大家谅解。 - Android动画的概述 - 属性动画的介绍 - 属性动画的基本使用目录Android属性动画基础使用Android动画概述属性动画介绍属性动画的基本使用ObjectAnimator的使用ValueAnimator的使用AnimatorS_android animatorinflater

SpringCloud-2.0-周阳(4. Rest工程构建)学习笔记_周阳快捷键-程序员宅基地

文章浏览阅读392次。上一篇 :3. SpringCloud 环境搭建文章目录1. Rest微服务工程构建1. 单个模块的建立步骤2. 构建服务提供者模块1. Rest微服务工程构建这里要做的是一个支付订单的项目1. 单个模块的建立步骤新建模块修改 POM编写 YAML配置主启动类编写业务类2. 构建服务提供者模块新建一个 Maven 模块cloud-provider-payment-8001编写 POM 文件,引入依赖<dependencies> <!-- _周阳快捷键

js深拷贝和浅拷贝_js深拷贝改变属性-程序员宅基地

文章浏览阅读144次。js深拷贝和浅拷贝假设有一个a变量 b复制a 当修改a时 b跟着改变 说明是浅拷贝,当修改a时b不改变 说明是深拷贝。下面这段代码a改变时b跟着改变,说明是浅拷贝。 var a = { name:'xx' }; var b = a; console.log(b); // xx a.name = 'cc'; console.log(b); // cc为什么a改变的时候b也跟着改变?因为 JavaScript 存储对象都是存地址 b对象只是_js深拷贝改变属性

随便推点

虚拟机Hive安装_hive可以装在一台虚拟机上面吗-程序员宅基地

文章浏览阅读4.7k次,点赞3次,收藏12次。Hive安装以及运行1、将下载好的hive安装包解压到你想要安装的虚拟的某个路径下面,然后再重命名以下。tar -zxvf hive-1.1.0-cdh5.14.2.tar.gz -C /opt/bigdata/hadoop/mv hive-1.1.0-cdh5.14.2.tar.gz/ hive1102、需要我们在安装好的hive目录的conf目录下面创建一个hive-site.xml文件,编写该配置文件。3、将mysql-java驱动拷贝到安装好的hive的lib目录下面。4、配置_hive可以装在一台虚拟机上面吗

Generating Radiology Reports via Memory-driven Transformer (EMNLP-2020)-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏8次。Generating Radiology Reports via Memory-driven Transformer文章链接:https://www.aclweb.org/anthology/2020.emnlp-main.112.pdf摘要医学图像常被用于临床诊断和医疗诊断的实验。写医学报告对于无经验的医生来说是一个耗时且容易出错的。因此,自动地生成医疗报告被赋予高期望去减轻放射科专家的工作量,并推动临床自动,这对于应用人工智能到医学领域是一个关键任务。本文,我们提出利用memory-driven的_generating radiology reports via memory-driven transformer

保边滤波之基于测地距离的滤波与局部拉普拉斯滤波_测距滤波csdn-程序员宅基地

文章浏览阅读562次。第三个图是对图像在[g-sigma, g+sigma]之外做色调映射,α=1于是[g-sigma, g+sigma]范围内不变,而β在0-1之间,于是把动态范围缩小;d(a,b)表示的是两个点之间像素值与像素位置之间的调和平均,而双边滤波也是用像素值以及像素位置表示,这两者都加入了像素值和像素位置,有什么区别吗?图一:某一点梯度在[g-sigma, g+sigma]范围内,是细节,α大于1,压制;P1的边缘有伪像,p3是未归一化的双边滤波器,边缘没有伪像,p4是拉普拉斯滤波,更加的sharp。_测距滤波csdn

ThinkPHP框架总结之安全及使用_thinkphp安全技术框架文档-程序员宅基地

文章浏览阅读682次。ThinkPHP框架总结之安全及使用: 本片文章主要总结和介绍了使用TP过程中,加强项目安全的一些办法,具体是以例子为导向验证演示。 防止SQL注入:针对WEB应用,防止SQL注入是首要考虑的安全问题,通常的安全隐患在于查询条件使用字符串参数,而且其中一些参数依赖于客户端输入,为了有效防止SQL注入,这里建议:1、查询条件尽量使用数组方式,具体如下:数组方式:$wh..._thinkphp安全技术框架文档

字符串拼接换行符,页面确实不换行,显示空格-程序员宅基地

文章浏览阅读25次。name: '有氧\n耐力',只需要把当前标签样式 加上white-space: pre-wrap;再把数据用v-html 输出 就可以啦white-space属性指定元素内的空白怎样处理。normal默认。空白会被浏览器忽略。pre空白会被浏览器保留。其行为方式类似 HTML 中的 <pre> 标签。nowrap文本不会换行,文本会在在同一行上继续,..._字符串在控制台规则换行 界面就不换行了

数据库MySQL-程序员宅基地

文章浏览阅读258次,点赞5次,收藏3次。如int(3) 如果实际值是2 如果列指定了zerofill,查询结果就是002,BLOB和TEXT存储方式不同,TEXT以文本形式存储,英文存储区分大小写。create table 表名(列名 类型,列名 类型。varchar可变长度,可以设置最大长度适合用在长度可变的属性。text 不设置长度,当不知道属性的最大长度时,适合用text。按照查询速度 char最快,varchar次之,text最慢。超过255的字符只能用varchar或者text。而BLOB存储的是以二进制存储,不区分大小写。

推荐文章

热门文章

相关标签