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.mzph.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 核心概念解析 二、实战:多资源打包配置(含完整代码) 三、配置深度解析(重点部分说明) 四、效果演示…