分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

spingMVC异步上传文件

发布时间:2023-09-06 01:08责任编辑:苏小强关键词:MVC

框架是个强大的东西,一般你能想到的,框架都会帮你做了,然后只需要会用就行了,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异步上传文件

原文地址:http://www.cnblogs.com/hello-daocaoren/p/7465368.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved