SpringBoot 打包后(jar包) 实现文件上传

文件上传是一个项目最基础的功能,按道理说应该有不会有多困难,但恶心就恶心在 SpringBoot 最方便的优点上!!!

因为 SpringBoot 是内置 Tomcat 的,所以我们并不需要部署到 Tomcat 的服务器,但当打包后(jar包)就出现了问题。

在 IDE 时,因为是正常的文件目录,所以原来的文件上传功能就可以实现,但是打包后,所有的静态文件都变成了 jar 包!!!

这就很头疼,因为当访问 /static 时,实质上访问的是 jar 包文件内容。

这句需要我们配置一个虚拟路径的配置文件:

package com.seventeen.common.config;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.io.File;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private AppConfig appConfig;
    /**
     * 静态资源处理
     **/
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        File file = new File(appConfig.getResPhysicalPath() + "/logistics/");
        if (!file.exists()) {
            file.mkdirs();
        }
        System.out.println("静态资源处理:" + appConfig.getResPhysicalPath() + "/logistics/");
//appConfig.getResPhysicalPath() 这表示项目所在的文件夹,下面会有介绍
        registry.addResourceHandler("/logistics/**").addResourceLocations("file:" + appConfig.getResPhysicalPath() + "/logistics/");
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
}
WebMvcConfig

 

配置结束就可以正常的访问上传的文件、实现上传功能!!!

这来再追加一个得到项目部署目录的方法:

        ApplicationHome home = new ApplicationHome(getClass());
        File jarFile = home.getSource();
        String PATH = jarFile.getParentFile().getPath();
项目部署目录

得到的 PATH 变量就是项目部署的目录!!!

注:以上方法无论是 IDE 还是部署的 Jar 包都可以运行!!!

 

posted @ 2021-03-02 10:26  拾柒年  阅读(881)  评论(1编辑  收藏  举报