iview实现多文件上传,前段到后台

前段 业务是 分别上传两个文件  :
1.一个报告 一个 表格,而且限制了格式 报告为doc 表格为xsl
2.有别的参数 也要,比如,上传人,上传日期,中心名称 
这样的话,我们无法使用 iview 的直接上传,必须自定义上传,手动上传
<Col span="24">
xxx报告
<Upload multiple ref="upload" :before-upload="handleUpload" :show-upload-list="false" :action="http">
<Button type="ghost" style="width:200px" icon="ios-cloud-upload-outline">上传doc,文件大小规定20兆</Button>
</Upload>
<div><ul class="file-list" v-for="(list,index) in file" :key="index">
<li>文件名:
<span style="font-size:15px;">{{ list.name }}</span>
<Icon type="ios-close" size="20" style="float:right;" @click="delFileList(index)"></Icon>
</li>
</ul>
</div>
</Col>
<Col span="24">
xxx表格
<Upload multiple ref="upload" :before-upload="handleUpload1" :action="http1">
<Button type="ghost" style="width:200px" icon="ios-cloud-upload-outline">上传xsl,文件大小规定20兆</Button>
</Upload>
<div>
<ul class="file-list" v-for="(list,index) in file1" :key="index">
<li>文件名:<span style="font-size:15px;">{{ list.name }}</span>
<Icon type="ios-close" size="20" style="float:right;" @click="delFileList1(index)"></Icon>
</li>
</ul>
</div>
</Col>
<Button type="primary" @click="upload">提交</Button>
http :""
http1:""
生命变量啥的不说了,主要说下方法
//上传之前调用 return false 停止自动上传改为手动上传
handleUpload(file) {
var fileType = file.name.split(".");
fileType = fileType[fileType.length - 1].toLowerCase();
if (fileType != "doc" && fileType != "docx") {
this.$Message.error("文件格式不正确,只能上传.doc .docx 类型的文件");
return;
}
//20971520
if (file.size > 20971520) {
this.$Message.error("最大上传20兆的文件");
return;
}
if (this.file.length > 0) {
this.$Message.info("最多只能上传1个文件");
} else {
this.file.push(file);
}
return false;
},
handleUpload1(file) {
var fileType = file.name.split(".");
fileType = fileType[fileType.length - 1].toLowerCase();
if (fileType != "xlsx" && fileType != "xls") {
this.$Message.error("文件格式不正确,只能上传.xlsx .xls 类型的文件");
return;
}
//20971520
if (file.size > 20971520) {
this.$Message.error("最大上传20兆的文件");
return;
}
if (this.file1.length > 0) {
this.$Message.info("最多只能上传1个文件");
} else {
this.file1.push(file);
}
return false;
},
delFileList(index) {
this.file.splice(index, 1);
},
delFileList1(index) {
this.file1.splice(index, 1);
},
//上传
upload() {
//其他条件判断
if (this.formItem.shengbh == "") {
this.$Message.error("请刷新页面");
return;
}
if (this.formItem.shibh == "") {
this.$Message.error("中心名称不能为空");
return;
}
if (this.formItem.vsj == "") {
this.$Message.error("评价日期不能为空");
return;
}
var jsonStr = JSON.stringify(this.data);
//创建 formData 对象:很重要
let formData = new FormData();
//向 formData 对象中添加文件
//多个文件上传
formData.append("uploadFileBg", this.file[0]); // 文件对象1:报告
formData.append("uploadFileYd", this.file1[0]); // 文件对象2:表格
formData.append("id", this.formItem.id);//其他参数
formData.append("shimc", this.formItem.shimc);
formData.append("shibh", this.formItem.shibh);
formData.append("shengbh", this.formItem.shengbh);
formData.append("shengmc", this.formItem.shengmc);
formData.append("pjsj", this.formItem.pjsj);
formData.append("pjry", this.formItem.pjry);
formData.append("sts", this.formItem.sts);
formData.append("pjdf", this.formItem.pjdf);
formData.append("pjyj", this.formItem.pjyj);
formData.append("gjjy", this.formItem.gjjy);
formData.append("jsonStr", jsonStr);
//使用post方式上传
this.$http.post("/api/zjcdjscpj/doSave", formData).then(res => {
if (res.retHead.code == "0000000") {
this.$Message.success("添加成功");
this.formItem = [];
this.init();
this.file = [];
this.file1 = [];
} else {
this.$Message.error("添加失败");
}
});
},
注意:一旦出现问题 关于请求头的 有可能是你设置请求拦截问题
在mian.js 里面
// 添加请求拦截器
axios.interceptors.request.use(
config => {
var qs = require('qs');
//上传文件,不对config.data进行处理
if (config.url == "/api/zjcdjscpj/doSave") {
}else if(config.url == "/api/zjctbjdscpj/doSave"){
}
else if(config.url == "/api/zjctbjdscpj/redactJdscpj"){
}
else {
config.data = qs.stringify(config.data);
}
let token = localStorage.getItem("token")
if (token) {
config.headers['OGJJ-AuthToken'] = token
}
return config;
}, error => {
return Promise.reject(error);
});
// 添加响应拦截器
axios.interceptors.response.use(
response => {
if (response.data.retHead.code == '0101005'
|| response.data.retHead.code == '0101006'
|| response.data.retHead.code == '0101007'
|| response.data.retHead.code == '0101008'
|| response.data.retHead.code == '0101009') {//token失效
window.location.href = '/#/login'//需求方要求一旦出错立即跳转登录,所以采取这种侵入式的手段。
} else {
return response.data
}
}, error => {
return Promise.reject(error);
});
后台接受:

/**
* 保存登记双查
*/
@RequestMapping(value = "/doSave")
@ResponseBody
public RetData<String> doSave(HttpServletRequest request,Zjcdjscpj vo) throws Exception {
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    String msg = "添加成功";
    // 获得文件
    MultipartFile multipartFile = multipartRequest.getFile("uploadFileBg");// 与前端设置的fileDataName属性值一致
    MultipartFile multipartFile1 = multipartRequest.getFile("uploadFileYd");// 与前端设置的fileDataName属性值一致
    RetData<String> retData = new RetData<String>();
    retData.setRetBody(msg);
    return retData;
  }

总之:从前端到后台,实现上传,欢迎咨询

转载于:https://www.cnblogs.com/zhangyangtao/p/10329197.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ios 图片添加阴影

2019独角兽企业重金招聘Python工程师标准>>> UIimageView *imageView [[UIImageView alloc ] init]; imageView.layer.shadowColor [UIColor blackColor].CGColor; imageView.layer.shadowOffset CGSizeMake(3,2); imageView.layer.shadowOpacity 0.6; imageVie…

asp.net定时执行任务-解决应用池回收问题----转载

在复杂的业务应用程序中&#xff0c;有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行&#xff0c;比如定时备份或同步数据库&#xff0c;定时发送电子邮件&#xff0c;定期处理用户状态信息&#xff0c;支付系统中定期同步异常账单等等&#xff0c;我们…

bool与string互转

今天在工作中遇到了将string转换成bool类型数据&#xff0c;查阅了工具书解决了问题&#xff0c;现将注意要点总结如下&#xff1a; 增加头文件&#xff1a;#include <sstream> 代码如下&#xff1a; 在codeblocks软件上测试结果如下&#xff1a; 使用者需要根据自己的实…

Go语言之高级篇beego框架之参数配置与路由配置

一、参数配置 beego默认会解析当前应用下的conf/app.conf文件 1.1、beego的参数配置 appname WEB httpport 8080 runmode dev 几种开发模式 [dev] httpprot 8080 [prod] httpport 8081 [test] httpport 8082 //备注&#xff1a; beego.AppConfig.String( "dev::m…

C++ int转string以及源码

今天遇到一个int类型数据转换为string&#xff0c;查了资料在c11标准中增加了全局函数std::to_string来实现该功能&#xff1a; string to_string (int val); string to_string (long val); string to_string (long long val); string to_string (unsigned val); string t…

OpenXLive 0.9.9 SDK发布,增加对SNS的支持

相信iOS和Android的游戏玩家对于OpenFeint都会比较熟悉&#xff0c;在北京有着这样的一个团队&#xff0c;他们一直在专注于Windows Phone平台上的第三方游戏社交平台的开发&#xff0c;这个产品叫做OpenXlive&#xff0c;近期发布了其SDK的0.9.9版本&#xff0c;并增加了向Twi…

Asp.Net MVC1.0正式版发布

下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyID53289097-73ce-43bf-b6a6-35e00103cb4b&displaylangen 相对RC2版的变化不大&#xff0c;仅二点: 1.Jquery从1.3.1升级为1.3.2版本 2.修正了MVC Web应用程序中创建Silverlight时因项目不可用而出错的BU…

EUREKA原理总结

Eureka高可用架构 https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance 上图中主要的名称说明&#xff1a; Register&#xff1a;EurekaClient注册&#xff08;Http请求&#xff09;到EurekaServer&#xff0c;EurekaClient会发送自己元数据(ip,port,主页等)&#xff0…

Hadoop之Shell命令

hadoop的shell命令与linux下的命令类似&#xff0c;一般要在命名了的前面加-&#xff0c; 例如&#xff1a;hadoop fs -ls /....... 具体如下&#xff1a; FS Shell 调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式。 所有的的FS shell命令使用URI路径作…

linux下安装oracle 11g R2

Linux环境配置 [c-sharp]view plaincopy OS:Fedora 15 DB:Oracle 11gR2 将Oracle安装到home/oracle_11目录 配置过程&#xff1a;本文来自Oracle官方文档网上资料 Oracle官方文档&#xff1a;http://www.oracle.com/pls/db112/homepage 1. 以root用户登录到Linux 2. 检查机器…

学习:SQL Server的BUILTIN\Administrators用户

在安装SQL Server2000 &#xff0c;安装进程自动地为“BUILTIN\Administrators”创建一个登录帐号&#xff0c;该帐号为“sysadmin”角色成员。“BUILTIN\Administrators”登录帐号代表了Microsoft Window2000 上的系统管理员本地组。 Windows2000的“Administrator”帐户是系统…

通俗理解数字签名,ssl数字证书和https

前言 最近在开发关于PDF合同文档电子签章的功能&#xff0c;大概意思就是在一份PDF合同上签名&#xff0c;盖章&#xff0c;使其具有法律效应。签章有法律效应必须满足两个条件&#xff1a; 能够证明签名&#xff0c;盖章者是谁&#xff0c;无法抵赖PDF合同在签章后不能被更改在…

linux 性能分析工具——perf

最近需要对linux下的开发的数据库应用程序进行性能调试&#xff0c;找到了该篇文章&#xff0c;保存下来为了以后便于查找&#xff0c;这篇是转载的perf文章&#xff0c;后续还有vtune相关的文章。 转载&#xff1a;https://blog.csdn.net/u014608280/article/details/8026571…

红外遥控

红外遥控简介红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力&#xff0c;所…

使用jQuery Mobile移动开发框架将博客网站快速转化为Mobile网站

日期&#xff1a;2012-7-12 来源&#xff1a;GBin1.com 在线演示 jQuery Mobile是一个非常不错的移动端网站应用的解决方案&#xff0c;很多网站都使用jQuery Mobile来生成Mobile手机端的移动网站应用&#xff0c;在过去的GBin1博客文章中&#xff0c;我们曾经使用jQuery Mob…

CISSP的成长之路(十六):复习访问控制(1)

访问控制&#xff08;Access Control&#xff09;是CISSP知识体系中的第三个CBK&#xff0c;它的内容包括如何使用多种系统提供的安全功能来控制对组织的信息和数据处理资源的访问&#xff0c;这些访问控制措施通过管理、物理和逻辑控制的手段 在51CTO安全频道特别策划的CISSP…

NVLink技术及影响解析

1繁华的背面 最新GPU架构Pascal&#xff0c;能自己开上舞台的Audi A7&#xff0c;超过700名与会专家学者及技术人员&#xff0c;近百场学术会议和科研分享&#xff0c;连续两晚的happy hour、酒会和GTC Party……在一片喧嚣和欢乐当中&#xff0c;2014年度的GTC大会降下了帷幕。…

2022年结束了

在去年这个时候&#xff0c;我刚好也写了一篇这样的文章。再往前是2020年的总结年终了&#xff0c;肿一下斗转星移&#xff0c;我的这个公众号也陪伴着我经过了4年的时间&#xff0c;明年后&#xff0c;我也正式进入35岁程序员的行列&#xff0c;随时会受到命运对我的锤炼。庆幸…

STL容器之deque

双端队列&#xff1b;序列式容器(deque/vector)&#xff1b;底层分段连续 支持从双端进行插入和删除&#xff1b; 综合了vector和list的优点&#xff1b; 插入、删除、查找的平均时间复杂度都是O(1) 部分deque的操作如下&#xff1a; #include <stdlib.h> #include …

SQL游标原理和使用方法

数据库开发过程中&#xff0c;当你检索的数据只是一条记录时&#xff0c;你所编写的事务语句代码往往使用SELECT INSERT 语句。但是我们常常会遇到这样情况&#xff0c;即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢&#xff1f;游标为我们提供了一种极为优秀的…