一、配置文件:
SpringMVC 用的是 的MultipartFile來進行文件上傳 所以我們首先要配置MultipartResolver:用於處理表單中的file
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="10485760000"></property>
<property name="maxInMemorySize" value="40960"></property>
<property name="uploadTempDir" value="fileUpload"></property>
</bean>
其中屬性詳解:
defaultEncoding=”UTF-8” 是請求的編碼格式,默認爲iso-8859-1
maxUploadSize=”5400000” 是上傳文件的大小,單位爲字節
uploadTempDir=”fileUpload/temp” 爲上傳文件的臨時路徑
二、創建一個簡單的上傳表單:
<body>
<h2>文件上傳實例</h2>
<form action="${pageContext.request.contextPath}/update/fileUpdate.action"
method="post" enctype="multipart/form-data">
文件:<input type="file" name="file1">
<input type="submit" value="提交">
</form>
</body>
注意要在form標籤中加上enctype=”multipart/form-data”表示該表單是要處理文件的,這是最基本的東西,很多人會忘記然而當上傳出錯後則去找程序的錯誤,卻忘了這一點
三、編寫上傳控制類
1、創建一個控制類: FileUploadController和一個返回結果的頁面list.jsp
2、編寫提交表單的action。
3、使用SpringMVC註解RequestParam來指定表單中的file參數;
4、指定一個用於保存文件的web項目路徑
5、通過MultipartFile的transferTo(File Xxx)這個方法來轉存文件到指定的路徑。
@RequestMapping("/Upload/")
@Controller
public class TestExportExcel {
@RequestMapping("fileUpload")
public ModelAndView importExcel(@RequestParam("file1") MultipartFile file,
HttpServletRequest request){
ModelAndView modelAndView = new ModelAndView();
// 判斷文件是否爲空
if (!file.isEmpty()) {
// 文件保存路徑
String filePath = request.getSession().getServletContext().getRealPath("/") + "fileUpload/"
+ file.getOriginalFilename();
// 轉存文件
try {
file.transferTo(new File(filePath));
modelAndView.setViewName("/return.jsp");
modelAndView.addObject("result", file.getOriginalFilename()+"上傳成功");
} catch (Exception e) {
modelAndView.addObject("result", file.getOriginalFilename()+"上傳失敗");
e.printStackTrace();
}
}
return modelAndView;
}
}
WebContent下:return.jsp只有一句代碼:
${result}
MultipartFile類常用的一些方法:
String getContentType()//獲取文件MIME類型
InputStream getInputStream()//後去文件流
String getName() //獲取表單中文件組件的名字
String getOriginalFilename() //獲取上傳文件的原名
long getSize() //獲取文件的字節大小,單位byte
boolean isEmpty() //是否爲空
void transferTo(File dest) //保存到一個目標文件中。