springboot对外部静态资源文件的处理
springboot对外部资源文件的处理主要分为2部分,存和取,通过查看官方文件和看博客踩了坑之后终于搞定了,特此记录。
1、存方面倒还简单,这里贴上一个获取微信临时素材并保存的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
/**
* @功能 下载临时素材接口
* @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不熟悉,所以在这上面踩了坑
主要使用到这2个配置
1
2
|
spring.mvc. static -path-pattern=/resources/** //配置url访问路径
spring.resources. static -locations= //配置对应的文件路径
|
由于我想要将静态资源存到项目外部比如 和项目根目录同级的 static文件夹里,然后配置了
1
2
|
spring.resources. static -locations= static /
spring.mvc. static -path-pattern=/ static /**
|
之后,访问文件一直404
随后网上查了一下,看到了一篇文章,发现
1
|
spring.resources. static -locations= file:xxx
|
使用了file: + 路径这一配置方法,然后尝试了一下,变成这样:
1
2
3
4
5
6
|
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,对静态资源目录说明
代码
1
2
3
4
5
6
7
|
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler( "/static/**" ).addResourceLocations( "classpath:/static/" );
}
}
|
原理
当访问的url中匹配到/static/**时,就去访问静态资源存放地static目录下寻找资源
在配置了静态资源路径后,就可以访问静态资源了,但是在访问时需要在路径前加上static
1
2
|
<a th:href= "@{/static/imag1.jpg}" rel= "external nofollow" >跳转</a>
<a th:href= "@{/static/images/image2.jpg}" rel= "external nofollow" >跳转</a>
|
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/Honnyee/article/details/90448631