springMVC的多文件的异步上传实现
springMVC的MultipartFile与传统的ajax文件上传兼容性不好,采用如下的ajax方法,后台无法获取文件。
$.ajax({
url: '/upload',
type: 'POST',
cache: false,
data: new FormData($('#uploadForm')[0]),
processData: false,
contentType: false
}).done(function(res) { }).fail(function(res) {});
服务器端代码需要使用从查询参数名为file获取文件输入流对象,因为<input>中声明的是name="file",但是上述方式,只能传递一般的参数,上传文件的文件流是无法被序列化并传递的。
------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------
采用以下方式完美解决:
1.引入需要的js文件
<script type="text/javascript" src="../lycaen/js/jquery/jquery.min.js"></script>
<script type="text/javascript" src="../lycaen/js/jquery/jquery-ui.min.js"></script>
<script type="text/javascript" src="../lycaen/js/jquery/jquery-form.js"></script>
2.web.xml引入MultiFileUpload
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 工程采用hi平台,class自行修改 -->
<servlet>
<servlet-name>MultiFileUpload</servlet-name>
<servlet-class>org.hi.framework.lycaen.servlet.MultiFileUpload</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>MultiFileUpload</servlet-name>
<url-pattern>/MultiFileUpload</url-pattern>
</servlet-mapping>
3.spring容器定义multipartResolver
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 工程采用hi平台,class自行修改 -->
<bean id="multipartResolver" class="org.hi.framework.HiMultipartResolver">
<!-- url中带有该属性值的 http 请求就不会被 multipartResolver 先解析 -->
<property name="excludeUrls" value="lycaenMultipleFileUpload"/>
<property name="maxUploadSize" value="100000000" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
</beans>
4.前台demo
<!DOCTYPE html> <head>
<meta charset="UTF-8">
<title>Title</title>
</head> <body>
<style type="text/css">
div.mainContener{
padding-top: 10px;
padding-right: 10px;
padding-bottom: 10px;
padding-left: 10px;
} #submit_click { text-align:center;margin-top:32px; height:40px;}
#submit_click a
{ text-decoration:none;
background:#0a6dbe;
color:#f2f2f2; padding: 10px 30px 10px 30px;
font-size:16px;
font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;
font-weight:bold;
border-radius:3px; -webkit-transition:all linear 0.30s;
-moz-transition:all linear 0.30s;
transition:all linear 0.30s; }
#submit_click a:hover { background:#385f9e; } .upload_click { text-align:center;margin-top:32px; height:40px;}
.uoload_click a
{ text-decoration:none;
background:#2f435e;
color:#f2f2f2; padding: 10px 30px 10px 30px;
font-size:16px;
font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;
font-weight:bold;
border-radius:3px; -webkit-transition:all linear 0.30s;
-moz-transition:all linear 0.30s;
transition:all linear 0.30s; } table.gridtable {
font-family: Microsoft YaHei;
font-size:14px;
color:#333333;
border-width:1px;
border-color:#666666;
border-collapse: collapse;
padding-top: 10px;
padding-right: 10px;
padding-bottom: 10px;
padding-left: 10px;
}
table.gridtable .title {
font-weight:bold;
background-color:#f2f5f7;
text-align:center; }
table.gridtable th {
border-width: 1px;
padding: 8px;
border-style: solid;
border-color: #ced9e0;
background-color: #e0ecff;
}
table.gridtable td {
border-width: 1px;
padding: 8px;
border-style: solid;
border-color: #ced9e0;
background-color: #ffffff;
} input[type=button]{
height:30px;
width:236px;
background-color:#d7ebf9;
border:1px solid #99D3F5;
border-radius:3px;
font-size:14px;
color:#0078de;
} td.leftHead{
text-align: center;
}
</style> <div class="mainContener">
<table class="gridtable" align = "center" width="98%" >
<tr class="title">
<th width="15%">考核要点(分值)</th>
<th width="60%">考核内容</th>
<th width="25%">附件材料要求</th>
<th width="5%">附件上传</th>
<th width="10%">自评评分</th>
<th width="10%">上级评分</th>
</tr>
<tr>
<td class="leftHead" rowspan = 7>1.<br>部<br>署<br>工<br>作<br>(<br>8<br>分<br>)</td>
<td>(1)政府工作报告对食品安全工作有明确要求,得0.5分,否则不得分</td>
<td>2017年省级政府工作报告</td>
<td>
<form id= "uploadForm111" name="uploadForm111" enctype="multipart/form-data">
<input name="messageContent" type="hidden"/>
<p><input type="file" name="file"/></p>
<p><div style="text-align:center"><input type="button" value="上传" onclick="doUpload($(this))" /> </div> </p>
</form>
</td>
<td><input type="number" width="98%"/></td>
<td><input type="number" width="98%"/></td>
</tr>
<tr>
<td>(2)组织制定并向社会公布食品安全重点工作安排。<br>
以省级政府(办公厅)名义印发,得1分,否则不得分★<br>
通过省级政府网站向社会公布,得0.5分,否则不得分★</td>
<td>①省级政府(办公厅)印发的有关文件或网址链接<br>
②公布有关文件的网址链接</td>
<td><form id= "uploadForm112" name="uploadForm112" enctype="multipart/form-data">
<input name="messageContent" type="hidden"/>
<p><input type="file" name="file"/></p>
<p><div style="text-align:center"><input type="button" value="上传" onclick="doUpload($(this))" /> </div> </p>
</form>
</td>
<td><input type="number" width="98%"/></td>
<td><input type="number" width="98%"/></td>
</tr>
<tr>
<td>(3)建立多部门参与的国家与省级食品安全“十三五”规划实施机制,明确任务分工,得1分,否则不得分★<br>
(减分项)未印发规划的,减1分★</td>
<td>①省级政府(办公厅)、食品安全办或其他牵头实施部门印发的分工方案<br>
②2016年底前未印发规划的,需提供规划(2016年已印发规划的,无需提供)</td>
<td><form id= "uploadForm113" name="uploadForm113" enctype="multipart/form-data">
<input name="messageContent" type="hidden"/>
<p><input type="file" name="file"/></p>
<p><div style="text-align:center"><input type="button" value="上传" onclick="doUpload($(this))" /> </div> </p>
</form>
</td>
<td><input type="number" width="98%"/></td>
<td><input type="number" width="98%"/></td>
</tr>
<tr>
<td>(4)省级政府制定或修订食品安全突发事件(事故)应急预案,得1分,否则不得分★<br>
在2017年开展了预案培训,且近三年至少开展一次预案演练,得0.5分,否则相应扣分</td>
<td>①省级食品安全突发事件(事故)应急预案<br>
②组织开展应急预案培训和演练的相关材料</td>
<td><form id= "uploadForm114" name="uploadForm114" enctype="multipart/form-data">
<input name="messageContent" type="hidden"/>
<p><input type="file" name="file"/></p>
<p><div style="text-align:center"><input type="button" value="上传" onclick="doUpload($(this))" /> </div> </p>
</form>
</td>
<td><input type="number" width="98%"/></td>
<td><input type="number" width="98%"/></td>
</tr>
<tr>
<td>(5)采取有效措施推进食品安全示范城市创建工作,加强对创建城市的管理,得1分<br>
第一、二、三批创建城市未按要求落实创建工作部署的,每次扣0.2分,扣完1分为止<br>
第三批创建城市中期评估综合评分未达标的,每个城市扣0.5分,扣完1分为止<br>
(减分项)首批试点省份未提出确保第一批命名城市创建力度不减的、具体管用的保障措施,减0.5分</td>
<td>①省级食品安全办相关工作年度总结<br>
②无(根据国务院食品安全办掌握情况打分)<br>
③无(根据第三方评估结果打分)<br>
④保障措施相关材料(首批试点的4个省份)</td>
<td><form id= "uploadForm115" name="uploadForm115" enctype="multipart/form-data">
<input name="messageContent" type="hidden"/>
<p><input type="file" name="file"/></p>
<p><div style="text-align:center"><input type="button" value="上传" onclick="doUpload($(this))" /> </div> </p>
</form>
</td>
<td><input type="number" width="98%"/></td>
<td><input type="number" width="98%"/></td>
</tr>
<tr>
<td>(6)按要求推进农产品质量安全县创建活动(对第一批质量安全县加强管理;第二批创建试点单位落实创建任务),相关部门积极配合办好“双安双创”成果展,得1分,否则相应扣分</td>
<td>工作总结</td>
<td><form id= "uploadForm116" name="uploadForm116" enctype="multipart/form-data">
<input name="messageContent" type="hidden"/>
<p><input type="file" name="file"/></p>
<p><div style="text-align:center"><input type="button" value="上传" onclick="doUpload($(this))" /> </div> </p>
</form>
</td>
<td><input type="number" width="98%"/></td>
<td><input type="number" width="98%"/></td>
</tr>
<tr>
<td>(7)研究部署餐饮业质量安全提升工程,得1分,否则不得分<br>
制定提升餐饮业质量安全的具体措施并组织落实,得0.5分,否则相应扣分</td>
<td>①省级政府或食品安全委员会会议纪要或相关文件<br>
②省级政府或食品安全委员会制定的提升餐饮业质量安全的措施文件</td>
<td><form id= "uploadForm117" name="uploadForm117" enctype="multipart/form-data">
<input name="messageContent" type="hidden"/>
<p><input type="file" name="file"/></p>
<p><div style="text-align:center"><input type="button" value="上传" onclick="doUpload($(this))" /> </div> </p>
</form>
</td>
<td><input type="number" width="98%"/></td>
<td><input type="number" width="98%"/></td>
</tr>
<tr>
<td class="leftHead" rowspan="3">2.<br>落<br>实<br>“<br>有<br>责<br>任<br>”<br>(<br>6<br>分<br>)</td>
<td>(8)落实党政同责要求。<br>
省级政府主要负责同志召集会议(常务会议、省长办公会议等),协调解决食品安全重点难点问题,得1分,否则不得分<br>
(加分项)省级党委主要负责同志召集会议,协调解决食品安全重点难点问题,加1分<br>
(加分项)出台本省(区、市)落实党政同责要求的文件,加1分<br>
(加分项)省级政府高度重视食品安全工作,加强食品安全委员会建设,发挥食品安全委员会统一领导作用,视情加0.5分~1分</td>
<td>①省级政府会议纪要或相关材料<br>
②省级党委会议纪要或相关材料<br>
③落实党政同责要求的文件<br>
④省级政府食品安全委员会主任、副主任名单</td>
<td><form id= "uploadForm118" name="uploadForm118" enctype="multipart/form-data">
<input name="messageContent" type="hidden"/>
<p><input type="file" name="file"/></p>
<p><div style="text-align:center"><input type="button" value="上传" onclick="doUpload($(this))" /> </div> </p>
</form>
</td>
<td><input type="number" width="98%"/></td>
<td><input type="number" width="98%"/></td>
</tr>
<tr>
<td>(9)对食品安全工作进行评议考核。<br>
对市级政府的食品安全工作进行评议考核,得2分,否则不得分<br>
将确保食品安全工作成效作为衡量党政领导班子和领导干部政绩的重要指标,所占权重在2%以上,得2分;<br>
权重在1%以上,得1分;<br>权重低于1%或者纳入但未明确权重的,得0.5分;<br>未纳入的,不得分(食品药品合并考核的,相应权重可计为食品安全工作考核的权重)<br>
对省级食品药品监管部门和其他有关部门的食品安全监督管理工作进行评议考核,得1分,否则不得分</td>
<td>①对市级政府食品安全工作评议考核的方案<br>
②省级党委政府绩效考核方案或其他综合评价方案<br>
③对省级食品药品监管部门和其他有关部门食品安全工作评议考核的方案</td>
<td><form id= "uploadForm119" name="uploadForm119" enctype="multipart/form-data">
<input name="messageContent" type="hidden"/>
<p><input type="file" name="file"/></p>
<p><div style="text-align:center"><input type="button" value="上传" onclick="doUpload($(this))" /> </div> </p>
</form>
</td>
<td><input type="number" width="98%"/></td>
<td><input type="number" width="98%"/></td>
</tr>
<tr>
<td>(10)(减分项)未就落实“综合执法的地方要把食品药品安全监管作为首要职责”提出具体措施的,视情减0.5分~1分</td>
<td>①实行综合执法的地方及所出台措施一览表<br>
②各地出台的措施文件</td>
<td><form id= "uploadForm120" name="uploadForm120" enctype="multipart/form-data">
<input name="messageContent" type="hidden"/>
<p><input type="file" name="file"/></p>
<p><div style="text-align:center"><input type="button" value="上传" onclick="doUpload($(this))" /> </div> </p>
</form>
</td>
<td><input type="number" width="98%"/></td>
<td><input type="number" width="98%"/></td>
</tr>
<tr>
<td class="leftHead" rowspan="2">3.<br>落<br>实<br>“<br>有<br>岗<br>位<br>”<br>(<br>5<br>分<br>)</td>
<td>(11)省、市、县级政府均成立食品安全委员会及办事机构的,得1.5分,否则不得分★<br>
(加分项)省级政府采取有效措施加强食品安全办建设,视情加0.1分~0.5分</td>
<td>①成立食品安全委员会、明确办事机构汇总一览表(内容包括标题、文号、发文机关、发文日期)<br>
②采取措施加强省级食品安全办建设的文件</td>
<td><form id= "uploadForm121" name="uploadForm121" enctype="multipart/form-data">
<input name="messageContent" type="hidden"/>
<p><input type="file" name="file"/></p>
<p><div style="text-align:center"><input type="button" value="上传" onclick="doUpload($(this))" /> </div> </p>
</form>
</td>
<td><input type="number" width="98%"/></td>
<td><input type="number" width="98%"/></td>
</tr>
<tr>
<td>(12)省级公安机关明确机构和人员负责打击食品安全犯罪,得1.5分,否则不得分<br>
90%以上的市(地、州)公安机关明确机构和人员负责打击食品安全犯罪的,得2分;70%以上明确的,得1分;70%以下明确的,不得分
</td>
<td>①省级公安机关明确机构和人员的相关文件<br>
②市级公安机关明确机构和人员的相关文件
</td>
<td><form id= "uploadForm122" name="uploadForm121" enctype="multipart/form-data">
<input name="messageContent" type="hidden"/>
<p><input type="file" name="file"/></p>
<p><div style="text-align:center"><input type="button" value="上传" onclick="doUpload($(this))" /> </div> </p>
</form>
</td>
<td><input type="number" width="98%"/></td>
<td><input type="number" width="98%"/></td>
</tr>
</table>
</div>
<div id="submit_click">
<a id="submitBtn" href="javascript:examSubmit();">提 交</a>
</div>
<script type="text/javascript" src="../lycaen/js/jquery/jquery.min.js"></script>
<script type="text/javascript" src="../lycaen/js/jquery/jquery-ui.min.js"></script>
<script type="text/javascript" src="../lycaen/js/jquery/jquery-form.js"></script> <script>
var doUpload = function(buttonSelf){ buttonSelf.parent().parent()
.ajaxSubmit(
{
type : 'post',
url : "../method2.action?ajax=11", //data: //注意只要是写在表单里面的,都不需要加这个属性。在controller中可以根据@RequestParam String str获取到属性值。
contentType : "application/x-www-form-urlencoded; charset=utf-8",
success: function(data) {
//接受到的data还只是一个字符串,需要转成json对象
var obj = JSON.parse(data);
if(obj.flag==true){
alert("上传成功");
}else{
alert("error");
}
},
error: function (data)//服务器响应失败处理函数
{
alert("出错");
}
});
//console.log("upload");
//alert("上传完成!");
}; var examSubmit = function(){
alert("提交完成");
};
</script>
</body>
</html>
5.控制器demo
@RequestMapping("/method2")
@ResponseBody
public String method2(@RequestParam MultipartFile file,
@RequestParam String messageContent ) {
//多个参数的话只要多个@RequestParam即可,注意参数名要和表单里面的属性名一致
JSONObject json =new JSONObject();
System.out.println(messageContent);
String orgiginalFileName = "";
int m =new Random().nextInt(100)+10;
System.out.println("m="+m);
String path="D:/"+file.getOriginalFilename();
try {
File newFile =new File(path);
file.transferTo(newFile);
String fileName = file.getName();
InputStream inputStream = file.getInputStream();
String content = file.getContentType();
orgiginalFileName = file.getOriginalFilename();
System.out.println("fileName: "+fileName+", inputStream: "+ inputStream
+"\r\n content: "+content+", orgiginalFileName: ="+ orgiginalFileName
+"\r\n projectName: ");
} catch (Exception e) {
e.printStackTrace();
}
json.put("flag", true);
json.put("message", "success");
System.out.println(json.toJSONString());
return json.toJSONString();
}
}
springMVC的多文件的异步上传实现的更多相关文章
- ThinkPHP+JQuery实现文件的异步上传
前端代码 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...
- SpringMVC结合ajaxfileupload文件无刷新上传
jQuery没有提供ajax的文件上传,我们可以通过ajaxfileupload实现ajax文件的上传.其实ajaxfileupload文件上传特别的简单.下面就演示一下在SpringMVC中实现aj ...
- SpringMVC + AJAX 实现多文件异步上传
转自:https://www.jianshu.com/p/f3987f0f471f 今天,我就这个问题来写一篇如何用 SpringMVC + AJAX 实现的多文件异步上传功能.基本的代码还是沿用上篇 ...
- 【方法】Html5实现文件异步上传
1 简介 开发文件上传功能从来不是一件愉快的事,异步上传更是如此,使用过iframe和Flash的上传方案,也都感觉十分的别扭.本文简要简绍利用Html5的FormData实现文件的异步上传,还可以实 ...
- 【实用】Html5实现文件异步上传
1 简介 开发文件上传功能从来不是一件愉快的事,异步上传更是如此,使用过iframe和Flash的上传方案,也都感觉十分的别扭.本文简要简绍利用Html5的FormData实现文件的异步上传,还可以实 ...
- ASP.NET MVC 文件异步上传问题处理
最近在做一个网站,用asp.net MVC4.0来开发,今天遇到了个小问题,通过查找相关渠道解决了,在这里把这个问题写出来,问题非常简单,不喜勿喷,mark之希望可以给遇到相同问题的初学者一点帮助.我 ...
- 【文件上传】jquery之ajaxfileupload异步上传插件
来自:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336826.html 由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用J ...
- Jquery FormData文件异步上传 快速指南
网站中文件的异步上传是个比较麻烦的问题,不过现在通过jquery 可以很容易的解决这个问题: 使用jquery2.1版本,较老版本不支持异步文件上传功能: 表单代码: <form id=&quo ...
- 适用于各浏览器支持图片预览,无刷新异步上传js插件
文件上传无疑是web应用中一个非常常用的功能,不管是PHP.jsp还是aspx.mvc等都会需要文件上传,但是众所周知当使用自带的文件上传功能时总会出现页面刷新的情况.当然现在有了html5这个好东西 ...
随机推荐
- OC-SEL 和 Class
[认识选择器]============================================ SEL 1.选择器(SEL)是一个变量类型. 2.选择器用来装成员消息(成员方法) people ...
- [Scala]Scala学习笔记一 基础
1. 变量 val定义的值实际上是一个常亮,无法改变其内容 scala> val num = 0 num: Int = 0 scala> num = 2 <console>:1 ...
- python学习之基本类型
#我的第一个python程序 print("hello world"); #多行字符串 print("""\ Usage: thingy [OPTIO ...
- 【解题报告】2014ACM/ICPC上海赛区现场赛B
唉 谷歌出的神题,差点爆零了...三小时终于A掉 B题 题目大概是说从左上角的点出发,经过某路线最后回到原点,求每个格子被路线包含的圈数的平方和. 首先可以知道,对于某个格子来说,从该格子的任意一个 ...
- HihoCoder1620: 股票价格3 (单调队列 or DP)
股票价格3 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在关注股票,为了计算股票可能的盈利,他获取了一只股票最近N天的价格A1~AN. 小Hi想知道,对于第 ...
- Instruments检测解决内存泄露以及进行性能测试
1.启动Xcode自带的Instruments.这里有两种方法启动. 方法一: 方法二: 2.选择Leaks选项.(该选项用来进行内存泄漏检测) 说明: Leaks:找到引发内存泄漏的起点. Time ...
- 【BZOJ2908】又是nand 树链剖分+线段树
[BZOJ2908]又是nand escription 首先知道A nand B=not(A and B) (运算操作限制了数位位数为K)比如2 nand 3,K=3,则2 nand 3=not (2 ...
- [樹莓派]用mkusb来制作U盘启动安装Ubuntu 15.04
之前實踐過這文章的描述,還可以成功:http://www.linuxdiyf.com/linux/12719.html,轉記錄餘下: 官方英文文档,教你在Ubuntu 15.04下使用mkusb来制作 ...
- 浅谈Sql各种join的用法
1.left join.right join.inner join三者区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右 ...
- linux 查看系统信息和安装哪些软件的命令
https://www.cnblogs.com/wangkongming/p/4531341.html 查看系统磁盘硬盘占用率 https://blog.csdn.net/aaashen/articl ...