Spring中MultipartHttpServletRequest实现文件上传

实现图片上传 
  用户必须能够上传图片,因此需要文件上传的功能。比较常见的文件上传组件有Commons FileUpload(http://jakarta.apache.org/commons/fileupload/a>)和COS FileUpload(http://www.servlets.com/cos),spring已经完全集成了这两种组件,这里我们选择Commons FileUpload。 

       1) 在pom.xml中添加jar包

       
            commons-fileupload
            commons-fileupload
            1.3
       


  2) 由于Post一个包含文件上传的Form会以multipart/form-data请求发送给服务器,必须明确告诉DispatcherServlet如何处理MultipartRequest。首先在dispatcher-servlet.xml中声明一个MultipartResolver:

xml 代码
  1.     class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  2.       
  3.       
  4.         1048576  
  5.       
  6.   

 这样一旦某个Request是一个MultipartRequest,它就会首先被MultipartResolver处理,然后再转发相应的Controller。 
      3) 在UploadImageController中,将HttpServletRequest转型为MultipartHttpServletRequest,就能非常方便地得到文件名和文件内容:

java 代码
  1. public ModelAndView handleRequest(HttpServletRequest request,   
  2.             HttpServletResponse response) throws Exception {   
  3.         // 转型为MultipartHttpRequest:   
  4.         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;   
  5.         // 获得文件:   
  6.         MultipartFile file = multipartRequest.getFile(" file ");   
  7.         // 获得文件名:   
  8.         String filename = file.getOriginalFilename();   
  9.         // 获得输入流:   
  10.         InputStream input = file.getInputStream();   
  11.         // 写入文件   
  12.   
  13.         // 或者:   
  14.         File source = new File(localfileName.toString());   
  15.         multipartFile.transferTo(source);   
  16.     }  
     4) 问题:
        如果遇到 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;  
原因出现这个转换错误,是因为request根本没有转换成MultipartHttpServletRequest。所以可以采用另外一种方式解决:
     CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request
                 .getSession().getServletContext());
      commonsMultipartResolver.setDefaultEncoding("utf-8");
       multipartRequest = commonsMultipartResolver.resolveMultipart(request);

你可能感兴趣的:(Spring,文件上传)