框架是个强大的东西,一般你能想到的,框架都会帮你做了,然后只需要会用就行了,spingmvc中有处理异步请求的机制,而且跟一般处理请求的方法差别不大,只是多了一个注解;spingmvc也可以将string、list、map转化成json数据;然后前台发起一个ajax请求,后台处理完成返回json数据,这就是异步上传文件的基本思路。

1、springMVC处理异步请求配置

  首先是需要的jar包资源

  上传文件的jar:

  commons-fileupload-1.2.2.jar

  commons-io-2.4.jar

  json格式转换的jar:

  jackson-databind-2.5.4.jar

  jackson-core-2.5.4.jar

  jackson-annotations-2.5.0.jar

  导入Jackson的包之后,在控制器处理请求的方法中,就可以直接返回string、list、map,甚至可以是Map<String , List<String>>这样格式的数据,框架都会转换成json格式的数据返回给前台,因为springMVC内置就是使用Jackson来转换格式的,所以只需要导入jar包,框架就会帮我们自动转换成json格式的数据。例如,在控制器的方法中返回了这样的一个map  Map<String, List<String>> hashMap = new HashMap<String , List<String>>(); 返回到前台的格式就是:{"vals":["12136","896","128","10915"],"keys":["台区总数","一般警告","严重警告","正常台区"]}

  导入jar包资源之后还需要在springMVC的全局配置文件中配置文件上传的bean,如果用到了json数据格式转换也需要在全局配置文件中配置。

  上传文件需要的配置:

<!-- 文件上传   设置文件大小限制 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>5242880</value>
</property>
<!-- 设置默认的编码方式 -->
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>

  

  json格式转换的配置:

<!-- 处理ajax请求,将返回的数据转为json -->
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false" />
</bean>
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> <bean id="stringConverter"
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="stringConverter" />
<ref bean="jsonConverter" />
</list>
</property>
</bean>

2、前台的ajax请求

  前台使用ajax发起异步请求,思路:异步请求肯定是js来提交请求,但是这里的输入的内容是一个文件,可以使用H5中的Formdata对象,然后通过js获取到input中的值放到Formdata中,然后把Formdata传到后台。

  具体代码如下:

$("#importDetialDataExcel").click(function(){
var detailDataExcel = document.detailDataForm.detailDataExcel.files[0];
var myForm = new FormData();
myForm.append("detailDataExcel",detailDataExcel);
$("#detailDataState").text("上传中...");
ajaxImport(myForm,"uploadDetailData.shtml","#detailDataState");
}); // 用于发起异步请求
function ajaxImport(myForm,myurl,state) {
$.ajax({
url : myurl,
type : "post",
data : myForm,
dataType : 'json',
contentType : false, // 禁止设置请求类型
processData : false, // 禁止jquery对DAta数据的处理,默认会处理
// 禁止的原因是,FormData已经帮我们做了处理
success : function(result) {
// alert(result.result);
showMsg('文件' + result.result + '上传成功', 'bottom');
$(state).text("已上传");
},
error : function(data) {
showMsg('文件上传失败', 'bottom');
$(state).text("上传失败");
}
});
}

  

3、spingmvc控制器中的方法

  数据到了后台处理方式和平时差别不大,只需要在方法前加一个@ResponseBody注解,这样返回的数据格式就是json格式,值得注意的是在方法的参数中,对象的类型就是MultipartFile,名称必须和ajax请求参数中的名称一致,detailDataExcel,也就是放入到Formdata中的参数名。接收到文件后写入到本地磁盘或者作其他处理。

  具体代码如下:

@RequestMapping("uploadDetailData.shtml")
@ResponseBody
public Map<String, String> importDetailDataExcel(MultipartFile detailDataExcel)
throws RuntimeException, IOException {
Map<String, String> mapResult = new HashMap<String, String>(); // 新建map向客户端返回数据
if (!detailDataExcel.isEmpty()) {
// 设置文件上传保存的路径
String path = "D:\\java\\workSpace\\ElectricSystem\\upload\\detailData\\";
String originFileName = detailDataExcel.getOriginalFilename(); // 获取文件的原始文件名
File file = new File(path + originFileName);
detailDataExcel.transferTo(file); // 将文件写入磁盘
mapResult.put("result", originFileName);
}
return mapResult;
}

  

spingMVC异步上传文件的更多相关文章

  1. Servlet异步上传文件

    这里需要用到插件ajaxfileupload.js,jar包:commons-fileupload-1.3.2.jar,commons-io-2.5.jar 注意红色部分的字!!!! 1.创建一个we ...

  2. struts2 jquery ajaxFileUpload 异步上传文件

    网上搜集的,整理一下. 一.ajaxFileUpload 实现异步上传文件利用到了ajaxFileUpload.js这个文件,这是别人开发的一个jquery的插件,可以实现文件的上传并能够和strut ...

  3. 关于js异步上传文件

    好久没登录博客园了,今天来一发分享. 最近项目里有个需求,上传文件(好吧,这种需求很常见,这也不是第一次遇到了).当时第一想法就是直接用form表单提交(原谅我以前就是这么干的),不过表单里不仅有文件 ...

  4. 利用ajaxfileupload.js异步上传文件

    1.引入ajaxfileupload.js 2.html代码 <input type="file" id="enclosure" name="e ...

  5. 【转】JQuery插件ajaxFileUpload 异步上传文件(PHP版)

    前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错,但是由于手机不支持flash,所以不得不再找一个文件上传插件来用了.后来发现a ...

  6. 异步上传文件,ajax上传文件,jQuery插件之ajaxFileUpload

    http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html 一.ajaxFileUpload是一个异步上传文件的jQuery插件. ...

  7. 利用jquery.form实现异步上传文件

    实现原理 目前需要在一个页面实现多个地方调用上传控件上传文件,并且必须是异步上传.思考半天,想到通过创建动态表单包裹上传文件域,利用jquery.form实现异步提交表单,从而达到异步上传的目的,在上 ...

  8. HTML5预览图片、异步上传文件

    注意啦:本文的代码都是以JQuery为示例,jq_开头的变量都是jq对象. 在HTML5中,我们可以在图片上传之前对图片进行预览,就像下面这么做 jq_upload_file.change(funct ...

  9. (H5)FormData+AJAX+SpringMVC跨域异步上传文件

    最近都没时间整理资料了,一入职就要弄懂业务,整天被业务弄得血崩. 总结下今天弄了一个早上的跨域异步上传文件.主要用到技术有HTML5的FormData,AJAX,Spring MVC. 首先看下上传页 ...

随机推荐

  1. Android为TV端助力 自定义activity

    今天公司有个需要需要自动弹出界面,而dialog又不符合要求,所以自定义的一个activity的样式 首先在androidmainfest.xml上注册你的activity <activity ...

  2. 「Android」消息驱动Looper和Handler类分析

    Android系统中的消息驱动工作原理: 1.有一个消息队列,可以往这个消息队列中投递消息; 2.有一个消息循环,不断的从消息队列中取得消息,然后处理. 工作流程: 1.事件源将待处理的消息加入到消息 ...

  3. 章节七、6-Map集合的区别

    一.通过entrySet取出Map中的元素 package ZangJie7; import java.util.HashMap; import java.util.Map; public class ...

  4. (后端)安装mongodb以及设置为windows服务 详细步骤(转)

    1.在data文件夹下新建一个log文件夹,用于存放日志文件,在log文件夹下新建文件mongodb.log 2.在 D:\mongodb文件夹下新建文件mongo.config,并用记事本打开mon ...

  5. 关于正餐智能POS6.0.1.1改版后,订单模块无法进行部分退款的FAQ

    适用版本:智能POS正餐V6.0.1.1+ 适用情况:订单模块,无法输入自定义金额进行部分退款. 原因:为让报表统计的数据更准确. 改版之后仍可适用部分退款的情况: 1.口碑先付订单,可在口碑模块,选 ...

  6. Zabbix WMI监控

    检查Windows OS是否激活,5表示处于通知模式,1表示已激活 wmi.get[root\cimv2,select LicenseStatus FROM SoftwareLicensingProd ...

  7. 第十四届智能车培训 PLL锁相环

    什么是锁相环? PLL(Phase Locked Loop): 为锁相回路或锁相环,用来统一整合时脉讯号,使高频器件正常工作,如内存的存取资料等.PLL用于振荡器中的反馈技术. 许多电子设备要正常工作 ...

  8. IE6浏览器无法打开QQ邮箱

    原因:未启用TLS1.0 解决方法: 打开IE浏览器,依次打开 [Internet]→[高级],在 设置 选项卡中,勾选[使用TLS1.0],然后点击[确定]保存修改,重启浏览器即可.

  9. Metasploit渗透测试梗概

    1.渗透测试基础内容 https://blog.csdn.net/Fly_hps/article/details/79492646 2.Metasploit基础 https://blog.csdn.n ...

  10. Eclipse JVM terminated.exit code=13

    今天,在安装Nomad PIM时碰到这个问题,因为这个应用是基于32位的Eclipse平台开发的,而我的电脑是64位的Windows 7,当然安装的JDK也是64位的,于是报错. 搜索了网上,给了许多 ...