概述
文件上傳是Java Web項目中的經常使用功能,未達到上傳文件的目的,需進行下列步驟:
1.表單的method屬性必須設置爲POST。
2.表單的enctype屬性必須設置爲multipart/form-data(瀏覽器纔會使用二進制流的方式來處理表單數據)。
3.pom文件中添加commons-fileupload依賴。
4.在Spring MVC的配置文件中配置MultipartResolver。
文件上傳示例
示例程序依然在前文的SpringMVCProject項目中完成(前文鏈接:https://www.jianshu.com/p/fde4557c527c)。
文件上傳頁面的背景圖片
在項目的webapp目錄下建立文件夾「images」,放入一張背景圖片,命名爲「backImage.jpg」:css
POM文件配置
在項目的pom文件中添加commons-fileupload依賴:
html
1 <dependency> 2 <groupId>commons-fileupload</groupId> 3 <artifactId>commons-fileupload</artifactId> 4 <version>1.4</version> 5 </dependency>
1 <%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html" charset="UTF-8"> 5 <title>uploadfile</title> 6 <style type="text/css"> 7 body{ 8 background-image: url(images/backImage.jpg); 9 background-size:cover; 10 } 11 </style> 12 </head> 13 <body> 14 <center> 15 <h3>文件上傳頁面</h3> 16 <br> 17 <form action="upload" method="post" enctype="multipart/form-data"> 18 <table> 19 <tr> 20 <td><label>文件信息:</label></td> 21 <td><input type="text" name="information"></td> 22 </tr> 23 <tr> 24 <td><label>選擇文件:</label></td> 25 <td><input type="file" name="file"></td> 26 </tr> 27 <tr> 28 <td><input type="submit" id="submit" value="上傳"></td> 29 </tr> 30 </table> 31 </form> 32 </center> 33 </body> 34 </html>
1 @Controller 2 public class UploadFileController { 3 @RequestMapping(value = "/upload", method = RequestMethod.POST) 4 @ResponseBody 5 public String upload(HttpServletRequest request, @RequestParam("information") String information, @RequestParam("file") MultipartFile file) throws IOException { 6 if (!file.isEmpty()) { 7 String path = request.getServletContext().getRealPath("file"); 8 String fileName = file.getOriginalFilename(); 9 File uploadFile = new File(path, fileName); 10 if (!uploadFile.getParentFile().exists()) { 11 uploadFile.getParentFile().mkdirs(); 12 } 13 file.transferTo(new File(path + File.separator + fileName)); 14 return "Success!"; 15 } else { 16 return "No File!"; 17 } 18 } 19 }
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 7 8 <!--spring能夠自動掃描base-package設置的包或子包下的java類,若是掃描到有spring相關注解的類,則註冊爲spring的bean--> 9 <context:component-scan base-package="com.snow.dcl.controller"/> 10 11 <mvc:annotation-driven /> 12 <mvc:default-servlet-handler/> 13 14 <!--視圖解析器--> 15 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 16 <property name="prefix"> 17 <value>/WEB-INF/content/</value> 18 </property> 19 <property name="suffix"> 20 <value>.jsp</value> 21 </property> 22 </bean> 23 24 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 25 <!-- 上傳文件大小20M之內 --> 26 <property name="maxUploadSize"> 27 <value>20971520</value> 28 </property> 29 <!-- 請求的編碼格式,必須與JSP文件中的pageEncoding屬性值相同 --> 30 <property name="defaultEncoding"> 31 <value>UTF-8</value> 32 </property> 33 </bean> 34 35 </beans> 36
注意:
1. 配置MultipartResolver的同時還添加了mvc的命名空間。
2. 添加<mvc:default-servlet-handler/>配置用來處理背景圖片等靜態資源。
3. 添加<mvc:default-servlet-handler/>配置就必須添加<mvc:annotation-driven />不然會出現@Controller註解沒法解析的狀況,致使請求時候都沒有匹配的處理請求類,就都去<mvc:default-servlet-handler/>即default servlet處理了,靜態資源(如圖片資源)由於沒有對應的Controller則會被default servlet處理。
測試
啓動TomcatServer,啓動完成後,打開瀏覽器輸入:http://localhost:8080/uploadfile.jsp,訪問成功。
不添加任何文件,直接提交:
添加測試用的txt文件:
提交:
查看項目目錄,在target目錄的項目目錄下會生成file目錄,上傳的文件在file目錄中:
至此,文件上傳功能記錄完畢。前端