Spring Boot 2.x基礎教程:實現檔案上傳
阿新 • • 發佈:2021-01-07
檔案上傳的功能實現是我們做Web應用時候最為常見的應用場景,比如:實現頭像的上傳,Excel檔案資料的匯入等功能,都需要我們先實現檔案的上傳,然後再做圖片的裁剪,excel資料的解析入庫等後續操作。
今天通過這篇文章,我們就來一起學習一下如何在Spring Boot中實現檔案的上傳。
## 動手試試
**第一步**:建立一個基礎的Spring Boot專案,如果還不會的話就先看看這篇[《快速入門》](https://blog.didispace.com/spring-boot-learning-21-1-1/)。
**第二步**:在`pom.xml`中引入模版引擎依賴:
```xml
```
你也可以選擇其他你熟悉的模版引擎,比如:Freemarker。
**第三步**:在`resources`目錄下,建立新目錄`templates`;在`templates`目錄下再建立一個檔案上傳的頁面`upload.html`,內容如下:
```html
``` **第四步**:建立檔案上傳的處理控制器,命名為UploadController ```java @Controller @Slf4j public class UploadController { @Value("${file.upload.path}") private String path; @GetMapping("/") public String uploadPage() { return "upload"; } @PostMapping("/upload") @ResponseBody public String create(@RequestPart MultipartFile file) throws IOException { String fileName = file.getOriginalFilename(); String filePath = path + fileName; File dest = new File(filePath); Files.copy(file.getInputStream(), dest.toPath()); return "Upload file success : " + dest.getAbsolutePath(); } } ``` 其中包含這幾個重要元素: 1. 成員變數`path`,通過`@Value`注入配置檔案中的`file.upload.path`屬性。這個配置用來定義檔案上傳後要儲存的目錄位置。 2. GET請求,路徑`/`,用於顯示`upload.html`這個檔案上傳頁面。 3. POST請求。路徑`/upload`,用於處理上傳的檔案,即:儲存到`file.upload.path`配置的路徑下面。 > 注意:這裡主要演示檔案上傳的主要流程,真實應用還有更多內容要考慮,比如:檔案上傳後的檔名處理(防止重名)、分散式情況下檔案上傳後如何共享訪問等。更高階的最後,我們後續文章繼續講。 **第五步**:編輯`application.properties`配置檔案 ```properties spring.servlet.multipart.max-file-size=2MB spring.servlet.multipart.max-request-size=2MB file.upload.path=/Users/didi/ ``` 前兩個引數用於限制了上傳請求和上傳檔案的大小,而`file.upload.path`是上面我們自己定義的用來儲存上傳檔案的路徑。 **更多本系列免費教程連載[「點選進入彙總目錄」](http://blog.didispace.com/spring-boot-learning-2x/)** ## 測試驗證 **第一步**:啟動Spring Boot應用,訪問`http://localhost:8080`,可以看到如下的檔案上傳頁面。 ![](https://img2020.cnblogs.com/other/626506/202101/626506-20210107104600513-126916926.png) **第二步**:選擇一個不大於2MB的檔案,點選“提交”按鈕,完成上傳。 如果上傳成功,將顯示類似下面的頁面: ![](https://img2020.cnblogs.com/other/626506/202101/626506-20210107104600703-1953081489.png) 你可以根據列印的檔案路徑去檢視檔案是否真的上傳了。 ## 程式碼示例 本文的相關例子可以檢視下面倉庫中的`chapter4-3`目錄: - Github:[https://github.com/dyc87112/SpringBoot-Learning/](https://github.com/dyc87112/SpringBoot-Learning/tree/master/2.x) - Gitee:[https://gitee.com/didispace/SpringBoot-Learning/](https://gitee.com/didispace/SpringBoot-Learning/tree/master/2.x) **如果您覺得本文不錯,歡迎`Star`支援,您的關注是我堅持的動力!** > 歡迎關注我的公眾號:程式猿DD,獲得獨家整理的免費學習資源助力你的Java學習之路!另每週贈書不
檔案上傳頁面
選擇要上傳的檔案:``` **第四步**:建立檔案上傳的處理控制器,命名為UploadController ```java @Controller @Slf4j public class UploadController { @Value("${file.upload.path}") private String path; @GetMapping("/") public String uploadPage() { return "upload"; } @PostMapping("/upload") @ResponseBody public String create(@RequestPart MultipartFile file) throws IOException { String fileName = file.getOriginalFilename(); String filePath = path + fileName; File dest = new File(filePath); Files.copy(file.getInputStream(), dest.toPath()); return "Upload file success : " + dest.getAbsolutePath(); } } ``` 其中包含這幾個重要元素: 1. 成員變數`path`,通過`@Value`注入配置檔案中的`file.upload.path`屬性。這個配置用來定義檔案上傳後要儲存的目錄位置。 2. GET請求,路徑`/`,用於顯示`upload.html`這個檔案上傳頁面。 3. POST請求。路徑`/upload`,用於處理上傳的檔案,即:儲存到`file.upload.path`配置的路徑下面。 > 注意:這裡主要演示檔案上傳的主要流程,真實應用還有更多內容要考慮,比如:檔案上傳後的檔名處理(防止重名)、分散式情況下檔案上傳後如何共享訪問等。更高階的最後,我們後續文章繼續講。 **第五步**:編輯`application.properties`配置檔案 ```properties spring.servlet.multipart.max-file-size=2MB spring.servlet.multipart.max-request-size=2MB file.upload.path=/Users/didi/ ``` 前兩個引數用於限制了上傳請求和上傳檔案的大小,而`file.upload.path`是上面我們自己定義的用來儲存上傳檔案的路徑。 **更多本系列免費教程連載[「點選進入彙總目錄」](http://blog.didispace.com/spring-boot-learning-2x/)** ## 測試驗證 **第一步**:啟動Spring Boot應用,訪問`http://localhost:8080`,可以看到如下的檔案上傳頁面。 ![](https://img2020.cnblogs.com/other/626506/202101/626506-20210107104600513-126916926.png) **第二步**:選擇一個不大於2MB的檔案,點選“提交”按鈕,完成上傳。 如果上傳成功,將顯示類似下面的頁面: ![](https://img2020.cnblogs.com/other/626506/202101/626506-20210107104600703-1953081489.png) 你可以根據列印的檔案路徑去檢視檔案是否真的上傳了。 ## 程式碼示例 本文的相關例子可以檢視下面倉庫中的`chapter4-3`目錄: - Github:[https://github.com/dyc87112/SpringBoot-Learning/](https://github.com/dyc87112/SpringBoot-Learning/tree/master/2.x) - Gitee:[https://gitee.com/didispace/SpringBoot-Learning/](https://gitee.com/didispace/SpringBoot-Learning/tree/master/2.x) **如果您覺得本文不錯,歡迎`Star`支援,您的關注是我堅持的動力!** > 歡迎關注我的公眾號:程式猿DD,獲得獨家整理的免費學習資源助力你的Java學習之路!另每週贈書不