springboot自定义静态资...

本文介绍了如何在SpringBoot项目中自定义静态资源的位置。默认情况下,资源位于classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/。但根据需求,可能需要自定义加载路径。文章提供了两种解决方案:通过配置文件和编写配置类来实现这一目标,并展示了项目结构及访问结果。

pringboot 静态资源位置,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,默认资源放在这几个目录下,是可以访问的,但是项目中往往需要自己定义静态资源加载的位置,这个时候就需要我们进行配置或者在项目中加一个配置类解决这个需求问题。

1、在配置文件中进行配置

[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
配置访问静态资源请求路径
spring.mvc.static-path-pattern=/basedata/**
配置自定义静态资源存储位置,这样配置之后默认静态资源访问就不生效了
spring.resources.static-locations=file:./basedata/
  
该配置项也可以配置成数组形式 举例如下
自定义静态资源存储位置,可以用 ${}代替值
web.source.unzip=/aiplatformadmin/AI3.1/upload/audio/
  
spring.resources.static-locations[0]=classpath:/public/
spring.resources.static-locations[1]=classpath:/static/
spring.resources.static-locations[2]=classpath:/resources/
spring.resources.static-locations[3]=classpath:/META-INF/resources/
spring.resources.static-locations[4]=file:${web.source.unzip}
通过举例配置,这样默认静态资源位置和自定义静态资源都可以访问


2、代码中进行配置

[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
@Configuration
public class MyConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/basedata/**").addResourceLocations("file:" + "."+ File.separator+"basedata"+File.separator);
    }
}
  
addResourceHandler 这个方法是配置资源请求路径
addResourceLocations 这个方法是配置自定义静态资源存储位置,里边用到了file:,是因为资源放置位置不在classpath下边,是自定义的,也可以写为classpath:

 

效果展示:

项目结构:

访问结果展示:

### 配置控制器以响应 `/temp.xlsx` 文件的 HTTP 请求 为了使 Spring Boot 应用能够处理对位于 `resources/static` 或其他指定位置中的 `/temp.xlsx` 文件的请求,可以采用多种方式实现这一目标。 #### 方法一:放置文件于静态资源目录下 如果希望直接通过 URL 访问 Excel 文件而无需编写额外代码,则可将该文件放入项目的默认静态资源路径之一。对于大多数 Spring Boot 项目,默认情况下会自动扫描并提供来自以下四个位置的内容: - classpath:/META-INF/resources/ - classpath:/resources/ - classpath:/static/ - classpath:/public/ 因此,只需把 `temp.xlsx` 放入这些文件夹内的任意一个即可让其可通过浏览器或其他客户端工具轻松获取[^2]。 #### 方法二:创建自定义控制器来返回文件流 当需要更灵活地控制文件下载行为时(例如设置HTTP头信息),可以通过构建一个新的 RESTful API 来完成此操作。下面是一个简单的例子展示如何做到这一点: ```java import org.apache.poi.ss.usermodel.Workbook; import org.springframework.core.io.ClassPathResource; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import java.io.IOException; import java.nio.file.Files; @RequestMapping("/api/excel") @RestController public class ExcelController { @GetMapping(value = "/download", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public ResponseEntity<byte[]> downloadExcelFile() throws IOException { ClassPathResource resource = new ClassPathResource("templates/temp.xlsx"); HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=temp.xlsx"); byte[] fileContent = Files.readAllBytes(resource.getFile().toPath()); return new ResponseEntity<>(fileContent, headers, HttpStatus.OK); } } ``` 上述代码片段展示了怎样读取类路径下的模板文件并通过 HTTP 响应将其作为附件发送给调用者。注意这里假设 `temp.xlsx` 存在于 `src/main/resources/templates/` 下面;如果不是这种情况,请调整相应的路径字符串[^1]。 此外,在某些场景下可能还会遇到临时上传目录的问题,这通常发生在服务器重启之后找不到之前保存的数据的情况。为了避免此类问题的发生,建议按照如下所示的方式配置应用程序的多部分解析器属性,从而确保即使服务端发生崩溃也能保持持久化的存储空间用于存放待处理的大文件对象[^3]: ```properties # application.properties spring.servlet.multipart.location=/opt/myapp/uploads ``` 或者使用 Java Config 方式来进行相同的操作: ```java @Configuration public class MultipartConfig { @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); String location = "/opt/myapp/uploads"; factory.setLocation(location); return factory.createMultipartConfig(); } } ``` 这样就可以有效地管理大尺寸文件以及防止因系统重启而导致的数据丢失风险了。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值