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的多文件的异步上传实现的更多相关文章

  1. ThinkPHP+JQuery实现文件的异步上传

    前端代码 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...

  2. SpringMVC结合ajaxfileupload文件无刷新上传

    jQuery没有提供ajax的文件上传,我们可以通过ajaxfileupload实现ajax文件的上传.其实ajaxfileupload文件上传特别的简单.下面就演示一下在SpringMVC中实现aj ...

  3. SpringMVC + AJAX 实现多文件异步上传

    转自:https://www.jianshu.com/p/f3987f0f471f 今天,我就这个问题来写一篇如何用 SpringMVC + AJAX 实现的多文件异步上传功能.基本的代码还是沿用上篇 ...

  4. 【方法】Html5实现文件异步上传

    1 简介 开发文件上传功能从来不是一件愉快的事,异步上传更是如此,使用过iframe和Flash的上传方案,也都感觉十分的别扭.本文简要简绍利用Html5的FormData实现文件的异步上传,还可以实 ...

  5. 【实用】Html5实现文件异步上传

    1 简介 开发文件上传功能从来不是一件愉快的事,异步上传更是如此,使用过iframe和Flash的上传方案,也都感觉十分的别扭.本文简要简绍利用Html5的FormData实现文件的异步上传,还可以实 ...

  6. ASP.NET MVC 文件异步上传问题处理

    最近在做一个网站,用asp.net MVC4.0来开发,今天遇到了个小问题,通过查找相关渠道解决了,在这里把这个问题写出来,问题非常简单,不喜勿喷,mark之希望可以给遇到相同问题的初学者一点帮助.我 ...

  7. 【文件上传】jquery之ajaxfileupload异步上传插件

    来自:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336826.html 由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用J ...

  8. Jquery FormData文件异步上传 快速指南

    网站中文件的异步上传是个比较麻烦的问题,不过现在通过jquery 可以很容易的解决这个问题: 使用jquery2.1版本,较老版本不支持异步文件上传功能: 表单代码: <form id=&quo ...

  9. 适用于各浏览器支持图片预览,无刷新异步上传js插件

    文件上传无疑是web应用中一个非常常用的功能,不管是PHP.jsp还是aspx.mvc等都会需要文件上传,但是众所周知当使用自带的文件上传功能时总会出现页面刷新的情况.当然现在有了html5这个好东西 ...

随机推荐

  1. L142

    keep half an eye on something分神留意splash out随意花钱 大肆挥霍half a mind有想做某事go Dutch v. 各自付帐,打平伙chance in a ...

  2. Android(Lollipop/5.0) Material Design(一) 简介

    官网地址:https://developer.android.com/intl/zh-tw/design/material/index.html 使用Material Design 需要api21,即 ...

  3. POSIX线程同步

    在posix编程中,如果在不同的线程中几乎同一时间操作同一个变量的时候,就会出现不同步. 如何解决这样的问题,这里需要用到互斥量,互斥锁的概念.请看UNIX环境高级编程P299页 #include & ...

  4. How your script code be coverted into arm code and running on ios.

    Your script code is compiled into DLLs (assemblies) by the editor. When you build for iOS, these ass ...

  5. Django之 中间件

    中间件 介绍 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.如果你想修改请求,例如被传送到view中的Http ...

  6. 【MFC】VC界面绘制双缓存

    VC界面绘制双缓存 转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/11/20/2255811.html 1.闪屏的问题在GDI的绘图 ...

  7. 【MFC】SetWindowPos函数使用详解

    摘自: http://wenku.baidu.com/link?url=hYKs20rYA13TTdMl9gJ378GNOsxH1DPZPkYZVEIcipATlVBMLzjWdpd2-29fm-tq ...

  8. 【Python系统学习】基础篇

    这次真的是最后一次了!第三次滚Python的基础.走了太多弯路.认真一点!菜鸟! 教程 转义字符 \ 可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\ ...

  9. 深入理解java虚拟机-第十章-早期(编译期)优化

    第10章  早期(编译期)优化 javac编译过程: 1.解析与填充符号表过程 词法.语法分析 将源代码的字条流转变为标记(Token)集合.如“int a = b + 2”这名代码包含了6个标记,分 ...

  10. Centos7下命令笔记-ls

    ls命令大概是linux下最常用的命令之一,ls是list的缩写.因为linux目录或者文件记录的信息实在太多,所以默认ls只显示非隐藏的目录以及文件名.ls直接执行不加参数时显示本目录下的档案名. ...