SpringBoot --web 應用開發之文件上傳

前言

上一章節,咱們講解了利用模版引擎實現前端頁面渲染,從而實現動態網頁的功能,同時也提出了兼容jsp項目的解決方案。既然開始講解web開發了,咱們就接着繼續往web這個方向繼續吧。一般,咱們在作web開發時,遇見諸如附件上傳、圖片頭像上傳等文件的上傳需求也是再正常不過的。那麼,咱們今天咱們就來說講SpringBoot文件上傳的功能的實現。html

一點知識

咱們知道,前端上傳文件時,最多見的就是利用Form表單的方式進行文件的上傳功能了,上傳時設置enctypemultipart/form-data,或者直接利用jquery的一些上傳插件實現。然後端,在jsp+Servlet時代,最多見的就是利用smartupload上傳組件。而在SpringMvc時代,其提供了MultipartFile封裝類,它包含了文件的二進制流和文件相關屬性(文件名、大小等)。因此在SpringBoot中也是使用此封裝類進行文件上傳的。前端

文件上傳

上面說到,springmvc中是利用MultipartFile進行文件上傳的。而MultipartFile是個接口類,它的實現類有CommonsMultipartFileStandardMultipartFile。這裏簡單說明下:java


StandardMultipartFile:是基於j2ee自帶的文件上傳進行解析,即便用Servlet3.0提供的javax.servlet.http.Part上傳方式。jquery

CommonsMultipartFile:是基於apache fileupload的解析。web


因此正常咱們使用時,也是無需關係底層是以哪一種方式進行文件上傳處理的,SpringMvc會給咱們作相應的轉換的。spring

這裏演示下兩種方式。apache

基於J2EE自帶方式

這種方式下,其實無需任何配置。只需按正常的web開發項目集成便可。後端

0.pom依賴api

1
2
3
4
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
</dependency>

1.配置文件(可選),正常只須要設置上傳的文件大小springboot

1
2
3
4
# 最大支持文件大小 即單個文件大小
spring.http.multipart.max-file-size=1Mb
# 最大支持請求大小 即一次性上傳的總文件大小
spring.http.multipart.max-request-size=10Mb

其餘的配置,可直接參考官網的配置信息:https://docs.spring.io/spring-boot/docs/1.5.15.RELEASE/reference/htmlsingle/#common-application-properties
其餘配置

2.編寫控制類

FileUploadController.java:

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
@RestController
@Slf4j
public class FileUploadController {
 
     @PostMapping ( "/upload" )
     public String upload( @RequestParam MultipartFile file) throws IllegalStateException, IOException {
         // 判斷是否爲空文件
         if (file.isEmpty()) {
             return "上傳文件不能爲空" ;
         }
         // 文件類型
         String contentType = file.getContentType();
         // springmvc處理後的文件名
         String fileName = file.getName();
         log.info( "服務器文件名:" + fileName);
         // 原文件名即上傳的文件名
         String origFileName = file.getOriginalFilename();
         // 文件大小
         Long fileSize = file.getSize();
 
         // 保存文件
         // 可使用二進制流直接保存
         // 這裏直接使用transferTo
         file.transferTo( new File( "d://okong-" + origFileName));
 
         return String.format(file.getClass().getName() + "方式文件上傳成功!\n文件名:%s,文件類型:%s,文件大小:%s" , origFileName, contentType,fileSize);
 
     }
}

3.啓動應用,而後使用postman進行api調用便可,固然你們也能夠利用上節課學習的模版引擎技術,編寫一個文件上傳的表單。

J2EE方式

基於FileUpload包方式

原來在Springmvc時,咱們一般都是使用CommonsMultipartResolver進行文件上傳處理類配置的,好比最大上傳文件大小的。而基於在SpringBoot下,略微有些不一樣。

0.pom加入fileUpload依賴

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

1.編寫一個配置類
FileUploadConfig.java

1
2
3
4
5
6
7
8
@Configuration
public class FileUploadConfig {
     
     @Bean
     public MultipartResolver custom() {
         return new CommonsMultipartResolver();
     }
}

2.因爲spring.http.multipart.enabled默認是true,因此加載類MultipartAutoConfiguration會自動加載,這樣fileUpload就會異常了。因此正常有兩種方式:在啓動類下將此配置類不進行自動加載

1
@EnableAutoConfiguration (exclude = {MultipartAutoConfiguration. class })

另外一種就是,直接設置spring.http.multipart.enabledfalse
本示例爲了兩種可切換,使用的是第二種。

3.編寫控制層:這個和J2EE的方式是同樣的,這裏就不貼了。
4.啓動應用,使用postman訪問下:

fileupload

相關資料

  1. https://docs.spring.io/spring-boot/docs/1.5.15.RELEASE/reference/htmlsingle/

總結

本章節主要是講解了兩種方式來進行文件的上傳功能。這裏就簡單的介紹了兩種方式的相關配置和一些注意點,像文件大小過大時進行異常捕獲,你們可使用全局異常類來進行捕獲,只需捕獲MultipartException異常便可,這裏就示例了,相對來講比較簡單了。

最後

目前互聯網上不少大佬都有SpringBoot系列教程,若有雷同,請多多包涵了。本文是做者在電腦前一字一句敲的,每一步都是實踐的。若文中有所錯誤之處,還望提出,謝謝。

原文地址:http://www.importnew.com/29795.html

相關文章
相關標籤/搜索