The*_*boy 9 java spring file-upload spring-mvc
我有以下代码块处理我在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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的app-servlet.xml文件中,我有以下代码来配置MultipartFile解析器bean.
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>
Run Code Online (Sandbox Code Playgroud)
我在上传照片时遇到了一些随机问题.
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)
Run Code Online (Sandbox Code Playgroud)
我尝试了一些配置Multipart解析器的不同选项,例如将其切换为处理CommonsMultipartFile对象,与普通的MultipartFile对象相反,但没有任何改变.
我还尝试使用以下属性在CommonsMultipartFileResolver bean中配置最大上载大小.
<property name="maxUploadSize" value="1024000000"/>
Run Code Online (Sandbox Code Playgroud)
没有任何改变.我不确定CommonsMultipartResolver默认为可以上传的文件大小,但这不是我的问题.
我被告知我遇到的问题是由于Spring正在使用的Multipart解析器/处理程序中的问题.我最近有一篇关于同样问题的帖子,并且由于发现了新信息,因此希望重新发布新信息.可以在CommonsMultipartFileResolver问题中找到旧帖子
我觉得我已经检查了互联网上的几乎所有资源以查找其他文档,但我无法找出问题所在.
请帮我弄清楚这是怎么回事,如果有一个更好,更简单的解决方案可能探索这些选项,但如果我能找到解决方案,我宁愿继续使用我当前的方法.
编辑 注意 - 我一直在尝试上传不同尺寸的照片,我相信它允许我上传的限制大约是10Kb.任何大于10Kb的东西都会导致它破裂并给我上面的错误.
The*_*boy 12
经过大量的研究,我解决了我的问题.事实证明,没有为使用CommonsMultipartFileResolver上传的最大字节数设置默认限制.当然,您可以通过设置以下属性在bean中指定您想要的任何数量.
<property name="maxUploadSize" value="99999999999"/>
Run Code Online (Sandbox Code Playgroud)
还有一个属性maxInMemorySize,允许您指定在将文件写入磁盘之前允许的最大大小.虽然这与最大上载大小的工作方式相同,但如果未指定数量,则默认为1024字节.如果我尝试上传大文件,这可以解释它.
为了允许上传1024字节以上的文件,您需要将maxInMemorySize值增加到您需要的任何值,如下所示...
这就是照顾我的问题.我在查看CommonsFileUpload文档的文档时了解到这个属性默认为1024.
您可以在CommonsFileUpload Documentation中查看此文档
我希望这对任何人都有帮助,因为没有关于使用CommonsMultipartFile的非常好的文档.
我注意到只有当文件超过 1024 字节并且您尝试读取该文件两次时才会出现此错误。正如 CitadelCSAlum 提到的,设置 maxInMemorySize = maxUploadSize 将解决此问题,但应记住内存使用情况。如果内存是一个问题,另一个选择是在第一次读取时将多部分文件数据写入临时文件,并使用该文件进行后续读取。如果您不读取两次,则不需要增加 maxInMemorySize。
| 归档时间: |
|
| 查看次数: |
23180 次 |
| 最近记录: |