SpringBoot获取resources目录下静态资源的两种方式

 更新时间:2025年12月11日 09:29:07   作者:何中应  
本文主要介绍了SpringBoot获取resources目录下静态资源的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

说明:本文介绍在 Spring Boot 项目中,获取项目下静态资源的两种方式。

场景

一般来说,项目相关的静态资源,都会放在当前模块的 resources 目录下,如下:

方式一:返回字节数组

可以通过下面这种方式,读取文件(注意文件路径,从 resources 开始),返回给前端文件的字节数组

    @GetMapping("/get-template-1")
    public byte[] getTemplate() throws IOException {
        // 1.获取文件
        ClassPathResource resource = new ClassPathResource("template/excel/full/学生信息模板-填充.xlsx");

        // 2.构建响应头
        String fileName = "学生信息模板.xlsx";
        String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", encodedFileName);

        // 3.返回
        return ResponseEntity.ok()
                .headers(headers)
                .body(resource.getInputStream().readAllBytes()).getBody();
    }

这种方式,需要编译环境是 Java 10(包括10) 以上的,不然编译不通过

在 pom 文件末尾定义编译环境(大于或等于10)

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

方式二:写入到响应中

也可以用下面这种方式,将文件流写入到响应对象中

    @GetMapping("/get-template-2")
    public void getTemplate2(HttpServletResponse response) throws IOException {
        // 1.获取文件
        ClassPathResource resource = new ClassPathResource("template/excel/full/学生信息模板-填充.xlsx");

        // 2.构建响应头
        String fileName = "学生信息模板.xlsx";
        String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName);

        // 3.写入到响应对象中
        try (InputStream inputStream = resource.getInputStream();
             OutputStream outputStream = response.getOutputStream()) {
            inputStream.transferTo(outputStream);
            outputStream.flush();
        }
    }

以上两种方式都能将后端静态资源返回给前端

到此这篇关于SpringBoot获取resources目录下静态资源的两种方式的文章就介绍到这了,更多相关SpringBoot获取resources静态资源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java删除文件夹的实现方式

    java删除文件夹的实现方式

    用户发现File.delete()无法删除非空目录,尝试自定义递归删除方法后,发现commons-io已提供FileUtils.deleteDirectory,建议优先使用第三方库避免重复造轮子,提升效率与代码可靠性
    2025-07-07
  • 集成Spring Redis缓存的实现

    集成Spring Redis缓存的实现

    今天小编就为大家分享一篇关于集成Spring Redis缓存的实现,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • SpringBoot基于token防止订单重复创建

    SpringBoot基于token防止订单重复创建

    本文主要介绍了SpringBoot基于token防止订单重复创建,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06
  • 解析idea内嵌浏览器翻译

    解析idea内嵌浏览器翻译

    这篇文章主要介绍了解析idea内嵌浏览器翻译的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Java中的命名与目录接口JNDI基本操作方法概览

    Java中的命名与目录接口JNDI基本操作方法概览

    这篇文章主要介绍了Java中的命名与目录接口JNDI基本操作方法概览,JNDI提供统一的客户端API使得Java应用程序可以和这些命名服务和目录服务之间进行交互,需要的朋友可以参考下
    2016-03-03
  • Java访问数据库实例详解

    Java访问数据库实例详解

    这篇文章主要为大家详细介绍了Java访问数据库实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • JAVA的LIST接口的REMOVE重载方法调用原理解析

    JAVA的LIST接口的REMOVE重载方法调用原理解析

    这篇文章主要介绍了JAVA的LIST接口的REMOVE重载方法调用原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 深入解析spring AOP原理及源码

    深入解析spring AOP原理及源码

    这篇文章主要介绍了spring AOP原理及源码分析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴,需要的朋友可以参考下
    2022-04-04
  • MyBatis不用@Param传递多个参数的操作

    MyBatis不用@Param传递多个参数的操作

    这篇文章主要介绍了MyBatis不用@Param传递多个参数的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringBoot+Beetl实现动态数据库DDL的示例代码

    SpringBoot+Beetl实现动态数据库DDL的示例代码

    最近公司里有一个新的需求,需要导出数据库元数据表中存储的表的 DDL 语句,而在元数据表中数据源的类型庞大,少则十几种多则达到几十种,各种数据库类型都有,本篇文章就从这个模版引擎来入手介绍如何实现功能,需要的朋友可以参考下
    2025-06-06

最新评论