springmvc异步上传文件

前提条件

注意:bean的id名不能改变

<!-- 上传文件拦截,设置最大上传文件大小   10M=10*1024*1024(B)=10485760 bytes -->  
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760" />
        <!--<property name="resolveLazily" value="true"/>-->
    </bean>

 

前台页面upload.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="${pageContext.request.contextPath }/static/jquery/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath }/static/jquery/jquery.form.js"></script>
    <script type="text/javascript">
   		//这种方式,可以异步请求数据,但是不能异步上传文件
   		/*使用这种方式,会在后台抛出一个异常:
   			org.springframework.web.multipart.MultipartException: 
   				The current request is not a multipart request
   		*/
   		function doUpload(){
   			$.ajax({  
   			     url : "getParamFromFile",  
   			     type : "POST",  
   			     data : $('#postForm').serialize(),  
   			     success : function(data) {  
   			          $( '#messageTip').html(data);
   			          $( '#messageTip').show();
   			     },  
   			     error : function(data) {  
   			          $( '#messageTip').html(data);
   			          $( '#messageTip').show();
   			     }  
   			}); 
   		} 
   		
   		//使用jquery.form.js的表单插件来提交表单,这个可以异步上传文件
   		/* function doUpload(){
   	   	    var options = {
   	   	    	url: 'getParamFromFileForAjax',//表单提交的地址。缺省值: 表单的action的值
   	   	    	type: 'POST',
   	   	    	dataType:'text',
   	   	    	data :{
					fileName : 'uploadFile'   	   	    		
   	   	    	},
   	   	  		//clearForm: true,//成功提交后,清除所有表单元素的值
   	   	  		//timeout: 3000 ,//限制请求的时间,当请求大于3秒后,跳出请求
   	   	  		// 从服务传过来的数据显示在这个div内部也就是ajax局部刷新
   	   	    	//target: '#output1',
   	   	 		
   	   	  		// 处理之后的处理
   	   	  		success: function(data){
   	   	  			alert(data);
   	   	  			var result = $.parseJSON(data);
   	   	  			alert(result);
   	   	  		}
   	   	 	};
   	   	    
   	   	    //使用jquery的ajax upload插件可以上传文件
	   	   	$('#postForm').ajaxSubmit(options);
   		} */
    </script>
</head>
<body>
    <form id="postForm" action="getParamFromFile" method="post" 
		enctype="multipart/form-data">
	                上传XML模版文件:<input type="file" name="uploadFile"/>
	                <input type="submit" value="上传"/>
	      <input type="button" value="获取Json参数数据" οnclick="doUpload()"/>
	      <span id="messageTip" hidden="true"></span>
   	</form>
</body>
</html>

 

 

后台Controller代码

//这种是使用传统的form表单提交的,即在前台页面上点击‘上传’按钮上传文件的形式,
//而且在form标签上必须指定enctype="multipart/form-data"
@RequestMapping(value = "getParamFromFile",method = RequestMethod.POST) @ResponseBody public Map<String, Object> getParamFromFile(@RequestParam("uploadFile") MultipartFile uploadFile,HttpServletRequest request, HttpServletResponse response) { Map<String, Object> paramMap = new LinkedHashMap<String, Object>(); FileInputStream inputStream = null; try{ String filename = uploadFile.getName(); String originalFilename = uploadFile.getOriginalFilename(); System.out.println("FileName = " + filename); System.out.println("originalFilename = " + originalFilename); inputStream = (FileInputStream) uploadFile.getInputStream(); } catch (IOException e1) { paramMap.put("message", "上传文件错误"); return paramMap; } //String filePath = "E:\\work\\svn\\openeap\\code\\openeap\\src\\main\\webapp\\template\\北京市房屋租赁合同5.xml"; //paramMap = ImportFile.getParamFromFile(filePath); paramMap = ImportFile.getParamFromStream(inputStream); Iterator it = paramMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); System.out.println("参数 Key: " + e.getKey() + "; 参数 Value: " + e.getValue()); } System.out.println("生成的json为: " + JsonMapper.getInstance().toJson(paramMap)); return paramMap; } //jQuery form插件的使用 后台 @RequestMapping(value = "getParamFromFileForAjax",method = RequestMethod.POST) @ResponseBody public Map<String, Object> getParamFromFileForAjax(HttpServletRequest request,String fileName) { Map<String, Object> paramMap = new LinkedHashMap<String, Object>(); FileInputStream inputStream = null; //把Request强转成多部件请求对象 MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request; //根据文件名称获取文件对象 CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) multipartHttpServletRequest.getFile(fileName); try{ String filename = commonsMultipartFile.getName(); String originalFilename = commonsMultipartFile.getOriginalFilename(); System.out.println("FileName = " + filename); System.out.println("originalFilename = " + originalFilename); inputStream = (FileInputStream) commonsMultipartFile.getInputStream(); } catch (IOException e1) { paramMap.put("message", "上传文件错误"); return paramMap; } //String filePath = "E:\\work\\svn\\openeap\\code\\openeap\\src\\main\\webapp\\template\\北京市房屋租赁合同5.xml"; //paramMap = ImportFile.getParamFromFile(filePath); paramMap = ImportFile.getParamFromStream(inputStream); Iterator it = paramMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); System.out.println("参数 Key: " + e.getKey() + "; 参数 Value: " + e.getValue()); } System.out.println("生成的json为: " + JsonMapper.getInstance().toJson(paramMap)); return paramMap; }

  

  异步上传文件有两种方式:

  参考的文章:

    http://www.cnblogs.com/zhuxiaojie/p/4783939.html#autoid-1-0-0

 

转载于:https://www.cnblogs.com/move22/p/7246336.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Spring MVC进行异步文件上传时,需要进行以下步骤: 1. 在Spring MVC的配置文件中启用异步支持,可以使用<mvc:annotation-driven>元素或@EnableWebMvc注解来完成。 2. 创建一个控制器方法来处理文件上传请求。该方法应该使用@RequestParam注解来接收文件,并且需要使用@RequestBody注解来指定处理请求体的方式为异步。 3. 创建一个异步任务来处理文件上传操作。可以使用Spring的异步任务支持,即@Async注解来完成。在异步任务中,可以使用Spring的ResourceUtils类将文件保存到指定的位置。 4. 返回一个异步结果对象来表示文件上传的状态。可以使用DeferredResult或ListenableFuture等Spring提供的异步结果对象来完成。 下面是一个示例控制器方法的代码: ``` @RequestMapping(value = "/uploadFile", method = RequestMethod.POST) @ResponseBody public DeferredResult<String> handleFileUpload(@RequestParam("file") MultipartFile file) { DeferredResult<String> deferredResult = new DeferredResult<>(); AsyncTask asyncTask = new AsyncTask(file, deferredResult); asyncTask.execute(); return deferredResult; } ``` 在该示例代码中,handleFileUpload方法使用DeferredResult来表示异步处理的结果,然后创建一个AsyncTask对象来处理文件上传操作。AsyncTask类是一个自定义的异步任务类,其中包含一个execute方法,用于执行文件上传操作。在该方法中,使用ResourceUtils类将文件保存到指定的位置,并最终将文件上传的结果通知给DeferredResult对象。 请注意,在使用Spring MVC进行文件上传时,需要确保上传的文件大小不超过服务器所允许的最大限制。可以通过在Spring MVC的配置文件中配置multipartResolver来设置上传文件的最大大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值