小编给大家分享一下在Springboot2.3中如何访问本地路径下静态资源,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
最近在做的一个项目中有一个比较奇葩的需求:
要在springboot中,上传本地的图片进行展示
我的第一反应是,直接在数据库字段加一个存储本地路径的字段,然后用thymeleaf的th:src渲染到前端就好了嘛!
理想很丰满,但现实却很骨感~
前端报了这样的错误Not allowed to load local resource
于是我想到了可以使用IO将图片先上传到static/images目录下,这样就不会出现禁止访问本地路径的问题了
但是这样实现,问题又来了:上传后的图片必须重启springboot,才能进行展示,否则无法加载
这个应该是因为springboot在初始化时加载静态资源,运行时导入的资源只能在再次初始化时加载
于是,我苦思冥想,查阅了多方资料,终于使用本地虚拟路径的方式,解决了这个问题
正片开始:
1.首先配置一个配置类
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyConfigurer implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/image/**").addResourceLocations("file:E:/vote_images/");
}
}
addResourceHandler是指你设置的虚拟路径,前端展示页面时填入这个路径来进行访问
addResourceLocations是指实际的本地路径,你需要代理给虚拟路径来访问的路径
2. IO实现文件上传
//如果文件夹不存在,创建文件夹
File file=new File("E:\\vote_images");
if(!file.exists()){
file.mkdir();
}
//文件的上传
try (InputStream input = new FileInputStream(new File(judge));
OutputStream output = new FileOutputStream("E:\\vote_images\\" + num + ".jpg")
) {
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buf)) != -1) {
output.write(buf, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
//设置路径字段
o.setPath("\\image\\" + (num++) + ".jpg");
//增加数据
optionsService.insert(o);
3.前端渲染页面
<img height="150px" width="225px" th:src="@{${opt.getPath()}}">
这样就成功实现需求啦
以上是在Springboot2.3中如何访问本地路径下静态资源的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。