SpringBoot 上传文件到linux服务器 异常java.io.FileNotFoundException: /tmp/tomcat.50898……解决方案

我的项目在本地是可以正常跑的,一放到服务器上其他功能都正常,就上传功能报错

一开始我是把上传图片的路径放到webapp里的,但是一直报这个错误

java.io.IOException: java.io.FileNotFoundException: /tmp/tomcat.5089835798184465073.8081/work/Tomcat/localhost/ROOT/
Java解决java.io.FileNotFoundException: E:\work\work (拒绝访问。)

之后把路径改成了放到resource的static的upload里,也还是不行
后来我翻到一大神也遇到这错误
https://blog.csdn.net/Ani521smile/article/details/83660328
于是就在path的路径前加了一个斜杠 /

String path=File.separator +ClassUtils.getDefaultClassLoader().getResource("static/upload").getPath();

终于不报错了!!
但是用
也获取不到这图片的路径

实在没办法只能去git上看看别人的上传图片是怎么写的了
于是找到这位大神的,不过他的路径是写死的,也行,可以试试
https://gitee.com/yangyouqi/upload_picture_test

发现他没有写显示图片的页面后又找了怎么显示页面
https://blog.csdn.net/capricornce/article/details/83868882

最后结合他们的代码再把试试,发现还是不行。
可幸运的是,我突然灵光一闪,会不会是获取也要斜杆
真的被我猜中了,终于解决了这困了我两天的bug

我了我这么久 我要记录一下我的解bug思路(字有点丑)
SpringBoot 上传文件到linux服务器 异常java.io.FileNotFoundException: /tmp/tomcat.50898……解决方案_第1张图片

具体代码如下:

控制类

 //中间这一串是处理注册时上传的图片image保存到 “当前绝对路径+/upload”
            // 上传文件路径
            String path= "/D:/项目上传的图片/img/";
            System.out.println("------------------------------------------------"+path);
            // 上传文件名
            String filename = user.getImage().getOriginalFilename();
            System.out.println("----------------------------------------"+filename);
            //新建filename之前的目录path
            File filepath = new File(path,filename);
            // 判断路径是否存在,如果不存在就创建一个
            if (!filepath.getParentFile().exists()) {
     
                filepath.getParentFile().mkdirs();
            }
            // 先新建filename这个文件,再将上传的文件存到那
            File file = new File(path+File.separator+filename);
            user.getImage().transferTo(file);
 
            //将图片的地址(上传的文件名)赋值给ImageLu
            user.setImageLu(filename);

显示的图片
路径的配置类,没真这个不行

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;


@Configuration
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
     
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
     

        /**
         * @Description: 对文件的路径进行配置, 创建一个虚拟路径/file/**
         *这是图片的物理路径 "file:/+本地图片的地址"
         * 当路径写/file/**时,其实意思是"file:D:/项目上传的图片/img/"
         */
        String url1 = "/D:/项目上传的图片/img/";
        registry.addResourceHandler("/file1/**").addResourceLocations("file:" + url1);//当路径写/file/**时,其实意思是"file:D:/项目上传的图片/img/"
        super.addResourceHandlers(registry);
    }
}
 <img src="/file1/${user_session.imageLu}" height="100">

刚刚突然发现只要加了“/”,好像都是能上传成功的,只是我没显示出来而已,惊讶

你可能感兴趣的:(SpringBoot 上传文件到linux服务器 异常java.io.FileNotFoundException: /tmp/tomcat.50898……解决方案)