WebMvcConfigurer 的 addResourceLocations

在 Spring Boot 的 addResourceLocations 方法中,file: 是一個 URL 前綴,用于指示資源的位置是本地文件系統路徑。以下是詳細解釋:


一、file: 的作用

file: 是 Java 中用于表示本地文件系統的 URL 前綴。它告訴 Spring Boot,資源的位置是本地磁盤上的某個目錄,而不是類路徑(classpath:)或其他位置。


二、為什么需要 file:

在 Spring Boot 中,addResourceLocations 方法需要明確的資源位置格式。file: 前綴用于區分以下幾種常見的資源位置:

  1. 本地文件系統路徑file:/path/to/directory/
  2. 類路徑資源classpath:/static/
  3. HTTP/HTTPS 資源https://example.com/

如果不加 file:,Spring Boot 會默認將路徑解析為類路徑資源,從而導致無法正確找到文件。


三、示例說明

假設上傳的文件存儲在 uploads/avatars/ 目錄下,以下是幾種資源位置的寫法:

  1. 絕對路徑(推薦):

    registry.addResourceHandler("/image/useravatar/**").addResourceLocations("file:/absolute/path/to/uploads/avatars/");
    
  2. 相對路徑

    registry.addResourceHandler("/image/useravatar/**").addResourceLocations("file:uploads/avatars/");
    

    ? 相對路徑是基于項目運行時的當前工作目錄(通常是項目的根目錄)。

  3. 類路徑資源

    registry.addResourceHandler("/image/useravatar/**").addResourceLocations("classpath:/static/avatars/");
    

四、file: 的注意事項

  1. 路徑分隔符
    ? 在 Windows 系統中,路徑分隔符為 \,但 file: 要求使用 /
    ? 示例:

    registry.addResourceHandler("/image/useravatar/**").addResourceLocations("file:C:/path/to/uploads/avatars/");
    
  2. 路徑結尾斜杠
    ? 確保路徑以 / 結尾,否則 Spring Boot 可能無法正確解析。

  3. 跨平臺兼容性
    ? 使用 Paths.get()System.getProperty("user.dir") 動態獲取路徑,確保跨平臺兼容性:

    String uploadDir = Paths.get("uploads/avatars").toAbsolutePath().toString();
    registry.addResourceHandler("/image/useravatar/**").addResourceLocations("file:" + uploadDir + "/");
    

五、完整示例

以下是一個完整的 Spring Boot 配置示例:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.nio.file.Paths;@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 獲取上傳目錄的絕對路徑String uploadDir = Paths.get("uploads/avatars").toAbsolutePath().toString();// 配置虛擬路徑映射registry.addResourceHandler("/image/useravatar/**").addResourceLocations("file:" + uploadDir + "/");}
}

六、總結

? file: 是用于指示本地文件系統路徑的 URL 前綴。
? 在 Spring Boot 中,使用 file: 可以確保資源位置被正確解析為本地磁盤路徑。
? 建議使用絕對路徑,并確保路徑以 / 結尾,以避免跨平臺兼容性問題。

如果仍有疑問,可以提供更多上下文信息,我會進一步協助!

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

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

相關文章

Spring Boot響應壓縮配置與優化

一、核心工作機制 1.1 自動協商觸發條件 Spring Boot的響應壓縮功能基于智能協商機制,需同時滿足以下條件方可觸發: 客戶端支持:請求頭包含Accept-Encoding: gzip/deflate數據量閾值:響應體大小超過預設值(默認2KB&…

JavaScript 改變 HTML 樣式

JavaScript 改變 HTML 樣式 JavaScript 改變 HTML 樣式的核心是通過操作 DOM 元素的 CSS 屬性或 類名 實現動態視覺效果。以下是具體方法與場景解析: 一、直接修改元素的 style 屬性 通過 DOM 元素的 style 屬性直接設置內聯樣式,優先級最高: // 修改單個樣式 document.…

【vue】vue + vant實現上傳圖片添加水印

目錄 方法1:使用HTML2canvas 說明: 優點 缺點 依賴安裝 方法2:使用canvas結合vant中組件 增加水印方法 在vue組件中使用 要點 方法1:使用HTML2canvas 使用html2canvas來處理水印的生成,需要就給水印元素轉換為…

【深度破解】爬蟲反反爬核心技術實踐:驗證碼識別與指紋偽裝

一、反爬技術體系全景圖 現代Web應用的常見反爬手段: mermaid: graph TDA[反爬體系] --> B[行為特征檢測]A --> C[驗證碼體系]A --> D[指紋追蹤]B --> B1[請求頻率]B --> B2[鼠標軌跡]B --> B3[頁面停留時間]C --> C1[圖形驗證碼…

deepseek(2)——deepseek 關鍵技術

1 Multi-Head Latent Attention (MLA) MLA的核心在于通過低秩聯合壓縮來減少注意力鍵(keys)和值(values)在推理過程中的緩存,從而提高推理效率: c t K V W D K V h t c_t^{KV} W^{DKV}h_t ctKV?WDKVht?…

OpenGL繪制文本

一:QPainter繪制 在 OpenGL 渲染的窗口中(如 QOpenGLWidget),通過 QPainter 直接繪制文本。Qt 會自動將 2D 內容(文本、圖形)與 OpenGL 內容合成。在paintGL()里面繪制,如果有其他紋理&#xf…

從零構建大語言模型全棧開發指南:第二部分:模型架構設計與實現-2.1.3前饋網絡(FFN)與激活函數(GELU)優化

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 2.1.3 前饋網絡(FFN)與激活函數(GELU)優化1. 前饋網絡(FFN)的架構設計與數學原理1.1 FFN在Transformer中的核心作用2. GELU激活函數的數學特性與優化2.1 GELU的數學形式與近似計算3. 逐行代碼實現…

React 中的錯誤邊界(Error Boundaries),如何使用它們捕獲組件錯誤

大白話React 中的錯誤邊界(Error Boundaries),如何使用它們捕獲組件錯誤 在 React 里,錯誤邊界就像是一個“小衛士”,專門負責在組件出現錯誤時挺身而出,避免整個應用因為一個小錯誤就崩潰掉。接下來我會詳…

數據庫DBA認證,選哪個認證合適?

從 Oracle、MySQL 到 云數據庫,結合市場認可度、考試難度及職業回報,為你精選高性價比認證。 一、企業級數據庫認證(傳統場景) 1. Oracle認證 認證等級考試代碼核心內容費用適合人群OCA1Z0-082SQL基礎、數據庫安裝與配置$245零基…

力扣刷題-熱題100題-第24題(c++、python)

234. 回文鏈表 - 力扣(LeetCode)https://leetcode.cn/problems/palindrome-linked-list/description/?envTypestudy-plan-v2&envIdtop-100-liked 常規法 數組是連續的存儲空間,可以根據索引到達任意位置,鏈表只能一個個的順…

調用通義千問實現語音合成并將合成的音頻通過揚聲器播放

1. 作者介紹 郭建東,男,西安工程大學電子信息學院,2024級研究生 研究方向:機器視覺與人工智能 電子郵件:1229963266qq.com 高金年,男,西安工程大學電子信息學院,2024級研究生&…

Ubuntu軟件包離線下載安裝

1、下載軟件包tcpd,并在/var/cache/apt/archives目錄中查看。 rooteducoder:~# apt-get install -d tcpd Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed:tcpd …

您的數據是如何出現在暗網上的?

暗網是互聯網上的一個隱秘角落,人們可以在那里保持匿名。暗網經常與深網混淆,但它們并不完全相同。 深網是指網絡上所有未被搜索引擎索引的內容。這包括電子郵件帳戶、私人數據庫和付費服務等。這并不違法,只是無法通過簡單的 Google 搜索找…

原型模式及其應用

引言 原型模式(Prototype Pattern)是一種創建型設計模式,它允許通過復制現有對象來創建新對象,而無需通過構造函數來創建。這種模式通過克隆現有對象來創建新對象,從而避免了復雜的初始化過程。本文將探討原型模式的好…

thinkphp漏洞再現

Thinkphp5x遠程命令執行及getshell 1、開環境 2、使用工具攻擊 開啟工具 輸入地址,點擊漏洞檢測 存在漏洞之后,選擇漏洞,執行命令 3、也可以執行遠程命令 執行命令 ?sindex/think\app/invokefunction&functioncall_user_func_array&…

Day16 -實例:Web利用郵箱被動繞過CDN拿真實ip

本想測試一下全局ping,剛好注冊的時候收到了郵件,剛好去做一下復現。 原理:主動讓對方站點給我們發郵件(注冊、修改密碼、訂閱推送等)我們查看郵件原文,原文里存在真實的郵件站點ip 特點:郵件…

vue3 數據監聽(watch、watchEffect)

1、watch 1.1基本使用 作用:數據監聽 語法: watch(監聽的數據, (改變后的數據, 改變前的數據) > { console.log(newVal, oldVal); }) 注意點:watch寫法上支持一個或者多個監聽源,這些監聽源必須只能是getter/effect函數…

網盤解析工具更新,解決了一些bug

解析工具v1.2.1版本更新,本次是小版本更新,修復了一些bug。 之前小伙伴反應的網盤進入文件后不能返回上一級,現在這個bug修復了,已經可以點擊了。 點擊資源后會回到資源那一級目錄,操作上是方便了不少。 增加了檢查自…

推薦1款簡潔、小巧的實用收音機軟件,支持手機和電腦

聊一聊 沒想到現在還有人喜歡聽廣播。 我一直以為聽廣播必須要用那種小廣播機才可以。 原來手機或電腦上也是可以的。 今天給大家分享一款可以在電腦和手機上聽廣播的軟件。 軟件介紹 龍卷風收音機 電臺廣播收音機分電腦和手機兩個版本。 電腦端無需安裝,下載…

六十天前端強化訓練之第三十一天之Webpack 基礎配置 大師級講解(接下來幾天給大家講講工具鏈與工程化)

歡迎來到編程星辰海的博客講解 看完可以給一個免費的三連嗎,謝謝大佬! 目錄 一、Webpack 核心概念解析 二、實戰:多資源打包配置(含完整代碼) 三、配置深度解析(重點部分說明) 四、效果演示…