Spring上传文件java.lang.IllegalStateException: File has been moved - cannot be read again问题分析及解决
2017-09-11 10:39
886 查看
问题分析:
Spring上传文件默认的文件上传处理器 CommonsMultipartResolver 这个类中使用了 common fileUpload 组件来进行文件的上传。
而 fileUpload 组件在进行文件上传时因为 java 内存有限,所以会先将较大的文件存放在硬盘中的一个临时目录中读取,而不是直接在内存中进行操作。
因此,在对较大文件进行分步骤操作时(例如对大小超过10M的图片进行缩略图生成处理),就会因为要读取的文件已经不存在于内存中而出现java.lang.IllegalStateException: File has been moved - cannot be read again 这个异常。
解决方案:
CommonsMultipartResolver 这个类中 maxInMemorySize 这个属性用来决定大小超多多大的文件会被放在硬盘中的临时目录而不是直接在内存中操作,所以我们调整这个数值的大小为超过我们要进行操作的文件的最大大小即可。
Spring MVC操作如下:
修改applicationcontext.xml文件中如下属性:
Spring Boot操作如下:
不过小弟觉得我的解决方式过于简单粗暴,可能会有什么问题是我没考虑到的,如果各位前辈觉得我的处理方式不妥,还望各位前辈多多指点,先谢谢各位前辈了!
Spring上传文件默认的文件上传处理器 CommonsMultipartResolver 这个类中使用了 common fileUpload 组件来进行文件的上传。
而 fileUpload 组件在进行文件上传时因为 java 内存有限,所以会先将较大的文件存放在硬盘中的一个临时目录中读取,而不是直接在内存中进行操作。
因此,在对较大文件进行分步骤操作时(例如对大小超过10M的图片进行缩略图生成处理),就会因为要读取的文件已经不存在于内存中而出现java.lang.IllegalStateException: File has been moved - cannot be read again 这个异常。
解决方案:
CommonsMultipartResolver 这个类中 maxInMemorySize 这个属性用来决定大小超多多大的文件会被放在硬盘中的临时目录而不是直接在内存中操作,所以我们调整这个数值的大小为超过我们要进行操作的文件的最大大小即可。
Spring MVC操作如下:
修改applicationcontext.xml文件中如下属性:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="104857600"/> <property name="maxInMemorySize" value="4096"/>//将此值设置为需要的大小即可 </bean>
Spring Boot操作如下:
@Bean(name = "multipartResolver") public MultipartResolver multipartResolver(){ CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setMaxInMemorySize(20*1024*1024);//将此值设置为需要的大小即可,我这里设置为20M return resolver; }
不过小弟觉得我的解决方式过于简单粗暴,可能会有什么问题是我没考虑到的,如果各位前辈觉得我的处理方式不妥,还望各位前辈多多指点,先谢谢各位前辈了!
相关文章推荐
- 文件上传 ,java.lang.IllegalStateException: File has been moved - cannot be read again org.springframewor
- java.lang.IllegalStateException: File has been moved - cannot be read again
- java.lang.IllegalStateException: File has been moved - cannot be read again
- 文件上传获取属性时:File has been moved - cannot be read again
- 图片上传--IllegalStateException File has been moved - cannot be read again
- 异常-----springmvc + ajaxfileupload解决ajax不能异步上传图片的问题。java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.
- 偶尔发生File has been moved - cannot be read again,其实是个误解
- 偶尔发生File has been moved - cannot be read again,其实是个误解
- 解决使用maven的java web项目导入或新建添加pom配置后出现的有关问题 -cannot be read or is not a valid ZIP file
- 解决spring使用动态代理类型转换失败的问题--java.lang.ClassCastException: com.sun.proxy.$Proxy$ cannot be cast to ...
- 解决使用maven的java web项目导入后出现的有关问题 -cannot be read or is not a valid ZIP file
- 解决spring使用动态代理类型转换失败的问题--java.lang.ClassCastException: com.sun.proxy.$Proxy$ cannot be cast to ...
- JMeter学习-027-JMeter参数文件(脚本分发)路径问题:jmeter.threads.JMeterThread: Test failed! java.lang.IllegalArgumentException: File distributed.csv must exist and be readable解决方法
- Spring+hibernate中的问题解决:java.lang.ClassCastException: $Proxy6 cannot be cast to com.mqEsb.service.imp
- java.lang.IllegalStateException: Cannot forward after response has been committed问题的解决
- 解决spring使用动态代理类型转换失败的问题--java.lang.ClassCastException: com.sun.proxy.$Proxy$ cannot be cast to ...今天
- Java-Spring:java.lang.ClassCastException: com.sun.proxy.$Proxy* cannot be cast to***问题解决方案
- 解决java 项目导入后出现的问题 ---cannot be read or is not a valid ZIP file
- 解决使用maven的java web项目导入后出现的有关问题, -cannot be read or is not a valid zip file
- 解决struts/spring偶尔出现java.lang.IllegalStateException: Cannot call sendRedirect() after the response的问题