SpringMVC文件上传报错常见错误与解决方法

1、错误一

org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest

解决方法1:

源代码:MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;

问题之一:跨服务器

解决代码:

 //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(request.getSession().getServletContext());

2、错误二

org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest

源代码:FileItem item = (FileItem) iter.next();

问题:用了上述的解决方法的代码

解决代码:

 //获取文件
 MultipartFile file=multiRequest.getFile(iter.next().toString());

3、错误三

获取不到文件名或文件名乱码

源代码:

//获取文件
MultipartFile file=multipartRequest.getFile(iterString);
String fileName = file.getName();//错误的获取文件名,所以获取不到文件名
String fileName = file.getOriginalFilename();//获取到文件名,但文件名乱码

解决代码:

//response.setContentType("text/html;charset=utf-8"); 可设置或不设置
request.setCharacterEncoding("utf-8");//这个必须要
String fileName =new String(file.getOriginalFilename().getBytes(),"UTF-8");

4、完整源码

 response.setContentType("text/html;charset=utf-8");
 request.setCharacterEncoding("utf-8");
 if(ServletFileUpload.isMultipartContent(request))
  {
      try {
        		 //将request变成多部分request
                 //MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
        		 MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
        	     MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);
                //获取multiRequest 中所有的文件名
                 Iterator iter=multipartRequest.getFileNames();
                 while(iter.hasNext())
                 {  
                	 //一次遍历所有文件
                	 String iterString  =iter.next().toString();
                	 MultipartFile file=multipartRequest.getFile(iterString);
                	// FileItem item = (FileItem) iter.next();
                	 __filename = new String(file.getOriginalFilename().getBytes(),"UTF-8");
                	 File saveFile = new File(__upload_path+__filename);
                	 if (!saveFile.exists()) {
                		 saveFile.createNewFile();
    					}

                	 byte[]__buffer_file= file.getBytes();
                	 FileUtils.writeByteArrayToFile(saveFile, __buffer_file);
                       
                 }
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();

			}
        	
}

 


版权声明:本文为u011323200原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。