【发布时间】:2011-04-14 10:18:21
【问题描述】:
我有以下代码块处理我在 Spring MVC Web 应用程序中使用的照片的文件上传。我正在使用 Spring MVC CommonsMultipartFileResolver 来处理文件上传。
if(model.getPhoto() != null){
if(!model.getPhoto().isEmpty()){
MultipartFile file = model.getPhoto();
String fileName = file.getOriginalFilename();
String filePath = baseDirectory + fileName;
FileOutputStream fos = new FileOutputStream(filePath);
try
{
fos.write(file.getBytes());
agentProfile.setPhotoUri(fileName);
}
catch (IllegalStateException e)
{
System.out.println(e);
}
finally
{
fos.close();
}
}
}
在我的 app-servlet.xml 文件中,我有以下代码来配置 MultipartFile 解析器 bean。
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>
我在上传照片时遇到了一些随机问题。
1)如果我去上传一张较小的照片,大约3 kb左右,它会上传成功。
2)如果我要上传大一点的照片,它会在目录中创建文件,但大小为0字节,并会给出以下错误消息。
java.lang.IllegalStateException: File has been moved - cannot be read again
org.springframework.web.multipart.commons.CommonsMultipartFile.getBytes(CommonsMultipartFile.java:112)
com.mmz.admin.mvc.controller.AddAgentController.processFinish(AddAgentController.java:145)
org.springframework.web.servlet.mvc.AbstractWizardFormController.validatePagesAndFinish(AbstractWizardFormController.java:642)
org.springframework.web.servlet.mvc.AbstractWizardFormController.processFormSubmission(AbstractWizardFormController.java:492)
org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:265)
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:874)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:808)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:441)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
我尝试了几个不同的选项来配置 Multipart 解析器,例如将其切换为处理 CommonsMultipartFile 对象,而不是普通的 MultipartFile 对象,但没有任何改变。
我还尝试使用以下属性在 CommonsMultipartFileResolver bean 中手动配置最大上传大小。
<property name="maxUploadSize" value="1024000000"/>
也没有任何改变。我不确定 CommonsMultipartResolver 默认的可上传文件大小,但这不是我的问题。
有人告诉我,我遇到的问题是由于 spring 正在使用的 Multipart 解析器/处理程序中的问题。我最近有一篇关于同样问题的帖子,因为发现了新信息,所以想用新信息重新发布。旧帖可见CommonsMultipartFileResolver Problem
我觉得我已经检查了互联网上的几乎所有资源以查找其他文档,但无法找出问题所在。
请帮我弄清楚这是怎么回事,如果有更好、更简单的解决方案来探索这些选项,但如果可以的话,我更愿意继续使用我目前的方法找到解决办法。
编辑 注意-我一直在尝试上传不同尺寸的照片,我相信它允许我上传的限制约为 10Kb。任何大于 10Kb 的东西都会导致它中断并给我上面的错误。
【问题讨论】:
标签: java spring file-upload spring-mvc