一、環境搭建
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”
2、整體框架
3、TestController類和success.jsp
(1)TestController類
原代碼
1 package StudyProject.Controller;
2
3 public class TestController {
4 }
編寫前端控制器及路徑
修改后
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>
添加一個跳轉成功提示
修改后
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>
4、配置文件
(1)pom.xml
原代碼
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.version
修改后
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>
原代碼
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>
5、Tomcat服務器(本地已建SpringMVC項目,Spring_MVC項目僅做示範)
點擊”Add Configurations”配置Tomcat服務器
二、文件上傳
1、傳統方式上傳文件
(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輸出台查看文件路徑
按照路徑查看文件是否上傳成功
2、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輸出台查看文件路徑
按照路徑查看文件是否上傳成功
3、跨服務器上傳文件
(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”,在路徑下查看文件是否上傳成功
三、注意事項
1、傳統方式上傳文件
傳統方式上傳時不需要在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>
即使用傳統方式上傳文件時,應當註釋掉該段代碼
2、跨服務器上傳文件
(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的錯誤
四、完整代碼
1、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>
2、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>
3、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>
4、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 }
5、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>
6、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>
7、index.jsp(FileuploadServer)
1 <html>
2 <body>
3 <h2>Hello! FileuploadServer</h2>
4 </body>
5 </html>
學習資料來源:黑馬程序員
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整
※南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!
※教你寫出一流的銷售文案?
※超省錢租車方案