使用springboot对外部静态资源文件的处理操作

目录
  • springboot对外部静态资源文件的处理
    • 1、存方面倒还简单,这里贴上一个获取微信临时素材并保存的方法
    • 2、取,由于对springboot不熟悉,所以在这上面踩了坑
      • 主要使用到这2个配置
      • 之后,访问文件一直404
  • SpringBoot2.x静态资源访问
    • 问题
    • 代码
    • 原理

springboot对外部静态资源文件的处理

springboot对外部资源文件的处理主要分为2部分,存和取,通过查看官方文件和看博客踩了坑之后终于搞定了,特此记录。

1、存方面倒还简单,这里贴上一个获取微信临时素材并保存的方法

/**
     * @功能 下载临时素材接口
     * @param filePath 文件将要保存的目录
     * @param method 请求方法,包括POST和GET
     * @param url 请求的路径
     * @return
     */
    public static String saveUrlAs(String url,String filePath,String method){
        //创建不同的文件夹目录
        File file=new File(filePath);
        //判断文件夹是否存在
        if (!file.exists())
        {
            //如果文件夹不存在,则创建新的的文件夹
            file.mkdirs();
        }
        FileOutputStream fileOut = null;
        HttpURLConnection conn = null;
        InputStream inputStream = null;
        String savePath = null ;
        try
        {
            // 建立链接
            URL httpUrl=new URL(url);
            conn=(HttpURLConnection) httpUrl.openConnection();
            //以Post方式提交表单,默认get方式
            conn.setRequestMethod(method);
            conn.setDoInput(true);
            conn.setDoOutput(true);
            // post方式不能使用缓存
            conn.setUseCaches(false);
            //连接指定的资源
            conn.connect();
            //获取网络输入流
            inputStream=conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(inputStream);
            //判断文件的保存路径后面是否以/结尾
            if (!filePath.endsWith("/")) {
                filePath += "/";
            }
            String filePathDir =  DateUtil.getStringAllDate();
            //写入到文件(注意文件保存路径的后面一定要加上文件的名称)
            savePath = filePath+filePathDir+".png";
            fileOut = new FileOutputStream(savePath);
            BufferedOutputStream bos = new BufferedOutputStream(fileOut);

            byte[] buf = new byte[4096];
            int length = bis.read(buf);
            //保存文件
            while(length != -1)
            {
                bos.write(buf, 0, length);
                length = bis.read(buf);
            }
            bos.close();
            bis.close();
            conn.disconnect();
        } catch (Exception e)
        {
            e.printStackTrace();
            logger.error(">>>>>>>>>>>>>>>>下载临时素材接口抛出异常 [{}]",e.getMessage());
        }
        return savePath;
    }

2、取,由于对springboot不熟悉,所以在这上面踩了坑

先看一下springboot官方文档对静态资源这一块的表述

主要使用到这2个配置

spring.mvc.static-path-pattern=/resources/**    //配置url访问路径
spring.resources.static-locations=                      //配置对应的文件路径

由于我想要将静态资源存到项目外部比如 和项目根目录同级的 static文件夹里,然后配置了

spring.resources.static-locations=  static/
spring.mvc.static-path-pattern=/static/**

之后,访问文件一直404

随后网上查了一下,看到了一篇文章,发现

spring.resources.static-locations= file:xxx 

使用了file: + 路径这一配置方法,然后尝试了一下,变成这样:

spring:
  resources:
    static-locations: file:${my.config.static-location}
my:
  config:
    static-location: /static/

发现文件访问成功了!

所以实际上外部文件是需要file: 来配置的, static-locations默认访问的是类路径下的文件

SpringBoot2.x静态资源访问

问题

在springBoot1.5.x版本,访问静态资源直接访问static目录下的资源即可,不用带上static前缀,在2.x以上就失效了,现在记录下在2.x版本如何访问静态资源

开发环境:IDEA

文件目录:

  • templates存放官方推荐的thymeleaf模板
  • static存放静态资源

在controller目录下新建一个类,继承WebMvcConfigurationSupport,对静态资源目录说明

代码

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
}

原理

当访问的url中匹配到/static/**时,就去访问静态资源存放地static目录下寻找资源

在配置了静态资源路径后,就可以访问静态资源了,但是在访问时需要在路径前加上static

<a th:href="@{/static/imag1.jpg}" rel="external nofollow" >跳转</a>
<a th:href="@{/static/images/image2.jpg}" rel="external nofollow" >跳转</a>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot如何通过webjars管理静态资源文件夹

    WebMvcAutoConfiguration 添加资源映射: public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!this.resourceProperties.isAddMappings()) { logger.debug("Default resource handling disabled"); } else { Duration cachePeriod = this.resource

  • springboot操作静态资源文件的方法

    默认静态资源供 SpringBoot有几个默认的静态资源目录,当然也可配置,默认配置的/**映射到/static(或/public ,/resources,/META-INF/resources),自定义配置方式如下: spring.mvc.static-path-pattern=/** # Path pattern used for static resources. 前端如果需要访问默认的静态资源,下面有点要注意,考虑下面的目录结构: └─resources │ application.ym

  • springboot项目打成jar包后无法获取static下的静态资源文件的问题分析

    springboot 后端项目 做某个功能时 需要读取根目录下的.doc文件,具体项目中路径如下: 开始是通过绝对路径读取文档,在本地没有任何问题. 但是 讲项目打成jar包 部署到测试环境发现无论怎样都读取不到,然后在本地运行jar包出现同样的情况. 捕获异常:java.io.FileNotFoundException [org.apache.ibatis.session.defaults.DefaultSqlSession@55b40849] java.io.FileNotFoundExce

  • 使用springboot对外部静态资源文件的处理操作

    目录 springboot对外部静态资源文件的处理 1.存方面倒还简单,这里贴上一个获取微信临时素材并保存的方法 2.取,由于对springboot不熟悉,所以在这上面踩了坑 主要使用到这2个配置 之后,访问文件一直404 SpringBoot2.x静态资源访问 问题 代码 原理 springboot对外部静态资源文件的处理 springboot对外部资源文件的处理主要分为2部分,存和取,通过查看官方文件和看博客踩了坑之后终于搞定了,特此记录. 1.存方面倒还简单,这里贴上一个获取微信临时素材并

  • 在SpringBoot中静态资源访问方法

    一.概述 springboot 默认静态资源访问的路径为:/static 或 /public 或 /resources 或 /META-INF/resources 这样的地址都必须定义在src/main/resources目录文件中,这样可以达到在项目启动时候可以自动加载为项目静态地址目录到classpath下 ,静态访问地址其实是使用 ResourceHttpRequestHandler 核心处理器加载到WebMvcConfigurerAdapter进行对addResourceHandlers

  • IDEA配置静态资源热加载操作(Springboot修改静态资源不重启)

    第一步: 修改file->settings->compiler->build project automatically 第二步: 按ctrl+shift+a,搜索Registry双击进去,点击面板搜索running,勾选下面的值: 代码的热加载可以使用spring-boot-devtools,百度下就有很多,个人感觉不好用,修改代码需要重启项目,很烦,非常鸡肋,所以我不用,哈哈哈- 补充知识:idea实现修改html等springboot下static目录静态资源重新加载 对于前后端不

  • SpringBoot设置静态资源访问控制和封装集成方案

    背景 最近在着手公司框架优化及项目实际应用,原先方案是springboot+html前后端分离单独部署,后端人员兼职前端开发,后续产品线业务进行优化,面向企业使用部分由移动网站人员负责设计开发,内部配置后台管理还是由后端负责,随着框架不停迭代与使用的项目越来越多,项目升级框架变得十分麻烦,后端部分可以通过maven私服进行版本迭代,后台管理页面升级则需要进行各个项目拷贝,所以决定对框架进行整合,将后台管理页面与框架后端代码进行整合发布. 结构设计 框架打包后台管理相关标准资源及页面(框架publ

  • SpringBoot+Thymeleaf静态资源的映射规则说明

    目录 Spring Boot中静态资源的映射规则 Thymeleaf模板引擎的映射规则 SpringBoot对静态资源的映射规则源码学习笔记 Spring Boot中静态资源的映射规则 Spring Boot中静态资源主要包括两部分:1.webjars资源,2.自定义的其他html.css.js资源,下面分别介绍两种资源的映射规则. 1).webjars资源 WebJars是将web前端资源(js,css等)打成jar包文件,然后借助Maven工具,以jar包形式对web前端资源进行统一依赖管理

  • springboot访问静态资源遇到的坑及解决

    目录 访问静态资源遇到的坑及解决 直接访问静态资源的问题 SpringBoot 默认静态资源访问配置 引入shiro 或 security后的拦截过滤 访问静态资源遇到的坑及解决 开始是以这种结构进行的,结果页面上一篇红,访问的页面是这样的 最终找出来问题,虽然每次调整路径都不对,最终查看多种方法可以看到了: 增加: package com.example.demo.config; import org.springframework.stereotype.Component; import o

  • SpringBoot访问静态资源的配置及顺序说明

    目录 访问静态资源的配置及顺序 1. SpringBoot的默认配置 2. 测试 3.配置 静态资源的配置心得 举例 访问静态资源的配置及顺序 今天在玩SpringBoot的demo的时候,放了张图片在resources目录下,启动区访问的时候,突然好奇是识别哪些文件夹来展示静态资源的, 为什么有时候放的文件夹不能显示,有的却可以. 1. SpringBoot的默认配置 首先我们打开WebMvcAutoConfiguration类, 因为是静态资源的位置, 所以搜索location,找到这一行代

随机推荐