springboot、springcloud之静态资源路径的配置

本文介绍如何在SpringBoot中配置静态资源路径,包括自定义上传文件的存储位置,并通过测试确保配置正确。

静态资源路径是指系统可以直接访问的路径,且路径下的所有文件均可被用户直接读取

在Springboot中默认的静态资源路径有:classpath:/METAINF/resources/classpath:/resources/classpath:/static/

classpath:/public/,从这里可以看出这里的静态资源路径都是在classpath中(也就是在项目路径下指定的这几个文件夹)

试想这样一种情况:一个网站有文件上传文件的功能,如果被上传的文件放在上述的那些文件夹中会有怎样的后果?

  • 网站数据与程序代码不能有效分离;
  • 当项目被打包成一个.jar文件部署时,再将上传的文件放到这个.jar文件中是有多么低的效率;
  • 网站数据的备份将会很痛苦。

此时可能最佳的解决办法是将静态资源路径设置到磁盘的基本个目录。

Springboot中可以直接在配置文件中覆盖默认的静态资源路径的配置信息:

  • application.properties配置文件如下:
server.port=1122

web.upload-path=D:/temp/study13/

spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,\
  classpath:/static/,classpath:/public/,file:${web.upload-path}

注意:web.upload-path这个属于自定义的属性,指定了一个路径,注意要以/结尾;

spring.mvc.static-path-pattern=/**表示所有的访问都经过静态资源路径;

spring.resources.static-locations在这里配置静态资源路径,前面说了这里的配置是覆盖默认配置,所以需要将默认的也加上否则staticpublic等这些路径将不能被当作静态资源路径,在这个最末尾的file:${web.upload-path}之所有要加file:是因为指定的是一个具体的硬盘路径,其他的使用classpath指的是系统环境变量

  • 编写测试类上传文件
package com.zslin;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.FileCopyUtils;

import java.io.File;

/**
 * Created by 钟述林 393156105@qq.com on 2016/10/24 0:44.
 */
@SpringBootTest
@RunWith(SpringRunner.class)
public class FileTest {

    @Value("${web.upload-path}")
    private String path;

    /** 文件上传测试 */
    @Test
    public void uploadTest() throws Exception {
        File f = new File("D:/pic.jpg");
        FileCopyUtils.copy(f, new File(path+"/1.jpg"));
    }
}

注意:这里将D:/pic.jpg上传到配置的静态资源路径下,下面再写一个测试方法来遍历此路径下的所有文件。

@Test
public void listFilesTest() {
    File file = new File(path);
    for(File f : file.listFiles()) {
        System.out.println("fileName : "+f.getName());
    }
}

可以到得结果:

fileName : 1.jpg

说明文件已上传成功,静态资源路径也配置成功。

  • 浏览器方式验证

由于前面已经在静态资源路径中上传了一个名为1.jpg的图片,也使用server.port=1122设置了端口号为1122,所以可以通过浏览器打开:http://localhost:1122/1.jpg访问到刚刚上传的图片。

转载地址:http://blog.youkuaiyun.com/kilua_way/article/details/54601195


### 如何在 Spring Cloud 项目中配置项目路径 #### 配置静态资源路径 为了使应用程序能够找到并加载静态资源,可以在 `application.properties` 或者 `application.yml` 文件中指定静态资源的位置。默认情况下,Spring Boot会自动扫描以下位置的静态资源: - classpath:/META-INF/resources/ - classpath:/resources/ - classpath:/static/ - classpath:/public/ 如果希望自定义这些路径,在 `application.properties` 中可以这样设置[^1]: ```properties spring.resources.static-locations=classpath:/custom-static/,file:/var/www/custom-static/ ``` 对于 YAML 格式的配置文件,则应如下编写: ```yaml spring: resources: static-locations: "classpath:/custom-static/,file:/var/www/custom-static/" ``` 这允许开发者灵活调整应用所使用的静态文件目录。 #### 设置 API 前缀路径 有时可能需要为所有的 RESTful 接口添加一个公共前缀来区分不同的服务模块。可以通过修改控制器类上的注解实现这一点。例如,给定的服务接口都位于 `/api/v1/*` 下面时,可在主启动类上加上全局映射路径: ```java @SpringBootApplication @RestController @RequestMapping("/api/v1") public class Application { } ``` 另外一种方法是在 `application.properties` 或 `application.yml` 中通过属性配置全局请求路径前缀: ```properties server.servlet.context-path=/api/v1 ``` 或者使用YAML格式: ```yaml server: servlet: context-path: /api/v1 ``` 以上两种方式都可以有效地改变整个项目的访问入口地址。 #### 动态读取 Nacos 中的配置项 当涉及到从Nacos服务器动态拉取配置信息时,除了上述提到的方法外,还可以利用 `@Value` 注解读取特定键值对,并将其注入到Bean属性中去[^2]。下面是一个简单的例子展示如何操作: ```java // 使用 @Value 注解直接绑定配置参数至成员变量 @Value("${common.name}") private String name; @Autowired private ConfigurableApplicationContext applicationContext; @GetMapping("/getNameFromConfig") public ResponseEntity<String> getName() { // 方法体内也可以随时调用此上下文对象获取最新配置 return new ResponseEntity<>(name, HttpStatus.OK); } @RequestMapping("/getConfigs") public void getConfigs(){ String property = applicationContext.getEnvironment().getProperty("common.name"); String property1 = applicationContext.getEnvironment().getProperty("common.age"); System.out.println(property); System.out.println(property1); } ``` 这段代码展示了如何结合 `@Value` 和 `ConfigurableApplicationContext` 来达到目的。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值