SpringBoot addResourceHandlers 代理静态资源无法访问 Java获取linux文件中文名乱码 linux设置中文字符集
- Windows中使用SpringBoot addResourceHandlers代理静态资源访问
- Linux中使用SpringBoot addResourceHandlers代理静态资源访问
- 修改路径问题
- 一度以为Linux不能用这种方式代理静态资源
- 文件、文件夹权限
- 拷其他文件放指定目录(希望)
- 中文乱码问题出现
- 获取文件列表
- 接下来就是服务器中文字符集问题
- 最后的胜利
前言:
SpringBoot项目一直放在Windows服务器上运行,一切正常;
后期变动需要转到Linux中,发现之前一直好好的静态资源无法访问,然后开启了一系列无脑百度过程…
Windows中使用SpringBoot addResourceHandlers代理静态资源访问
application.yml配置文件中配两个静态地址
SpringWebConfig
@Configuration
public class SpringWebConfig implements WebMvcConfigurer {
@Value("${app.UploadFilePath}")
private String uploadFilePath;
@Value("${app.StaticMapping}")
private String staticMapping;
@Bean
public ParameterResolver parameterResolver() {
return new ParameterResolver();
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new ParameterResolver());
WebMvcConfigurer.super.addArgumentResolvers(resolvers);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(staticMapping +"/**").addResourceLocations("file:" + uploadFilePath + "/");
}
}
此种方式通过 项目访问路径拼接/zdzy-file/测试.pdf 即可访问D:/zjugis-upload下的测试.pdf,也就可以在浏览器直接浏览
Linux中使用SpringBoot addResourceHandlers代理静态资源访问
Tips: linux是certos7
先将文件修改为如下
项目搬到Linux下后,发现404现象
然后开启百度…
修改路径问题
查找一番后,说有路径问题,开启修改
1、将UploadFilePath最后加/
2、将file后加//
一度以为Linux不能用这种方式代理静态资源
https://www.656463.com/wenda/SpringydaddResourceHandlersbnzli_300
不过还得试呀呀呀呀呀呀呀啊啊啊啊啊
文件、文件夹权限
以为是权限问题,但是把文件和文件夹权限全部设置为777,于事无补
拷其他文件放指定目录(希望)
拷了一个文件test.pdf,然后浏览器访问发现正常可以浏览,这最起码排除了linux中无法使用SpringBoot addResourceHandlers代理静态资源。
中文乱码问题出现
经过同事点拨,发现404问题,是我访问的文件,文件名是中文,导致浏览器访问的是乱码url。
然后我想着这不简单吗,encode一下不就可以了,最后发现还是不行
获取文件列表
经过大佬同事点拨,让我先输出一下文件,看看,输出后,发现确实是乱码问题
接下来就是服务器中文字符集问题
一通百度
下载中文字符集,安装、配置,这里就不一一演示了,百度上都有
最后结果
安装好后,配置utf8,/etc/locale.conf(注意我的是centos7,配置路径如此,其他的请按照实际情况配置)
保存好后,source命令是让配置生效
配置好后,满心欢喜,访问中文文件,404,还是404
直接傻眼
然后把zh开头的几种类型全部设置了一遍
全部都不行…
最后的胜利
写博客时候,忘了是在哪里看的一句话,说修改完字符集后,要重启java程序
OK
又来希望了
设置utf8,重启,NO,404
设置gbk,重启,Yes,Yes,Yes,久违的 pdf 出来了
再次访问文件接口,返回也正常了乐乐乐乐乐了
注:可能是机器问题:不一定gbk就一定可以,utf8就一定不行,大家多试试,还有修改完记得重启jar包;这个问题连续搞了一天,晚上才解决(也有可能是鄙人太菜了,呜呜呜~)