【 <二> 丹方改良:Spring 時代的 JavaWeb】之 Spring Boot 中的文件上傳與下載:實現文件管理功能

???<前文回顧>

點擊此處查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link

<今日更新>

一、開篇整活兒

今兒個咱嘮嘮 Spring Boot 里頭的文件上傳與下載。這玩意兒吧,說大不大,說小不小,整好了是錦上添花,整不好就是火上澆油。你要是剛入門,那可得悠著點兒,別一上來就整得自己“翻車”了。

二、文件上傳與下載是啥玩意兒?

文件上傳與下載是 Web 開發里頭的一個常見需求,說白了就是讓用戶能把文件傳到服務器上,或者從服務器上下載文件。Spring Boot 里頭默認就集成了文件上傳與下載的支持,用起來賊方便。

1. 文件上傳的核心概念

文件上傳里頭有幾個核心概念:MultipartFileMultipartResolverFile

  • MultipartFile:就是上傳的文件對象,里頭包含了文件的內容、文件名、文件類型啥的。
  • MultipartResolver:就是解析上傳文件的組件,Spring Boot 里頭默認用的是?StandardServletMultipartResolver。
  • File:就是 Java 里頭的文件對象,用來表示文件。

2. 文件下載的核心概念

文件下載里頭有幾個核心概念:ResourceHttpServletResponseFileSystemResource

  • Resource:就是 Spring 里頭的資源對象,用來表示文件。
  • HttpServletResponse:就是 HTTP 響應對象,用來設置響應頭、響應體啥的。
  • FileSystemResource:就是 Spring 里頭的文件系統資源對象,用來表示文件。

三、Spring Boot 實現文件上傳

Spring Boot 里頭實現文件上傳很簡單,只要加個配置,配個控制器就行了。

1. 添加配置

首先,你得在?application.properties?里頭加個文件上傳的配置。

Properties Code

spring.servlet.multipart.enabled=true

spring.servlet.multipart.max-file-size=10MB

spring.servlet.multipart.max-request-size=50MB

這段代碼里頭,spring.servlet.multipart.enabled?是啟用文件上傳,spring.servlet.multipart.max-file-size?是單個文件的最大大小,spring.servlet.multipart.max-request-size?是請求的最大大小。

2. 實現文件上傳

然后,你可以在控制器里頭實現文件上傳。

Java Code

@RestController

@RequestMapping("/files")

public class FileController {

????@PostMapping("/upload")

????public String uploadFile(@RequestParam("file") MultipartFile file) {

????????if (file.isEmpty()) {

????????????return "文件不能為空";

????????}

????????try {

????????????File dest = new File("uploads/" + file.getOriginalFilename());

????????????file.transferTo(dest);

????????????return "文件上傳成功";

????????} catch (IOException e) {

????????????e.printStackTrace();

????????????return "文件上傳失敗";

????????}

????}

}

這段代碼里頭,uploadFile?方法用?@RequestParam("file")?注解接收上傳的文件,然后用?transferTo?方法把文件保存到服務器上。

四、Spring Boot 實現文件下載

Spring Boot 里頭實現文件下載很簡單,只要加個控制器就行了。

1. 實現文件下載

首先,你可以在控制器里頭實現文件下載。

Java Code

@RestController

@RequestMapping("/files")

public class FileController {

????@GetMapping("/download/{filename}")

????public ResponseEntity<Resource> downloadFile(@PathVariable String filename) {

????????try {

????????????File file = new File("uploads/" + filename);

????????????Resource resource = new FileSystemResource(file);

????????????return ResponseEntity.ok()

????????????????????.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")

????????????????????.body(resource);

????????} catch (Exception e) {

????????????e.printStackTrace();

????????????return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();

????????}

????}

}

這段代碼里頭,downloadFile?方法用?@PathVariable?注解接收文件名,然后用?FileSystemResource?把文件作為資源返回。

五、Spring Boot 實現文件管理的坑點

1. 文件大小限制

Spring Boot 里頭,文件大小限制沒配好,那文件上傳就不起作用了。你要是沒配好,那可得好好檢查檢查。

2. 文件保存路徑

Spring Boot 里頭,文件保存路徑沒配好,那文件上傳就不起作用了。你要是沒配好,那可得好好檢查檢查。

3. 文件下載響應頭

Spring Boot 里頭,文件下載響應頭沒配好,那文件下載就不起作用了。你要是沒配好,那可得好好檢查檢查。

專有名詞解釋

  1. MultipartFile:上傳的文件對象,里頭包含了文件的內容、文件名、文件類型啥的。
  2. MultipartResolver:解析上傳文件的組件,Spring Boot 里頭默認用的是?StandardServletMultipartResolver。
  3. File:Java 里頭的文件對象,用來表示文件。
  4. Resource:Spring 里頭的資源對象,用來表示文件。
  5. HttpServletResponse:HTTP 響應對象,用來設置響應頭、響應體啥的。
  6. FileSystemResource:Spring 里頭的文件系統資源對象,用來表示文件。
  7. HttpHeaders.CONTENT_DISPOSITION:HTTP 響應頭,用來設置文件下載的響應頭。

寫在最后

身為一個中古程序猿,我有很多自己想做的事情,比如埋頭苦干手搓一個低代碼數據庫設計平臺(目前只針對寫java的朋友),已經在找朋友內測了,比如很喜歡幫身邊的朋友看看簡歷,講講面試技巧,畢竟工作這么多年,也做到過高管,有很多面人經歷,意見還算有用,大家基本都能拿到想要的offer...

我深刻意識到,能自由做自己喜歡的事情是有多么不容易,又是多么有成就感。所以我拉了兩三個志同道合的好友,開了一間公司,繼續朝著“自由”的目標前進。

當下呢,我們希望有更多的朋友能夠參與到產品的測試中來,體驗并且給出更好的建議。未來可能會在博客po更多關于我們產品的內容,包括使用場景、說明、課程等,希望能對大家有所幫助。

另外,想整個花活兒,每天花個1-2小時,來幫助我素未謀面的老朋友們看看簡歷,提提意見啥的,純屬為愛發電。我在線時間不固定,但是不要米,咱就別要自行車兒了唄~如果您有興趣,可以點擊文章底部卡片一起交流(人工回復,比較慢,請擔待)。

最后,請大家持續關注我們的博客,未來還有很多欄目,一起發掘~!

(來呀~↓↓↓~老鐵)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75384.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75384.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75384.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

搜索算法------DFS練習2

1. 題目 2. 思路和題解 從題目中可以看出&#xff0c;如果一個格子上有雨水&#xff0c;那么就可以流到周圍比他高度低的單元格&#xff0c;如果單元格和海洋相鄰&#xff0c;那么雨水也會流入海洋。總而言之一句話就是水從高處流向低處。從這里的流向可以聯想到深度優先搜索這…

[python] 正則表達式

1.分割str s"1-2--3---4" are.findall(r\d|[-],s) # 輸出&#xff1a;[1, -, 2, --, 3, ---, 4]s"-4(2(3)" # ? 表示 - 可以出現0次或1次 # \d 表示匹配一個或多個連續數字 # \D 表示匹配非數字字符 sre.findall(r-?\d|\D,s) # 輸出&#xff1a;[-4, (,…

定制化管理系統與通用管理系統,誰更勝一籌?

一、定制化管理系統與通用管理系統的定義與特點 定制化管理系統 定制化管理系統是根據企業的具體業務需求和流程進行個性化開發的軟件系統。它能夠深度貼合企業的管理需求&#xff0c;提供高度靈活的解決方案。其特點包括&#xff1a; 高度適應性&#xff1a;能夠精準匹配企業…

gitee 配置git上傳

Git入門&#xff1f;查看 幫助 , Visual Studio / TortoiseGit / Eclipse / Xcode 下如何連接本站, 如何導入倉庫 簡易的命令行入門教程: Git 全局設置: 以 176fuguM2項目為例 git config --global user.name "墮落圣甲蟲" git config --global user.email "11…

SpringBoot+Vue 中 WebSocket 的使用

WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議&#xff0c;它使得客戶端和服務器之間可以進行實時數據傳輸&#xff0c;打破了傳統 HTTP 協議請求 - 響應模式的限制。 下面我會展示在 SpringBoot Vue 中&#xff0c;使用WebSocket進行前后端通信。 后端 1、引入 j…

STM32 FATFS - 在SDIO的SD卡中運行fatfs

參考文章 STM32CubeMX | SD Card FATFS - 知乎 [STM32F4]基于F407的硬件移植Free RTOSFATFS&#xff08;SDIO&#xff09;_freertosfatfs-CSDN博客 例程地址&#xff1a;STM32FatFS: 基于stm32的fatfs例程&#xff0c;配合博客文章 基于梁山派天空星開發板&#xff0c;STM3…

Java 進化之路:從 Java 8 到 Java 21 的重要新特性

Java 進化之路&#xff1a;從 Java 8 到 Java 21 的重要新特性 開篇介紹 在軟件開發領域&#xff0c;Java 作為一門歷史悠久且廣泛應用的編程語言&#xff0c;始終保持著其核心競爭力和持續創新能力。自 Java 8 發布以來&#xff0c;Java 經歷了一系列重要版本更新&#xff0…

Reactor 事件流 vs. Spring 事件 (ApplicationEvent)

Reactor 事件流 vs. Spring 事件 ApplicationEvent Reactor 事件流 vs. Spring 事件 (ApplicationEvent)1?? 核心區別2?? Spring 事件 (ApplicationEvent)? 示例&#xff1a;Spring 事件發布 & 監聽1?? 定義事件2?? 發布事件3?? 監聽事件&#x1f539; 進階&…

JVM生產環境問題定位與解決實戰(六):總結篇——問題定位思路與工具選擇策略

本文已收錄于《JVM生產環境問題定位與解決實戰》專欄&#xff0c;完整系列見文末目錄 引言 在前五篇文章中&#xff0c;我們深入探討了JVM生產環境問題定位與解決的實戰技巧&#xff0c;從基礎的jps、jmap、jstat、jstack、jcmd等工具&#xff0c;到JConsole、VisualVM、MAT的…

【5090d】配置運行和微調大模型所需基礎環境【一】

RuntimeError: Failed to import transformers.integrations.bitsandbytes because of the following error (look up to see its traceback): No module named triton.ops 原因&#xff1a;是因為在導入 transformers.integrations.bitsandbytes 時缺少必要的依賴項 triton.op…

華為交換綜合實驗——VRRP、MSTP、Eth-trunk、NAT、DHCP等技術應用

一、實驗拓撲 二、實驗需求 1,內網Ip地址使用172.16.0.0/16分配 2,sw1和SW2之間互為備份 3, VRRP/STP/VLAN/Eth-trunk均使用 4,所有Pc均通過DHCP獲取IP地址 5,ISP只能配置IP地址 6,所有電腦可以正常訪問IsP路由器環回 三、需求分析 1、設備連接需求 二層交換機&#xff08;LS…

DeepSeek 開源的 3FS 如何?

DeepSeek 3FS&#xff08;Fire-Flyer File System&#xff09;是一款由深度求索&#xff08;DeepSeek&#xff09;于2025年2月28日開源的高性能并行文件系統&#xff0c;專為人工智能訓練和推理任務設計。以下從多個維度詳細解析其核心特性、技術架構、應用場景及行業影響&…

Qt實現HTTP GET/POST/PUT/DELETE請求

引言 在現代應用程序開發中&#xff0c;HTTP請求是與服務器交互的核心方式。Qt作為跨平臺的C框架&#xff0c;提供了強大的網絡模塊&#xff08;QNetworkAccessManager&#xff09;&#xff0c;支持GET、POST、PUT、DELETE等HTTP方法。本文將手把手教你如何用Qt實現這些請求&a…

echarts+HTML 繪制3d地圖,加載散點+散點點擊事件

首先&#xff0c;確保了解如何本地引入ECharts庫。 html 文件中引入本地 echarts.min.js 和 echarts-gl.min.js。 可以通過官網下載或npm安裝&#xff0c;但這里直接下載JS文件更簡單。需要引入 echarts.js 和 echarts-gl.js&#xff0c;因為3D地圖需要GL模塊。 接下來是HTM…

深度剖析 MySQL 與 Redis 緩存一致性:理論、方案與實戰

在當今的互聯網應用開發中&#xff0c;MySQL 作為可靠的關系型數據庫&#xff0c;與 Redis 這一高性能的緩存系統常常協同工作。然而&#xff0c;如何確保它們之間的數據一致性&#xff0c;成為了開發者們面臨的重要挑戰。本文將深入探討 MySQL 與 Redis 緩存一致性的相關問題&…

DAO 類的職責與設計原則

1. DAO 的核心職責 DAO&#xff08;Data Access Object&#xff0c;數據訪問對象&#xff09;的主要職責是封裝對數據的訪問邏輯&#xff0c;但它與純粹的數據實體類&#xff08;如 DTO、POJO&#xff09;不同&#xff0c;也與 Service 業務邏輯層不同。 DAO 應該做什么&…

【Kubernetes】如何使用 kubeadm 搭建 Kubernetes 集群?還有哪些部署工具?

使用 kubeadm 搭建 Kubernetes 集群是一個比較常見的方式。kubeadm 是 Kubernetes 提供的一個命令行工具&#xff0c;它可以簡化 Kubernetes 集群的初始化和管理。下面是使用 kubeadm 搭建 Kubernetes 集群的基本步驟&#xff1a; 1. 準備工作 確保你的環境中有兩臺或更多的機…

Pycharm(十二)列表練習題

一、門和鑰匙 小X在一片大陸上探險&#xff0c;有一天他發現了一個洞穴&#xff0c;洞穴里面有n道門&#xff0c; 打開每道門都需要對應的鑰匙&#xff0c;編號為i的鑰匙能用于打開第i道門&#xff0c; 而且只有在打開了第i(i>1)道門之后&#xff0c;才能打開第i1道門&#…

在未歸一化的線性回歸模型中,特征的尺度差異可能導致模型對特征重要性的誤判

通過數學公式來更清晰地說明歸一化對模型的影響&#xff0c;以及它如何改變特征的重要性評估。 1. 未歸一化的情況 假設我們有一個線性回歸模型&#xff1a; y β 0 β 1 x 1 β 2 x 2 ? y \beta_0 \beta_1 x_1 \beta_2 x_2 \epsilon yβ0?β1?x1?β2?x2?? 其…

JS—頁面渲染:1分鐘掌握頁面渲染過程

個人博客&#xff1a;haichenyi.com。感謝關注 一. 目錄 一–目錄二–頁面渲染過程三–DOM樹和渲染樹 二. 頁面渲染過程 瀏覽器的渲染過程可以分解為以下幾個關鍵步驟 2.1 解析HTML&#xff0c;形成DOM樹 瀏覽器從上往下解析HTML文檔&#xff0c;將標簽轉成DOM節點&#…