基于Springboot2.3访问本地路径下静态资源的方法(解决报错:Not allowed to load local resource)

网友投稿 934 2023-05-02

基于Springboot2.3访问本地路径下静态资源的方法(解决报错:Not allowed to load local resource)

最近在做的一个项目中有一个比较奇葩的需求:

要在springboot中,上传本地的图片进行展示

我的第一反应是,直接在数据库字段加一个存储本地路径的字段,然后用thymeleaf的th:src渲染到前oCZDSf端就好了嘛!

理想很丰满,但现实却很骨感~

前端报了这样的错误Not allowed to load local resource

于是我想到了可以使用IO将图片先上传到static/images目录下,这样就不会出现禁止访问本地路径的问题了

但是这样实现,问题又来了:上传后的图片必须重启springboot,才能进行展示,否则无法加载

这个应该是因为springboot在初始化时加载静态资源,运行时导入的资源只能在再次初始化时加载

于是,我苦思冥想,查阅了多方资料,终于使用本地虚拟路径的方式,解决了这个问题

正片开http://始:

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 addReoCZDSfsourceHandlers(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.前端渲染页面

这样就成功实现需求啦

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:IDEA中已配置阿里镜像但maven无法下载jar包的问题及解决方法
下一篇:SpringBoot2.3整合redis缓存自定义序列化的实现
相关文章

 发表评论

暂时没有评论,来抢沙发吧~