springboot文件上传展示遇到 Not allowed to load local resource:问题

问题展示

在这里插入图片描述

参考文章

百度易得,是tomcat的问题,可以通过更改tomcat配置文件的方式解决,但是springboot项目他的tomcat是内嵌的,所以要用另一种方式解决
我查到的解决方式
博客地址链接
另一篇博客的解决
两个大同小异,综合理解理解终于解决了问题
但我觉得他们说的意思还是不清晰,还要修改信息的展示,我看着他的还是小半个小时

问题解决

1.写一个配置类
在这里插入图片描述
配置虚拟地址映射,这么理解这个方法
以截图中为例,我请求/Path/,就相当于是访问后面那个红框的地址

但是文件上传时好像不能这样请求
在这里插入图片描述
这样会直接上传失败
但是如果直接将绝对路径上传到数据库,访问就会出现Not allowed to load local resource:问题
我们想要请求图片展示时请求的是虚拟路径,那么我们可以这样

@Controller
public class FileController {

    @GetMapping("/upload")
    public String upload() {
        return "upload";
    }

    @PostMapping("/upload")
    @ResponseBody
    public Map<String,Object> upload(@RequestParam("file") MultipartFile file, HttpServletRequest request, Model model) {
        Map<String,Object> map = new HashMap<>();
        map.put("code",0);
        if (file.isEmpty()) {
            map.put("msg","上传失败");
            return map;
        }

        String fileName = UUID.randomUUID().toString().substring(0,5)+file.getOriginalFilename() ;
        User user = (User) request.getSession().getAttribute("user");
        //这个不能写到项目路径下,tomcat会访问不到
        //上传还必须是绝对路径,不然他会上传失败
            //那我能不能这里写个句对路径,但我实际往数据库中写的只有文件名,然后配置虚拟目录
        // String filePath = "\\path\\"+user.getUsername()+"\\";
        String filePath = "D:\\"+user.getUsername()+"\\";
		//这里图片上传是用的绝对路径
        System.out.println(filePath);
        File dest = new File(filePath + fileName);
        if (!dest.exists()){
            dest.mkdirs();
        }

        Map<String,Object> data = new HashMap<>();
        data.put("src",filePath+fileName);
        try {
            file.transferTo(dest);
            map.put("msg","上传成功");
            //之前传绝对路径的情况:
            //map.put("url",filePath+fileName);
            
            //这句话配合前端代码pushNeed来看
            //这个map会作为json返回
            //在前端可以获取到他的url,然后放到表单里,属性设置成隐藏,传到数据库
            //在这里可以只传他的文件名,不传路径,然后请求的时候加路径就可以加配置得虚拟目录了
            //map.put("url",fileName);
            
            System.out.println("上传成功");
            return map;
        } catch (IOException e) {
            map.put("msg","上传失败");
            System.out.println("上传失败");
        }
        return map;
    }
}

在这里插入图片描述
在这里插入图片描述
这样表单上传的时候就吧文件名也一起上传
传到数据库里是红框里的样子,只有文件名
可以看到另一条记录就是我为了恢复错误写的一条记录,是绝对路径
在这里插入图片描述
存的是相对路径
请求展示的时候

在这里插入图片描述
他的/Path/就会映射成D:/fzj/然后相当于是访问这个绝对路径下的内容
在这里插入图片描述
没加载出来的是之前传绝对路径的记录,现在又在前面加了虚拟路径,应该是会报404的。

注意点

thymeleaf拼接路径
不要直接
在这里插入图片描述
会报错
他是这么拼接路径的
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章