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这个好东西 ... 
随机推荐
- 如何在100万文字的文章中 200ms内 快速提取 替换  上万个关键字
			关键点: 关键字 组合 成一棵 hash 树 ( 有属性就直接移动指针到下一个字对象, 没有属性就创建子对象, 再移动指针; 第二次循环在子对象看有没这个属性 ) 探测针 标记结束 ... 
- json 和 table控件
			<!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content= ... 
- 有了Docker的程序猿们就能开启“上帝视角”?
			现在,如果有程序猿说不知道Docker,这将是难以想象的. 百科是这样描述Docker的."Docker是dotCloud开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植 ... 
- Android 自定义组件之如何实现自定义组件
			参考链接:http://blog.csdn.net/jjwwmlp456/article/details/41076699 简介 Android提供了用于构建UI的强大的组件模型.两个基类:View和 ... 
- 最新海康摄像机、NVR、流媒体服务器、回放取流RTSP地址规则说明
			本文档主要介绍海康威视设备预览.回放.流媒体取流的RTSP URL和IE直接预览.回放的HTTP URL. RTSP为取流协议,取到码流后需要解码显示,可以通过VLC播放器进行测试,IE等浏览器网页不 ... 
- Jedis操作Redis技巧详解
			对于Redis的部署模式有两种,单机模式 和 集群模式.因此,本文的介绍也从这两个方面进行介绍.众所周知,Jedis是最著名的Redis java客户端操作类库,几乎支持所有的Redis操作.本文就是 ... 
- Android快速开发-选项卡
			介绍 几行代码实现Android选项卡界面,支持标准底部Tab自定义视图选项卡,头部文字选项卡. 底部自定义视图选项卡 先来看看实现下图中的效果我们代码应该怎么写? 实现上图效果只需以下代码: pub ... 
- animal farm 第一章阅读笔记
			chapter 1 Old Major's dream. paragraph 1 //Mr Jones is the mastor of the Manor Farm.That night ... 
- ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)
			目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严 ... 
- Spring、Spring MVC、Struts2优缺点整理
			Spring 及其优点 大部分项目都少不了Spring的身影,为什么大家对他如此青睐,而且对他的追捧丝毫没有减退之势呢 Spring是什么: Spring是一个轻量级的DI和AOP容器框架. 说它轻量 ... 
