springboot实现图片上传

其实在做第一次图片上传的时候,想到存放图片的第一个目录永远是在项目下,所以每一次,定位时总会定位到项目下,但是在Springboot下面上传图片的时候总是会自动的保存到test-classes文件夹下,导致每次上传的时候可以上传,但是却无法访问,我想像过调整路径,但是奈何技术有限,于是调整思维,想着,我找一个相对于当前项目下的地方存放图片,然后定位过去访问,想法有了,接下来就开始动手实现了:

第一步:定位到当前系统的某个路径下,并且自动创建某个文件夹

由于这个文件夹应该是,服务器运行之后便要自动的创建的文件夹,所以我去网上找了一些帖子和资料,最终找到了CommandLineRunner
这是一个接口,我们可以继承这个接口,实现springboot数据的预加载

@Configuration
public class MyCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        //论坛图片的保存的地方
        String s = System.getProperty("user.dir") + "/forumimage/";
//        初始化图片上传地址
        File file = new File(s);
        if(!file.exists()){
            //创建图片保存的地址
            file.mkdirs();
        }
//        然后将值保存到图片静态类里面去
//        System.out.println(s);
        MyStaticValue.forumImagePath = s;
    }
}

实现里面的run方法,使用System.getProperty的方法,使用参数user.dir,定位到当前项目下,并且新建forumimage文件夹,用于保存图片

第二步:使得Springboot能够访问到这个目录

在ssm的时候,我们可以配置springmvc配置文件,拦截请求访问本地的资源,Springboot中,有一个WebMvcConfigurer 这个接口,我们可以选择实现这个接口,实现里面的addResourceHandlers方法,在里面配置相关的信息:

@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
//            registry.addResourceHandler("/**").addResourceLocations("classpath:/ ");
//            registry.addResourceHandler("/ForumImage/**").addResourceLocations("file:"+MyStaticValue.forumImagePath);
            String s = System.getProperty("user.dir") + "/forumimage/";
    //        初始化图片上传地址
            File file = new File(s);
            if(!file.exists()){
                //创建图片保存的地址
                file.mkdirs();
            }
            registry.addResourceHandler("/ForumImage/**").addResourceLocations("file:"+s);
        }

这样便可以实现Springboot的图片上传到本地的一个路径,并可以访问