我是基于red5服务器。来用springMVC框架做文件上传。在上传文件时遇到错误。
@RequestMapping(value = "/upload.do",method = RequestMethod.POST)
public String upload(HttpServletRequest request,
HttpServletResponse response, String string) {
System.out.println("==================run in import");
System.out.println("--------------" + request.getParameter("upload"));
// 创建一个通用的多部分解析器.
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 设置编码
commonsMultipartResolver.setDefaultEncoding("utf-8");
System.out.println("++++++commonsMultipartResolver.isMultipart(request) : " + commonsMultipartResolver.isMultipart(request));
// 判断是否有文件上传
if (commonsMultipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multipartRequest = commonsMultipartResolver
.resolveMultipart(request);
Iterator<String> iter = multipartRequest.getFileNames();
System.out.println("+++++++++++iter = "+iter.toString());
// iter里面没有值
while (iter.hasNext()) {
MultipartFile file = multipartRequest.getFile((String) iter.next());
if (file != null) {
File localFile = new File("/WEB-INF/upload"
+ file.getOriginalFilename());
try {
// file.transferTo(localFile);
System.out.println("=======1111111111111====");
file.transferTo(localFile);
System.out.println("====222222222222222=======");
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
// 批量上传
// Map<String, MultipartFile> fileMap = request.getFileMap();
// for(Entry<String, MultipartFile> entry : fileMap.entrySet()){
// MultipartFile file = entry.getValue();
// try {
// file.transferTo(new File("/WEB-INF/upload" +
// file.getOriginalFilename()));
// } catch(IllegalStateException e){
// e.printStackTrace();
// }catch (Exception e) {
// // TODO: handle exception
// e.printStackTrace();
// }
// }
return "up";
}
}
上传文件后,在我指定的地方没有找到文件。测试发现
if (commonsMultipartResolver.isMultipart(request)) 这个地方获得的是false,我这个action没有接收到上传的文件,但是通过System.out.println("--------------" + request.getParameter("upload"));获取到了我上传文件的文件名。
通过上网查找,我在配置文件中配置了MultipartResolver处理器
<!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
<!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
<!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException -->
<!-- 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 -->
<prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>
</props>
</property>
</bean>
如果我在代码最上面写
MultipartHttpServletRequest rrr = (MultipartHttpServletRequest) request;
他就会报转化错误
java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest
不知道现在是什么问题,求解啊!