2012-12-18 55 views
2

使用Spring MVC上傳文件(多個文件)時,出現以下錯誤。春季 - 上傳表單 - 無法獲取文件列表

java.lang.NullPointerException 
    com.mkyong.common.controller.FileUploadController.save(FileUploadController.java:34) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 

JSP

<form:form method="post" action="save" 
     modelAttribute="uploadForm" enctype="multipart/form-data"> 
    <p>Select files to upload. Press Add button to add more file inputs.</p> 
    <input id="addFile" type="button" value="Add File" /> 
    <table id="fileTable"> 
     <tr> 
      <td><input name="files[0]" type="file" /></td> 
     </tr> 
     <tr> 
      <td><input name="files[1]" type="file" /></td> 
     </tr> 
    </table> 
    <br/><input type="submit" value="Upload" /> 
</form:form> 

控制器

@RequestMapping(value = "/save", method = RequestMethod.POST) 
public String save(
     @ModelAttribute("uploadForm") FileUploadForm uploadForm, 
       Model map) { 
    List<MultipartFile> files = uploadForm.getFiles(); 

    List<String> fileNames = new ArrayList<String>(); 
    //counting the file size 
    System.out.println("Files count :"+files.size()); 

    if(null != files && files.size() > 0) { //HERE 'files' is NULL 
     for (MultipartFile multipartFile : files) { 

      String fileName = multipartFile.getOriginalFilename(); 
      fileNames.add(fileName); 
      //Handle file content - multipartFile.getInputStream() 

     } 
    } 

任何人都可以請幫我解決這個?我仍在調試爲什麼我無法將文件(uploadForm)從jsp傳遞到控制器。

+0

您可能需要在你的JSP使用Spring的頂級域名。嘗試使用''而不是'

+0

是否在庫中使用了兩個jar commons-io和commons-fileupload ?因爲上傳取決於這個罐子。 – KSHiTiJ

+0

@kshitij - 是的。我添加了這兩個依賴 – user1732653

回答

1

我剛解決了它。您需要在您的dispatcher-servlet.xml中添加<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

如果您使用多部分數組爲多個文件,然後使用數組名稱。像

private MultipartFile [] file; 

getter和setter和形式

<form:form commandName="uploadFile" method="post" enctype="multipart/form-data"> 
     <input type="file" name="file"/> 
     <input type="file" name="file"/> 
     <input type="file" name="file"/> 
     <input type="submit" value="Submit"/> 
    </form:form> 
+0

這工作。非常感謝Kshitij – user1732653

+0

不客氣。 – KSHiTiJ