前言
最近做项目,刚好遇到前段时间学的kkfileview,需要实现文件在线预览功能,之前学习的时候采用的nginx部署方式做静态资源访问,于是这次我打算使用yml方式配置
yml配置
spring:
resources:
static-locations: file:E:/images/, file:E/images_bak/
这里解释一下,加这个"file:“是指定系统静态资源前缀,不加的话默认会有个"classpath:”。
webmvc配置
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/file/**")
.addResourceLocations("file:E:/images/")
.addResourceLocations("file:E:/images_bak/")
;
}
}
这里解释一下,将spring-resources-static-locations下的路径做映射,
然后在配置类中配置registry.addResourceHandler(“/file/**”)
后面访问E:/images/下的0.jpg或者E:/images_bak下的100.jpg,在浏览器中都可以通过http://ip:port/file/0.jpg或者100.jpg访问成功。
这里注意,如果访问资源提示401注意一下,拦截器是否对/file/**放行
访问文件404问题排查
最开始我这本地访问404问题,检查yml配置和mvc配置类,我这发现的问题是少了/,E:/images/最后的/,这里加上之后本地访问正常。
如果不是这里问题,检查其他地方
1.url路径是否正确。
2.文件路径下是否有对应文件
3.检查yml中是否有如下配置:
server:
servlet:
context-path: /app
如果有这个配置的话,访问路径得加上前缀,http://ip:port/app/file/0.jpg
部署到服务器后访问404
这里先贴出服务器配置
spring:
resources:
static-locations: file:/data/jars/test/plan/, file:/data/jars/test/personinfo/
同理,webmvc的配置类也得对应更改。
因为之前刚接触kkfileview的时候,出现docker路径挂载问题,我这首先想到的就是路径挂载,但是我查看启动脚本,personinfo和plan目录都是做了挂载的,于是排查其他原因
1.服务器端口是否对外暴露
2.云服务器查看安全组配置
3.文件路径
当我检查了这些之后,仍然不能访问,于是我又回到文件路径挂载的问题上,我尝试对personinfo和plan的上级目录做挂载,重启容器,url访问,访问成功。。。服了我自己了[捂脸][捂脸]