1、加入JAR
由於SpringMVC使用的是commons-fileupload實現,所以除了之前使用到的Spring MVC用到的一些JAR外,還需要下面兩個JAR: commons-fileupload-x.x.x.jar和commons-io-x.x.x.jar。
2、配置MultipartResolver處理器(mvc-servlet.xml)
<!-- 設置MultipartResolver用以文件上傳 -->
<!--
p:defaultEncoding請求的編碼格式,必須與JSP頁面的編碼一樣
p:maxUploadSiz上傳文件的大小。5MB
p:uploadTempDir上傳文件的臨時路徑,文件上傳完後,臨時目錄中的臨時文件會被自動清除
-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="UTF-8"
p:maxUploadSize="5242880"
p:uploadTempDir="upload/temp"/>
3、Controller中處理
在Controller的方法中添加MultipartFile參數。該參數用於接收表單中file組件的內容
/**
* 如果只是上傳一個文件,則只需要MultipartFile類型接收文件即可
* 如果想上傳多個文件,那麼這裏就要用MultipartFile[]類型來接收文件,並且還要指定@RequestParam註解
* 並且上傳多個文件時,前臺表單中的所有<input type="file"/>的name都應該是file,否則參數裏的file無法獲取到所有上傳的文件
*/
@RequestMapping("upload")
public ModelAndView upload(String name,@RequestParam("file") MultipartFile[] file,HttpServletRequest request) throws IllegalStateException, IOException{
String realPath = request.getSession().getServletContext().getRealPath("/uploadFile");
File pathFile = new File(realPath);
if(!pathFile.exists()){
pathFile.mkdirs();
}
for(MultipartFile f : file){
f.transferTo(new File(realPath+"/"+f.getOriginalFilename()));
}
ModelAndView view = new ModelAndView();
view.setViewName("/success");
System.out.println("----------------");
return view;
}
4、編寫頁面表單
注意enctype=”multipart/form-data”以及
<form action="user/upload.abc" enctype="multipart/form-data" method="post">
<input type="text" name="name">
<input type="file" name="file">
<input type="file" name="file">
<input type="submit" value="上傳">
</form>
5、 MultipartFile中的方法
使用getSize()方法獲得文件長度,以此決定允許上傳的文件大小。
使用isEmpty()方法判斷上傳文件是否爲空文件,以此決定是否拒絕空文件。
使用getInputStream()方法將文件讀取爲java.io.InputStream流對象。
使用getContentType()方法獲得文件類型,以此決定允許上傳的文件類型。
使用transferTo(dest)方法將上傳文件寫到服務器上指定的文件。