SpringBoot将本地目录作为资源目录实现访问

本文介绍了一种在Java项目中管理图片资源的方法,通过在项目根目录下创建指定文件夹来存储上传的图片,并利用UUID确保文件名唯一性。同时,文章还详细解释了如何在不同操作系统中正确配置资源路径。

由于项目涉及到了大量图片资源,即图片上传功能,总不能上传图片至Jar包内部吧,也不可能存储到数据库中,所以可以在jar包外设置指定资源路径用来保存图片及其他资源。

创建资源目录

首先需要在项目的根路径创建资源目录存放图片
获取项目跟目录:System.getProperty("user.dir");
例:D:\item\stereoscopic-garage
*stereoscopic-garage为我的项目名*
String FILE_PATH_PREFIX = "static/images/photos";
//获取项目根路径
String path = System.getProperty("user.dir");
File upload = new File(path, FILE_PATH_PREFIX);

if (!upload.exists()) {
    log.info("目录不存在,开始创建: " + upload.toString());
    if (!upload.mkdirs()) {
        throw new VerifyException("文件上传失败");
    }
}
//保证文件名不重复
UUID fileName = UUID.randomUUID();
if (!file.isEmpty()){
    log.info("开始保存");
    //保存到文件服务器
    file.transferTo(new File(upload, fileName + FILE_PATH_SUFFIX));
}else {
    throw new NullPointerException("文件不能为空");
}

添加一个静态资源映射

需要注意的是:

Window上的路径以" \ "来分隔
Linux中是以" / "来分隔的
所以对于项目中有路径配置的地方都需要更改!(如图片上传路径、图片获取的路径)
@Configuration
public class MyConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        String property = System.getProperty("user.dir");
        File file = new File(property, "static");
        String path = "file:" + file + File.separator;
        //File.separator根据系统自动获取路径是反斜杠还是正斜杠
        registry.addResourceHandler("/**").addResourceLocations("classpath:META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/", path);
    }
}

在这里插入图片描述

图片资源访问成功
在这里插入图片描述
在这里插入图片描述

<think>好的,我现在需要帮助用户在Spring Boot应用中配置本地磁盘上的静态资源访问。根据用户提供的引用内容,我需要先整理出相关的配置方法,并确保回答符合用户的要求。 首先,用户的问题是关于如何在Spring Boot中配置控制器来访问本地文件系统的静态资源。根据引用[4],配置类方式可以通过实现WebMvcConfigurer接口,并重写addResourceHandlers方法。这里需要详细说明如何编写配置类,设置资源处理器和位置。例如,使用registry.addResourceHandler指定URL路径,然后用addResourceLocations指向本地目录。要注意的是,本地路径需要使用file:前缀,并且可能需要使用绝对路径。 接着,引用[3]提到路径冲突的问题,所以需要提醒用户避免将静态资源的URL路径与Controller的请求映射路径重复。例如,如果静态资源放在/static/upload下,Controller不应该有相同的路径映射,否则会导致冲突。 然后,引用[1]和[2]展示了静态资源的默认存放位置和访问方式,但用户的需求是访问本地磁盘,而非项目内部的静态资源。因此,需要强调配置外部目录的方法,而不是默认的static目录。同时,可能需要提到application.properties中的配置方式作为补充,但根据引用[4],配置类方式更灵活,所以应作为主要解决方案。 另外,需要注意权限问题,确保应用有权限访问本地目录。例如,在Windows或Linux系统中,路径的写法可能不同,要给出示例。还要提醒用户路径末尾的斜杠,避免因格式问题导致资源无法加载。 最后,生成相关问题时要围绕配置方法、路径处理、冲突解决和最佳实践展开,确保覆盖用户可能遇到的后续疑问。</think>在Spring Boot中配置访问本地磁盘静态资源,可通过WebMvcConfigurer接口实现资源映射配置。以下是具体实现步骤和注意事项: ### 一、配置本地静态资源访问 **1. 创建配置类** ```java @Configuration public class FileStorageConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 映射本地磁盘路径到虚拟路径 registry.addResourceHandler("/local-files/**") .addResourceLocations("file:/opt/uploads/"); // Windows系统示例(注意转义符) registry.addResourceHandler("/win-files/**") .addResourceLocations("file:D:\\myfiles\\"); } } ``` **关键说明**: - `addResourceHandler`定义虚拟路径(如`/local-files/**`) - `addResourceLocations`指定本地绝对路径,需以`file:`开头 - 支持同时配置多个资源映射[^4] **2. 验证配置** 访问测试地址: ``` http://localhost:8080/local-files/example.jpg ``` 该请求会映射到服务器本地的`/opt/uploads/example.jpg`文件 ### 二、注意事项 1. **路径冲突预防**: - 避免Controller的@RequestMapping路径与资源映射路径重叠[^3] - 推荐采用`/custom-prefix/**`格式定义虚拟路径 2. **权限设置**: - 确保应用进程有目标目录的读取权限 - Linux系统建议配置目录权限为755 3. **路径格式规范**: - Linux路径示例:`file:/home/user/docs/` - Windows路径示例:`file:D:/project/assets/`(正斜杠) 4. **开发环境热加载**: 在application.properties中添加: ```properties spring.resources.cache.period=0 spring.resources.chain.cache=false ``` ### 三、扩展配置方式 **application.properties配置(不推荐复杂场景)**: ```properties spring.web.resources.static-locations=classpath:/static/,file:/opt/uploads/ ``` 此方式会覆盖默认的静态资源位置,慎用[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值