Spring MVC的文件上傳

概述
文件上傳是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

backImage

POM文件配置
在項目的pom文件中添加commons-fileupload依賴:
html

  1 <dependency>
  2     <groupId>commons-fileupload</groupId>
  3     <artifactId>commons-fileupload</artifactId>
  4     <version>1.4</version>
  5 </dependency>

建立JSP文件
在項目的webapp目錄下建立uploadfile.jsp文件,編寫以下程序:
  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>

建立Controller類
在com.snow.dcl.controller包下建立UploadFileController類文件,編寫以下程序:
  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 }

在該控制器程序中使用了@ResponseBody註解,能夠給前端返回「文件上傳成功!」和「未添加上傳文件!」的字符串數據,不然在Spring MVC的配置文件springmvc-servlet.xml中配置的是返回視圖jsp文件。
springmvc-servlet.xml文件配置
在springmvc-servlet.xml文件中配置MultipartResolver,配置文件增長內容以下:
  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,訪問成功。
Spring MVC上傳01
不添加任何文件,直接提交:
Spring MVC上傳03
添加測試用的txt文件:
Spring MVC上傳02
提交:
Spring MVC上傳04
查看項目目錄,在target目錄的項目目錄下會生成file目錄,上傳的文件在file目錄中:
Spring MVC上傳05
至此,文件上傳功能記錄完畢。前端

相關文章
相關標籤/搜索