spring boot 配置静态路径
一 前言
最近有个项目,需要上传一个zip文件(zip文件就是一堆的html压缩组成)的压缩文件,然后后端解压出来,用户可以预览上传好的文件。
查看资料,spring boot对静态文件,可以通过配置路径的方式来实现。
@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport { @Resource
private PermissionInterceptor permissionInterceptor; @Resource
private CheckOpenInterceptor checkOpenInterceptor; @Value("${dataDir}")
private String rootPath; @Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
log.info(">>addResourceHandlers>>"+"file:"+rootPath);
registry.addResourceHandler("/file/**").addResourceLocations("file:"+rootPath); super.addResourceHandlers(registry);
} @Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(permissionInterceptor).addPathPatterns("/file/**");
super.addInterceptors(registry);
} }
rootPath 我本地调试环境的是 : d:/file/
测试环境的是 /data/file
/**” :表示访问路径,根据实际情况指定(这里表示/file/下的所有路径)
"file:/d/file/" :表示静态资源在硬盘上的真实存储位置,根据实际情况指定
本地开发是很顺利的,很快就写好了,当部署到测试机的时候,上传的文件,无法预览,一直提示404。
二 漫长的调试之路
初步怀疑是2个问题
1.权限问题检查了文件也正常写入和读出,排除权限的问题
2文件编码的问题
我上传的有中文目录,也许是中文无法映射出来,后来,上传了全英文的文件,也是无法预览,实在是吐血了,
都无法解决我的问题
实在是想不到什么问题,考虑了能否远程debug下呢
我配置了 ide debug,远程 java启动命令
java -agentlib:jdwp=transport=dt_socket,address=5555,server=y,suspend=y -jar myproject.jar
ide 配置

其中 host 是我本地的ip地址
启动好远程服务,打好断点,然后debug
经过几个小时的spring debug 源码,终于发现了我的路径少了个 / 号, spring boot 对于 不是/结尾的处理,直接忽略了,找到了上级目录去了,这就造成一直404的原因
总结
1.开发容易,调试难,一定要注意配置要小心点
2.spring boot 要多熟悉下,有问题,也可以debug来解决
spring boot 配置静态路径的更多相关文章
- spring boot 配置虚拟静态资源文件
我们实现的目的是:通过spring boot 配置静态资源访问的虚拟路径,可实现在服务器,或者在本地通过:http://ip地址:端口/资源路径/文件名 ,可直接访问文件 比如:我们本地电脑的:E: ...
- Spring boot 默认静态资源路径与手动配置访问路径的方法
这篇文章主要介绍了Spring boot 默认静态资源路径与手动配置访问路径的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在application.propertis中配置 ##端口号 ...
- spring boot 开静态资源访问,配置视图解析器
配置视图解析器spring.mvc.view.prefix=/pages/spring.mvc.view.suffiix= spring boot 开静态资源访问application.proerti ...
- Spring Boot中静态资源(JS, 图片)等应该放在什么位置
Spring Boot的静态资源,比如图片应该放在什么位置呢, 如果你放在传统WEB共的类似地方, 比如webapp或者WEB-INF下,你会得到一张示意文件未找到的破碎图片.那应该放哪里呢? 百度一 ...
- Spring Boot 的静态资源处理
做web开发的时候,我们往往会有很多静态资源,如html.图片.css等.那如何向前端返回静态资源呢?以前做过web开发的同学应该知道,我们以前创建的web工程下面会有一个webapp的目录,我们只要 ...
- Spring Boot 配置优先级顺序
一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...
- spring boot 配置注入
spring boot配置注入有变量方式和类方式(参见:<spring boot 自定义配置属性的各种方式>),变量中又要注意静态变量的注入(参见:spring boot 给静态变量注入值 ...
- Spring MVC配置静态资源和资源包
Spring MVC配置静态资源和资源包 本例映射:css目录: pom.xml <properties> <spring.version>4.3.5.RELEASE</ ...
- spring boot配置springMVC拦截器
spring boot通过配置springMVC拦截器 配置拦截器比较简单, spring boot配置拦截器, 重写preHandle方法. 1.配置拦截器: 2重写方法 这样就实现了拦截器. 其中 ...
随机推荐
- python中的break 和continue的区别
break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环 break的例子如图,当遇到的n为偶数时,直接退出循环,所以打印的结果只有1. continue例子如下图,当遇 ...
- 在安装pdfplumber时报错 Microsoft Visual C++ 14.0 is required.
在安装pdfplumber时报下列错误: 解决方法: 更新pip ,因为pip 版本太旧 来自为知笔记(Wiz)
- vue3.0 没有 vue.condig.js 解决
第一次用 vue3.0 ,发现没有vue.config.js ,只有一个babel.config.js 怎么办? 需要在根目录手动添加一个即可,如下 相关的配置说明 module.exports = ...
- asyncio异步编程
1. 协程 协程不是计算机提供,程序员认为创造 协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术,其实就是一个线程实现代码块相互切换执行.例如: def func1(): ...
- 详解Scrapy的命令行工具
接触过Scrapy的人都知道,我们很多操作是需要借助命令行来执行的,比如创建项目,运行爬虫等.所以了解和掌握这些命令对于scrapy的学习是很有帮助的! Scrapy 命令 首先,在scrapy命令中 ...
- R语言基本数据对象之向量的主要运算
在R语言里操作和接触的所有东西都称作对象(object).对象有很多种类 可以包含各种类型的数据.R 语言里所有的东西都被称为对象,R语言中常见的数据类型有几下几种,分别是字符型 (character ...
- jsencrypt vue相关的rsa加密
vue组件引入 import { JSEncrypt } from 'jsencrypt' 方法内使用 let publicKey = asdfsafdadfafasjdhfasfd // 从后台获取 ...
- 《剑指offer》面试题37. 序列化二叉树
问题描述 请实现两个函数,分别用来序列化和反序列化二叉树. 示例: 你可以将以下二叉树: 1 / \ 2 3 / \ 4 5 序列化为 "[1,2,3,null,null,4,5]&quo ...
- rocketmq之延迟队列(按照18个等级来发送)
1 启动消费者等待传入的订阅消息 import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache ...
- 【刷题-LeetCode】166 Fraction to Recurring Decimal
Fraction to Recurring Decimal Given two integers representing the numerator and denominator of a fra ...