這兩天個人項目,需要上傳文件功能,我后臺使用的
SpringMVC
框架進行請求轉發,在此整理下功能實現過程。
想要上傳文件到后臺,先要通過前臺表單提交文件。
<form action="<%=request.getContextPath()%>/saveArticleToDB"
method="post" enctype="multipart/form-data" role="form">
<div class="form-group">
<label for="article_file">內容文件</label> <input type="file"
id="article_file" name="contentFile">
</div>
<div>
<input type="submit" class="btn btn-default" value="保存">
</div>
</form>
特別注意,在
form
標簽中加上了enctype="multipart/form-data"
屬性,設置這個屬性,才可以向服務器上傳文件。
如果不寫這個屬性,默認的傳輸格式是enctype="application/x-www-form-urlencoded"
。使用
SpringMVC
框架的一個好處是,我們提交表單,只要提交數據的標簽name
屬性對應上后臺對應的實體類字段名,就可以直接在后臺接受實體類,實體類中包含著提交的信息。
但是,如果現在提交表單,你會發現在后臺的Controller
中接收的值全部是null,因為enctype="multipart/form-data"
改變了傳輸細節,后臺接受自然也和默認時不同。
所以在請求轉發配置文件中,需要配置
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>
這樣SpringMVC
就可以正確映射表單數據到后臺實體類了。
這還需要引入兩個jar包commons-fileupload-1.3.1.jar
和commons-io-2.2.jar
,如果使用Maven
直接引入依賴:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
- 表單的數據能正常接收了,還需要接收上傳的文件。
在后臺代碼中,傳入參數再加上MultipartFile
,這就是發送到服務器的文件,比如:
public ModelAndView articleList(MultipartFile contentFile, HttpServletRequest request,Article article) {}
其中MultipartFile
參數名稱,也要和前臺name
對應,這個類里有各種操作文件的方法,根據需要自行查詢API即可。
如此就完成了上傳文件到后臺的功能。
<br /><br />