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();
}
}