SpringMVC之文件上傳

1、環境搭建

一、新建項目

(1)在」 main」目錄下新建」 java」與」 resources」目錄

(2)將」 java」設置爲」Sources Root」

(3)將」 resources」設置爲」Resources Root」

(4)在」java」目錄下新建」StudyProject.Controller」包

(5)在」StudyProject.Controller」包下新建」TestController」類

(6)在」resources」目錄下新建」Spring.xml」

(7)在」WEB-INF」目錄下新建文件夾」Pages」

(8)在「Pages」目錄下新建」success.jsp」

二、總體框架

三、TestController類和success.jsp

(1)TestController類

原代碼html

1 package StudyProject.Controller; 2 
3 public class TestController { 4 }

編寫前端控制器及路徑前端

修改後java

1 package StudyProject.Controller; 2 
3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 
6 @Controller 7 @RequestMapping(path="/testController") 8 public class TestController { 9 }

(2)success.jsp

原代碼程序員

1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <html>
3 <head>
4     <title>Title</title>
5 </head>
6 <body>
7 
8 </body>
9 </html>

添加一個跳轉成功提示web

修改後spring

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
 2 <html>
 3 <head>
 4     <title>Title</title>
 5 </head>
 6 <body>
 7 
 8     <h3>跳轉成功</h3>
 9 
10 </body>
11 </html>

四、配置文件

(1)pom.xml

原代碼apache

1   <properties>
2     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3     <maven.compiler.source>1.7</maven.compiler.source>
4     <maven.compiler.target>1.7</maven.compiler.target>
5   </properties>

修改版本,而且加上spring.versionapi

修改後spring-mvc

1   <properties>
2     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3     <maven.compiler.source>14.0.1</maven.compiler.source>
4     <maven.compiler.target>14.0.1</maven.compiler.target>
5     <spring.version>5.0.2.RELEASE</spring.version>
6   </properties>

原代碼tomcat

1   <dependencies>
2     <dependency>
3       <groupId>junit</groupId>
4       <artifactId>junit</artifactId>
5       <version>4.11</version>
6       <scope>test</scope>
7     </dependency>
8   </dependencies>

在<dependencies></dependency>里加入座標依賴,原有的能夠刪去

修改後

 1   <!-- 導入座標依賴 -->
 2   <dependencies>
 3     <dependency>
 4       <groupId>org.springframework</groupId>
 5       <artifactId>spring-context</artifactId>
 6       <version>${spring.version}</version>
 7     </dependency>
 8     <dependency>
 9       <groupId>org.springframework</groupId>
10       <artifactId>spring-web</artifactId>
11       <version>${spring.version}</version>
12     </dependency>
13     <dependency>
14       <groupId>org.springframework</groupId>
15       <artifactId>spring-webmvc</artifactId>
16       <version>${spring.version}</version>
17     </dependency>
18     <dependency>
19       <groupId>javax.servlet</groupId>
20       <artifactId>servlet-api</artifactId>
21       <version>2.5</version>
22       <scope>provided</scope>
23     </dependency>
24     <dependency>
25       <groupId>javax.servlet.jsp</groupId>
26       <artifactId>jsp-api</artifactId>
27       <version>2.0</version>
28       <scope>provided</scope>
29     </dependency>
30   </dependencies>

(2)web.xml

原代碼

1 <!DOCTYPE web-app PUBLIC 2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 3  "http://java.sun.com/dtd/web-app_2_3.dtd" >
4 
5 <web-app>
6   <display-name>Archetype Created Web Application</display-name>
7 </web-app>

配置前段控制器與解決中文亂碼的過濾器

修改後

 1 <!DOCTYPE web-app PUBLIC  2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  3  "http://java.sun.com/dtd/web-app_2_3.dtd" >
 4 
 5 <web-app>
 6   <display-name>Archetype Created Web Application</display-name>
 7 
 8   <!--配置解決中文亂碼的過濾器-->
 9   <filter>
10     <filter-name>characterEncodingFilter</filter-name>
11     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
12     <init-param>
13       <param-name>encoding</param-name>
14       <param-value>UTF-8</param-value>
15     </init-param>
16   </filter>
17   <filter-mapping>
18   <filter-name>characterEncodingFilter</filter-name>
19   <url-pattern>/*</url-pattern>
20   </filter-mapping>
21 
22   <!-- 配置前端控制器 -->
23   <servlet>
24     <servlet-name>dispatcherServlet</servlet-name>
25     <!-- 建立前端控制器DispatcherServlet對象 -->
26     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
27     <!-- 使前端控制器初始化時讀取Spring.xml文件建立Spring核心容器 -->
28     <init-param>
29       <param-name>contextConfigLocation</param-name>
30       <param-value>classpath*:Spring.xml</param-value>
31     </init-param>
32     <!-- 設置該Servlet的優先級別爲最高,使之最先建立(在應用啓動時就加載並初始化這個servlet -->
33     <load-on-startup>1</load-on-startup>
34   </servlet>
35   <servlet-mapping>
36     <servlet-name>dispatcherServlet</servlet-name>
37     <url-pattern>/</url-pattern>
38   </servlet-mapping>
39 
40 </web-app>

(3)Spring.xml

原代碼

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  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
5 
6 </beans>

配置spring建立容器時掃描的包、視圖解析器、開啓spring註解支持等

修改後

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3  xmlns:mvc="http://www.springframework.org/schema/mvc"
 4  xmlns:context="http://www.springframework.org/schema/context"
 5  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 6  xsi:schemaLocation="  7  http://www.springframework.org/schema/beans  8  http://www.springframework.org/schema/beans/spring-beans.xsd  9  http://www.springframework.org/schema/mvc 10  http://www.springframework.org/schema/mvc/spring-mvc.xsd 11  http://www.springframework.org/schema/context 12  http://www.springframework.org/schema/context/spring-context.xsd">
13 
14     <!-- 配置spring建立容器時掃描的包 -->
15     <context:component-scan base-package="StudyProject.Controller"></context:component-scan>
16 
17     <!-- 配置視圖解析器,用於解析項目跳轉到的文件的位置 -->
18     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
19         <!-- 尋找包的路徑 -->
20         <property name="prefix" value="/WEB-INF/pages/"></property>
21         <!-- 尋找文件的後綴名 -->
22         <property name="suffix" value=".jsp"></property>
23     </bean>
24 
25     <!-- 配置spring開啓註解mvc的支持 -->
26     <mvc:annotation-driven></mvc:annotation-driven>
27 </beans>

五、Tomcat服務器(本地已建SpringMVC項目,Spring_MVC項目僅作示範)

點擊」Add Configurations」配置Tomcat服務器

2、文件上傳

一、傳統方式上傳文件

(1)TestController類

在控制器內部新增"testMethod_Traditional"方法

 1 @Controller  2 @RequestMapping(path="/testController")  3 public class TestController {  4 
 5     @RequestMapping(path="/testMethod_Traditional")  6     public String testMethod_Traditional(HttpServletRequest request) throws Exception {  7         System.out.println("執行了testMethod_Traditional方法");  8 
 9         //獲取文件上傳目錄
10         String path = request.getSession().getServletContext().getRealPath("/uploads"); 11         //建立file對象
12         File file = new File(path); 13         //判斷路徑是否存在,若不存在,建立該路徑
14         if (!file.exists()) { 15  file.mkdir(); 16  } 17 
18         //建立磁盤文件項工廠
19         DiskFileItemFactory factory = new DiskFileItemFactory(); 20         ServletFileUpload fileUpload = new ServletFileUpload(factory); 21         //解析request對象
22         List<FileItem> list = fileUpload.parseRequest(request); 23         //遍歷
24         for (FileItem fileItem:list) { 25             // 判斷文件項是普通字段,仍是上傳的文件
26             if (fileItem.isFormField()) { 27                 //普通字段
28             } else { 29                 //上傳文件項 30                 //獲取上傳文件項的名稱
31                 String filename = fileItem.getName(); 32                 String uuid = UUID.randomUUID().toString().replaceAll("-","").toUpperCase(); 33                 filename = uuid+"_"+filename; 34                 //上傳文件
35                 fileItem.write(new File(file,filename)); 36                 //刪除臨時文件
37  fileItem.delete(); 38  } 39  } 40 
41         System.out.println("上傳路徑:"+path); 42         System.out.println("上傳成功"); 43         return "success"; 44  } 45 
46 }

(2)index.jsp

添加form表單

1     <form action="testController/testMethod_Traditional" method="post" enctype="multipart/form-data">
2         圖片 <input type="file" name="uploadfile_Traditional"> <br>
3         <input type="submit" value="傳統方式上傳文件">
4     </form>

(3)結果演示

點擊服務器"SpringMVC"右側的運行按鈕

選擇文件而後進行上傳

點擊上傳按鈕後,執行成功,跳到"success.jsp"界面顯示跳轉成功

在IDEA輸出臺查看文件路徑

按照路徑查看文件是否上傳成功

二、SpringMVC方式上傳文件

(1)pom.xml添加文件上傳座標依賴

在pom.xml文件<dependencies></dependencies>內添加文件上傳座標依賴

 1     <!-- 文件上傳 -->
 2     <dependency>
 3       <groupId>commons-fileupload</groupId>
 4       <artifactId>commons-fileupload</artifactId>
 5       <version>1.3.1</version>
 6     </dependency>
 7     <dependency>
 8       <groupId>commons-io</groupId>
 9       <artifactId>commons-io</artifactId>
10       <version>2.4</version>
11     </dependency>

(2)Spring.xml配置文件解析器對象

在Spring.xml文件<beans></beans>內配置文件解析器對象

1     <!-- 配置文件解析器對象 -->
2     <bean id="multipartResolver"
3  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
4         <property name="defaultEncoding" value="utf-8"></property>
5         <property name="maxUploadSize" value="10485760"></property>
6     </bean>

(3)TestController類

在控制器內部新增"testMethod_SpringMVC"方法

 1 @Controller  2 @RequestMapping(path="/testController")  3 public class TestController {  4 
 5     @RequestMapping(path="/testMethod_SpringMVC")  6     public String testMethod_SpringMVC(HttpServletRequest request,MultipartFile uploadfile_SpringMVC) throws Exception {  7         System.out.println("執行了testMethod_SpringMVC方法");  8 
 9         //獲取文件上傳目錄
10         String path = request.getSession().getServletContext().getRealPath("/uploads"); 11         //建立file對象
12         File file = new File(path); 13         //判斷路徑是否存在,若不存在,建立該路徑
14         if (!file.exists()) { 15  file.mkdir(); 16  } 17 
18         //獲取到上傳文件的名稱
19         String filename = uploadfile_SpringMVC.getOriginalFilename(); 20         String uuid = UUID.randomUUID().toString().replaceAll("-","").toUpperCase(); 21         filename = uuid+"_"+filename; 22         //上傳文件
23         uploadfile_SpringMVC.transferTo(new File(file,filename)); 24 
25         System.out.println("上傳路徑:"+path); 26         System.out.println("上傳成功"); 27         return "success"; 28  } 29 
30 }

(4)index.jsp

添加form表單

1     <form action="testController/testMethod_SpringMVC" method="post" enctype="multipart/form-data">
2         圖片 <input type="file" name="uploadfile_SpringMVC"> <br>
3         <input type="submit" value="SpringMVC上傳文件">
4     </form>

(5)結果演示

點擊服務器"SpringMVC"右側的運行按鈕

選擇文件而後進行上傳

點擊上傳按鈕後,執行成功,跳到"success.jsp"界面顯示跳轉成功

在IDEA輸出臺查看文件路徑

按照路徑查看文件是否上傳成功

三、跨服務器上傳文件

(1)新建」FileuploadServer」項目(過程再也不演示)

不須要創建」java」」resources」等文件夾,只須要」index.jsp」顯示界面便可

「index.jsp」代碼

1 <html>
2 <body>
3 <h2>Hello! FileuploadServer</h2>
4 </body>
5 </html>

(2)配置服務器

點擊」Edit Configurations」配置Tomcat服務器

爲與」SpringMVC」服務器區分,修改」HTTP port」爲」9090」,修改」JMX port」爲」1090」

(3)pom.xml添加跨服務器文件上傳座標依賴

 1     <!-- 跨服務器文件上傳 -->
 2     <dependency>
 3       <groupId>com.sun.jersey</groupId>
 4       <artifactId>jersey-core</artifactId>
 5       <version>1.18.1</version>
 6     </dependency>
 7     <dependency>
 8       <groupId>com.sun.jersey</groupId>
 9       <artifactId>jersey-client</artifactId>
10       <version>1.18.1</version>
11     </dependency>

(4)TestController類

在控制器內部新增"testMethod_AcrossServer"方法

 1 @Controller  2 @RequestMapping(path="/testController")  3 public class TestController {  4 
 5     @RequestMapping(path="/testMethod_AcrossServer")  6     public String testMethod_AcrossServer(MultipartFile uploadfile_AcrossServer) throws Exception {  7         System.out.println("執行了testMethod_AcrossServer方法");  8 
 9         //定義上傳文件服務器路徑
10         String path = "http://localhost:9090/FileuploadServer_war_exploded/uploads/"; 11 
12         //獲取到上傳文件的名稱
13         String filename = uploadfile_AcrossServer.getOriginalFilename(); 14         String uuid = UUID.randomUUID().toString().replaceAll("-","").toUpperCase(); 15         filename = uuid+"_"+filename; 16 
17         //建立客戶端對象
18         Client client = Client.create(); 19         //鏈接圖片服務器
20         WebResource webResourcer = client.resource(path+filename); 21         //向圖片服務器上傳文件
22  webResourcer.put(uploadfile_AcrossServer.getBytes()); 23 
24         System.out.println("上傳路徑:"+path); 25         System.out.println("上傳成功"); 26         return "success"; 27  } 28 
29 }

(5)index.jsp

添加form表單

1     <form action="testController/testMethod_AcrossServer" method="post" enctype="multipart/form-data">
2         圖片 <input type="file" name="uploadfile_AcrossServer"> <br>
3         <input type="submit" value="跨服務器上傳文件">
4     </form>

(6)結果演示

運行"FileuploadServer"服務器

運行"SpringMVC"服務器

在"FileuploadServer"項目的"target/FileuploadServer/"目錄下新建文件夾"uploads"

選擇文件並進行上傳,上傳成功跳轉到"success.jsp"

查看IDEA輸出信息

此時路徑應爲"FileuploadServer/target/FileuploadServer/uploads",在路徑下查看文件是否上傳成功

3、注意事項

一、傳統方式上傳文件

傳統方式上傳時不須要在Spring.xml內配置文件解析器對象使用該方法時須要註釋掉該對象,不然會形成運行成功但上傳文件爲空。

1     <!-- 配置文件解析器對象 -->
2     <bean id="multipartResolver"
3  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
4         <property name="defaultEncoding" value="utf-8"></property>
5         <property name="maxUploadSize" value="10485760"></property>
6     </bean>

即便用傳統方式上傳文件時,應當註釋掉該段代碼

二、跨服務器上傳文件

(1)須要修改Tomcat服務器的web.xml配置文件的權限,增長能夠寫入的權限,不然會出現405的錯誤。如我所下載的Tomcat-9.0.36的web.xml路徑爲"apache-tomcat-9.0.36/conf/web.xml"

此時IEDA輸出爲

web.xml文件修改處原內容

應修改成

修改後的代碼

 1     <servlet>
 2         <servlet-name>default</servlet-name>
 3         <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
 4         <init-param>
 5             <param-name>debug</param-name>
 6             <param-value>0</param-value>
 7         </init-param>
 8         <init-param>
 9             <param-name>listings</param-name>
10             <param-value>false</param-value>
11         </init-param>
12         <init-param>
13             <param-name>readonly</param-name>
14             <param-value>false</param-value>
15         </init-param>
16         <load-on-startup>1</load-on-startup>
17     </servlet>

(2)在跨服務器上傳文件時,須要在"FileuploadServer"項目的"target/FileuploadServer/"目錄下新建文件夾"uploads",不然會出現409的錯誤

4、完整代碼

一、pom.xml(SpringMVC)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5   <modelVersion>4.0.0</modelVersion>
 6 
 7   <groupId>org.example</groupId>
 8   <artifactId>SpringMVC</artifactId>
 9   <version>1.0-SNAPSHOT</version>
 10   <packaging>war</packaging>
 11 
 12   <name>SpringMVC Maven Webapp</name>
 13   <!-- FIXME change it to the project's website -->
 14   <url>http://www.example.com</url>
 15 
 16   <properties>
 17     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 18     <maven.compiler.source>14.0.1</maven.compiler.source>
 19     <maven.compiler.target>14.0.1</maven.compiler.target>
 20     <spring.version>5.0.2.RELEASE</spring.version>
 21   </properties>
 22 
 23   <!-- 導入座標依賴 -->
 24   <dependencies>
 25     <dependency>
 26       <groupId>org.springframework</groupId>
 27       <artifactId>spring-context</artifactId>
 28       <version>${spring.version}</version>
 29     </dependency>
 30     <dependency>
 31       <groupId>org.springframework</groupId>
 32       <artifactId>spring-web</artifactId>
 33       <version>${spring.version}</version>
 34     </dependency>
 35     <dependency>
 36       <groupId>org.springframework</groupId>
 37       <artifactId>spring-webmvc</artifactId>
 38       <version>${spring.version}</version>
 39     </dependency>
 40     <dependency>
 41       <groupId>javax.servlet</groupId>
 42       <artifactId>servlet-api</artifactId>
 43       <version>2.5</version>
 44       <scope>provided</scope>
 45     </dependency>
 46     <dependency>
 47       <groupId>javax.servlet.jsp</groupId>
 48       <artifactId>jsp-api</artifactId>
 49       <version>2.0</version>
 50       <scope>provided</scope>
 51     </dependency>
 52 
 53     <!-- 文件上傳(採用傳統方式上傳時需註釋掉該部分) -->
 54     <dependency>
 55       <groupId>commons-fileupload</groupId>
 56       <artifactId>commons-fileupload</artifactId>
 57       <version>1.3.1</version>
 58     </dependency>
 59     <dependency>
 60       <groupId>commons-io</groupId>
 61       <artifactId>commons-io</artifactId>
 62       <version>2.4</version>
 63     </dependency>
 64 
 65     <!-- 跨服務器文件上傳 -->
 66     <dependency>
 67       <groupId>com.sun.jersey</groupId>
 68       <artifactId>jersey-core</artifactId>
 69       <version>1.18.1</version>
 70     </dependency>
 71     <dependency>
 72       <groupId>com.sun.jersey</groupId>
 73       <artifactId>jersey-client</artifactId>
 74       <version>1.18.1</version>
 75     </dependency>
 76 
 77   </dependencies>
 78 
 79   <build>
 80     <finalName>SpringMVC</finalName>
 81     <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
 82       <plugins>
 83         <plugin>
 84           <artifactId>maven-clean-plugin</artifactId>
 85           <version>3.1.0</version>
 86         </plugin>
 87         <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
 88         <plugin>
 89           <artifactId>maven-resources-plugin</artifactId>
 90           <version>3.0.2</version>
 91         </plugin>
 92         <plugin>
 93           <artifactId>maven-compiler-plugin</artifactId>
 94           <version>3.8.0</version>
 95         </plugin>
 96         <plugin>
 97           <artifactId>maven-surefire-plugin</artifactId>
 98           <version>2.22.1</version>
 99         </plugin>
100         <plugin>
101           <artifactId>maven-war-plugin</artifactId>
102           <version>3.2.2</version>
103         </plugin>
104         <plugin>
105           <artifactId>maven-install-plugin</artifactId>
106           <version>2.5.2</version>
107         </plugin>
108         <plugin>
109           <artifactId>maven-deploy-plugin</artifactId>
110           <version>2.8.2</version>
111         </plugin>
112       </plugins>
113     </pluginManagement>
114   </build>
115 </project>

二、web.xml(SpringMVC)

 1 <!DOCTYPE web-app PUBLIC  2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  3  "http://java.sun.com/dtd/web-app_2_3.dtd" >
 4 
 5 <web-app>
 6   <display-name>Archetype Created Web Application</display-name>
 7 
 8   <!--配置解決中文亂碼的過濾器-->
 9   <filter>
10     <filter-name>characterEncodingFilter</filter-name>
11     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
12     <init-param>
13       <param-name>encoding</param-name>
14       <param-value>UTF-8</param-value>
15     </init-param>
16   </filter>
17   <filter-mapping>
18   <filter-name>characterEncodingFilter</filter-name>
19   <url-pattern>/*</url-pattern>
20   </filter-mapping>
21 
22   <!-- 配置前端控制器 -->
23   <servlet>
24     <servlet-name>dispatcherServlet</servlet-name>
25     <!-- 建立前端控制器DispatcherServlet對象 -->
26     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
27     <!-- 使前端控制器初始化時讀取Spring.xml文件建立Spring核心容器 -->
28     <init-param>
29       <param-name>contextConfigLocation</param-name>
30       <param-value>classpath*:Spring.xml</param-value>
31     </init-param>
32     <!-- 設置該Servlet的優先級別爲最高,使之最先建立(在應用啓動時就加載並初始化這個servlet -->
33     <load-on-startup>1</load-on-startup>
34   </servlet>
35   <servlet-mapping>
36     <servlet-name>dispatcherServlet</servlet-name>
37     <url-pattern>/</url-pattern>
38   </servlet-mapping>
39 
40 </web-app>

三、Spring.xml(SpringMVC)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3  xmlns:mvc="http://www.springframework.org/schema/mvc"
 4  xmlns:context="http://www.springframework.org/schema/context"
 5  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 6  xsi:schemaLocation="  7  http://www.springframework.org/schema/beans  8  http://www.springframework.org/schema/beans/spring-beans.xsd  9  http://www.springframework.org/schema/mvc 10  http://www.springframework.org/schema/mvc/spring-mvc.xsd 11  http://www.springframework.org/schema/context 12  http://www.springframework.org/schema/context/spring-context.xsd">
13 
14     <!-- 配置spring建立容器時掃描的包 -->
15     <context:component-scan base-package="StudyProject.Controller"></context:component-scan>
16 
17     <!-- 配置視圖解析器,用於解析項目跳轉到的文件的位置 -->
18     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
19         <!-- 尋找包的路徑 -->
20         <property name="prefix" value="/WEB-INF/pages/"></property>
21         <!-- 尋找文件的後綴名 -->
22         <property name="suffix" value=".jsp"></property>
23     </bean>
24 
25     <!-- 配置文件解析器對象 -->
26     <bean id="multipartResolver"
27  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
28         <property name="defaultEncoding" value="utf-8"></property>
29         <property name="maxUploadSize" value="10485760"></property>
30     </bean>
31     
32     <!-- 配置spring開啓註解mvc的支持 -->
33     <mvc:annotation-driven></mvc:annotation-driven>
34 </beans>

四、TestController類(SpringMVC)

 1 package StudyProject.Controller;  2 
 3 import com.sun.jersey.api.client.Client;  4 import com.sun.jersey.api.client.WebResource;  5 import org.apache.commons.fileupload.FileItem;  6 import org.apache.commons.fileupload.disk.DiskFileItemFactory;  7 import org.apache.commons.fileupload.servlet.ServletFileUpload;  8 import org.springframework.stereotype.Controller;  9 import org.springframework.web.bind.annotation.RequestMapping;  10 import org.springframework.web.multipart.MultipartFile;  11 import javax.servlet.http.HttpServletRequest;  12 import java.io.File;  13 import java.util.List;  14 import java.util.UUID;  15 
 16 @Controller  17 @RequestMapping(path="/testController")  18 public class TestController {  19 
 20     @RequestMapping(path="/testMethod_Traditional")  21     public String testMethod_Traditional(HttpServletRequest request) throws Exception {  22         System.out.println("執行了testMethod_Traditional方法");  23 
 24         //獲取文件上傳目錄
 25         String path = request.getSession().getServletContext().getRealPath("/uploads");  26         //建立file對象
 27         File file = new File(path);  28         //判斷路徑是否存在,若不存在,建立該路徑
 29         if (!file.exists()) {  30  file.mkdir();  31  }  32 
 33         //建立磁盤文件項工廠
 34         DiskFileItemFactory factory = new DiskFileItemFactory();  35         ServletFileUpload fileUpload = new ServletFileUpload(factory);  36         //解析request對象
 37         List<FileItem> list = fileUpload.parseRequest(request);  38         //遍歷
 39         for (FileItem fileItem:list) {  40             // 判斷文件項是普通字段,仍是上傳的文件
 41             if (fileItem.isFormField()) {  42                 //普通字段
 43             } else {  44                 //上傳文件項  45                 //獲取上傳文件項的名稱
 46                 String filename = fileItem.getName();  47                 String uuid = UUID.randomUUID().toString().replaceAll("-","").toUpperCase();  48                 filename = uuid+"_"+filename;  49                 //上傳文件
 50                 fileItem.write(new File(file,filename));  51                 //刪除臨時文件
 52  fileItem.delete();  53  }  54  }  55 
 56         System.out.println("上傳路徑:"+path);  57         System.out.println("上傳成功");  58         return "success";  59  }  60 
 61     @RequestMapping(path="/testMethod_SpringMVC")  62     public String testMethod_SpringMVC(HttpServletRequest request,MultipartFile uploadfile_SpringMVC) throws Exception {  63         System.out.println("執行了testMethod_SpringMVC方法");  64 
 65         //獲取文件上傳目錄
 66         String path = request.getSession().getServletContext().getRealPath("/uploads");  67         //建立file對象
 68         File file = new File(path);  69         //判斷路徑是否存在,若不存在,建立該路徑
 70         if (!file.exists()) {  71  file.mkdir();  72  }  73 
 74         //獲取到上傳文件的名稱
 75         String filename = uploadfile_SpringMVC.getOriginalFilename();  76         String uuid = UUID.randomUUID().toString().replaceAll("-","").toUpperCase();  77         filename = uuid+"_"+filename;  78         //上傳文件
 79         uploadfile_SpringMVC.transferTo(new File(file,filename));  80 
 81         System.out.println("上傳路徑:"+path);  82         System.out.println("上傳成功");  83         return "success";  84  }  85 
 86     @RequestMapping(path="/testMethod_AcrossServer")  87     public String testMethod_AcrossServer(MultipartFile uploadfile_AcrossServer) throws Exception {  88         System.out.println("執行了testMethod_AcrossServer方法");  89 
 90         //定義上傳文件服務器路徑
 91         String path = "http://localhost:9090/FileuploadServer_war_exploded/uploads/";  92 
 93         //獲取到上傳文件的名稱
 94         String filename = uploadfile_AcrossServer.getOriginalFilename();  95         String uuid = UUID.randomUUID().toString().replaceAll("-","").toUpperCase();  96         filename = uuid+"_"+filename;  97 
 98         //建立客戶端對象
 99         Client client = Client.create(); 100         //鏈接圖片服務器
101         WebResource webResourcer = client.resource(path+filename); 102         //向圖片服務器上傳文件
103  webResourcer.put(uploadfile_AcrossServer.getBytes()); 104 
105         System.out.println("上傳路徑:"+path); 106         System.out.println("上傳成功"); 107         return "success"; 108  } 109 
110 }

五、index.jsp(SpringMVC)

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2 <html>
 3 <head>
 4     <title>Title</title>
 5 </head>
 6 <body>
 7 
 8     <form action="testController/testMethod_Traditional" method="post" enctype="multipart/form-data">
 9         圖片 <input type="file" name="uploadfile_Traditional"> <br>
10         <input type="submit" value="傳統方式上傳文件">
11     </form>
12 
13     <br><br><br>
14 
15     <form action="testController/testMethod_SpringMVC" method="post" enctype="multipart/form-data">
16         圖片 <input type="file" name="uploadfile_SpringMVC"> <br>
17         <input type="submit" value="SpringMVC上傳文件">
18     </form>
19 
20     <br><br><br>
21 
22     <form action="testController/testMethod_AcrossServer" method="post" enctype="multipart/form-data">
23         圖片 <input type="file" name="uploadfile_AcrossServer"> <br>
24         <input type="submit" value="跨服務器上傳文件">
25     </form>
26 
27 </body>
28 </html>

六、success.jsp(SpringMVC)

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
 2 <html>
 3 <head>
 4     <title>Title</title>
 5 </head>
 6 <body>
 7 
 8     <h3>跳轉成功</h3>
 9 
10 </body>
11 </html>

七、index.jsp(FileuploadServer)

1 <html>
2 <body>
3 <h2>Hello! FileuploadServer</h2>
4 </body>
5 </html>

學習資料來源:黑馬程序員

相關文章
相關標籤/搜索