天天看點

java.lang.IllegalStateException: File has been moved - cannot be read again

在用jqueryfileupload上傳檔案時報如下錯誤:

java.lang.IllegalStateException: File has been moved - cannot be read again

背景接口是spring mvc, 檢查sprnig mvc配置檔案:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize">
			<value>102400000</value>
		</property>
</bean>
           

配置了允許上傳檔案的最大size, 而自己上傳的檔案大小遠遠小于這個,什麼情況呢?

經過網上搜尋資料,發現spring mvc除了maxUploadSize參數,還有一個maxInMemorySize參數,指定允許檔案被寫入記憶體的最大szie,則預設為1024位元組,即1MB,如果試上傳大于1024個位元組的檔案,你需要增加maxInMemorySize價。

如下:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
   		http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/context   
        http://www.springframework.org/schema/context/spring-context-4.0.xsd">

	<!-- 添加攔截器 -->
	<bean id="handlerMapping"
		class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
		<property name="interceptors">
			<bean class="com.message.web.interceptor.SessionInterceptor" />
		</property>
	</bean> 

	<!-- 配置controller掃描 -->
	<context:component-scan base-package="com.message.web.controller" />

	<!-- 配置springmvc視圖解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass">
			<value>org.springframework.web.servlet.view.JstlView</value>
		</property>
		<property name="prefix">
			<value>/message/</value>
		</property>
		<property name="suffix">
			<value>.jsp</value>
		</property>
	</bean>

	<!-- 設定上傳檔案的最大尺寸為100MB -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize">
			<value>102400000</value>
		</property>
		<property name="maxInMemorySize">
			<value>10240000</value>
		</property>
	</bean>
</beans>