應用敏捷與安全如何兼存?
697
2025-03-31
概述
客戶端編程
MultipartFile接口
利用Commons FileUpload上傳文件
Domain類
控制器
配置文件
JSP頁面
部署及測試
源碼
概述
Servlet出現之前,文件上傳的開發比較困難,主要涉及在服務端解析原始的HTTP響應。 03年Apache發布了開源的Commons FileUplaod組件,極大地提高了文件上傳的開發效率。
經過很多年,Servlet的設計人員才意識到文件上傳的重要性,最終文件上傳還是成了Servlet3的內置特性。
因此,在SpringMVC中處理文件上傳主要有兩種方法
利用Apache Commons FileUpload組件
利用Servlet3.0及其更高版本的內置支持
本篇博文我們探討利用Apache Commons FileUpload組件來實現文件的上傳
客戶端編程
為了上傳文件,必須將HTML表格的enctype屬性設置為 multipart/form-data
如下
1
2
3
4
表格中必須包含類型為file的一個input元素,它會顯示成一個按鈕,點擊時會打開一個對話框,用來選擇文件。
HTML之前,如果要上傳多個文件,需要使用多個input元素。 但是HTML5中,通過input元素中一如多個multiple屬性,使得多個文件的上傳更加簡單。 在HTML5中編寫以下任意一行代碼,遍可以生成一個按鈕選擇多個文件
1
2
3
MultipartFile接口
上傳到Spring MVC應用程序中的文件會被包裝在一個MultipartFile對象中,我們僅僅用類型為MultipartFile的屬性編寫一個domain類即可
接口方法如下
利用Commons FileUpload上傳文件
只有實現了Servlet3.0及其更高版本規范的Servlet容器,才支持文件上傳。 對于低于Servlet3.0的容器,則需要使用Apache Commons FileUpload組件
maven依賴如下
1
2
3
4
5
我們使用1.3.1的版本
Domain類
我們的dimain類 Product,有一個類型為List< MultipartFile >的images屬性
package com.artisan.domain; import java.io.Serializable; import java.util.List; import javax.validation.constraints.Size; import org.hibernate.validator.constraints.NotBlank; import org.springframework.web.multipart.MultipartFile; public class Product implements Serializable { private static final long serialVersionUID = -5379168879247929742L; @NotBlank @Size(min = 1, max = 10) private String name; private String description; private float price; //在Domain類中加入MultipartFile類型的屬性,用來保存上傳的文件 private List
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
控制器
控制器有兩個處理請求的方法,inputProduct方法向瀏覽器返回一個產品表單,saveProduct方法將上傳的文件保存到指定目錄下
package com.artisan.controller; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile; import com.artisan.domain.Product; @Controller @RequestMapping("/product") public class ProductController { private static final Logger logger = Logger.getLogger(ProductController.class); @RequestMapping(value="/product_input",method=RequestMethod.GET) public String inputProduct(Model model){ model.addAttribute("product",new Product()); return "ProductForm"; } @RequestMapping(value="/product_save",method=RequestMethod.POST) public String saveProduct(HttpServletRequest servletRequest,@ModelAttribute Product product, BindingResult bindingResult, Model model) { List
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
保存文件只需要在MultipartFile調用transferTo方法即可,非常便捷簡單。
配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
利用multipartResolver bean中的各種屬性設置合理的文件上傳限制條件。
JSP頁面
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Following files are uploaded successfully.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
部署及測試
看到目標目錄D盤:
上傳成功。
源碼
代碼已提交到github
https://github.com/yangshangwei/SpringMvcTutorialArtisan
Apache MVC Servlet Spring
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。