【SpringBoot】本地图片无法在前端显示,配置虚拟路径解决浏览器报错:Not allowed to load local resource

本文档详细记录了一个SpringBoot项目中遇到的图片上传路径问题及其解决步骤。首先,将图片保存目录移动到前端项目文件夹下,然后通过创建一个配置类进行访问路径映射,更新相关代码中的文件路径。最后,调整前端访问图片的路径,确保图片能够正确显示。整个解决方案包括路径修改、配置类编写和前后端路径同步。
摘要由CSDN通过智能技术生成

环境:

项目依托于springboot
前端用element-ui

错误状况描述:

下图是发生问题的类所在项目中的位置:
在这里插入图片描述
下面的代码是发生问题的类里的一段代码:


    @Value("F:/housesfiles/")
    String filesPath;

    @RequestMapping("/insert")
    public Map insert(Houses house,MultipartFile housePic) throws Exception, IOException {
        Map map=new HashMap();
        //createTime  生成当前的系统时间
        SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String createTime = s.format(new Date());
        house.setCreateTime(createTime);
        //houseState  新添加肯定是在正常状态  直接设置默认值0
        house.setHouseState(0);

        if(!housePic.isEmpty()) {
            //文件上传
            //获取源文件名 
            String filename = housePic.getOriginalFilename();
            //获取后缀
            String zhui=filename.substring(filename.lastIndexOf("."));
            //给从前端接收到的图片重命名,将名字存到数据库
            String newFileName="h_"+System.currentTimeMillis()+zhui;
            String filesPath="F:/housesfiles/";
            File file=new File(filesPath,newFileName);
            housePic.transferTo(file);
            house.setPic(newFileName);
        }
        housesService.insert(house);
        map.put("state", "success");
        return map;
    }

解决方法:

第一步:

  • 把保存从前端收到的图片的文件夹移到前端项目文件夹下,
    也就是把路径F:/housesfiles/变为F:/house/housesweb/housesfiles,
    改变后的位置如下图所示。

在这里插入图片描述
第二步:
创建一个类,进行访问路径映射。
在这里插入图片描述
在类中写如下代码:

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 MyConfig implements WebMvcConfigurer {
    /*
     *addResourceHandler:访问映射路径,随便写一个
     *addResourceLocations:资源绝对路径,就是那个修改后的保存图片的文件夹的位置
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/housesfiles/**").addResourceLocations("file:F:/house/housesweb/housesfiles");

    }
}

第三步:

  • 记得把这里的路径也改了!
@Autowired
    HousesService housesService;
    @Value("F:/house/housesweb/housesfiles")
    String filesPath;

    @RequestMapping("/insert")
    public Map insert(Houses house,MultipartFile housePic) throws Exception, IOException {
        Map map=new HashMap();
        //createTime  生成当前的系统时间
        SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String createTime = s.format(new Date());
        house.setCreateTime(createTime);
        //houseState  新添加肯定是在正常状态  直接设置默认值0
    house.setHouseState(0);

        if(!housePic.isEmpty()) {
            //文件上传
            //获取源文件名   1.jpg   abc.gif
            String filename = housePic.getOriginalFilename();
            //获取后缀
            String zhui=filename.substring(filename.lastIndexOf("."));
            String newFileName="h_"+System.currentTimeMillis()+zhui;
            String filesPath="F:/house/housesweb/housesfiles";
            File file=new File(filesPath,newFileName);
            housePic.transferTo(file);
            house.setPic(newFileName);
        }
        housesService.insert(house);
        map.put("state", "success");
        System.out.println(map);
        return map;
    }

第四步:

  • 前端里的路径改为你在addResourceHandler:访问映射路径里写的那个,
  • 就是下图这个!

在这里插入图片描述
这个{fileurl}{scope.row.pic}是拼接访问映射路径+图片名称,通过这个去找图片!

<el-table-column prop="hpic" label="图片" width="80">
				<template slot-scope="scope">
					<el-avatar :src="`${fileurl}${scope.row.pic}`"></el-avatar>
				</template>
			</el-table-column>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值