AdSense

網頁

2018/3/19

Spring MVC 上傳檔案 java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided

Spring MVC上傳檔案碰到下面錯誤。

java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided

因為你可能忘了在Spring MVC的配置檔設定Multipart resolver,例如下面範例使用CommonsMultipartResolver

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <!-- 單位bytes--> 
  <property name="maxUploadSize" value="20971520" /> <!-- 20MB --><!-- 全部檔案最大上上傳大小, -1代表不限制 -->
  <property name="maxUploadSizePerFile" value="5242880"/> <!-- 5MB --><!-- 每個檔案最大上傳大小, -1代表不限制 -->
  <property name="maxInMemorySize" value="1048576" /> <!-- 1MB --><!-- 檔案上傳最大的暫存記憶體大小,預設為10240 bytes(1KB) -->
  <property name="defaultEncoding" value="UTF-8" /> <!-- 1MB -->
</bean>

而Spring的CommonsMultipartResolver是依賴Apache Commons FileUpload函式庫,又Apache Commons FileUpload依賴於Apache Commons IO,所以必須將這兩個函式庫匯入至專案的Libraries。

如果你的專案使用Maven,可直接在Mavan的pom.xml加入以下。

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.3</version>
</dependency>

如果在Spring配置檔中設定了CommonsMultipartResolver卻沒加入上面兩個函式庫,則會出現下面錯誤。

Failed to instantiate [org.springframework.web.multipart.commons.CommonsMultipartResolver]: No default constructor found; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory

沒有留言:

AdSense