Springboot - 常見問題 【以jar包運行時,無法上傳文件!】

問題描述:

springboot開發的web項目,在Idea中運行一切正常,但打包爲jar並部署本地後,其他訪問正常,卻無法上傳文件!

原因分析:

jvm運行jar時,並不會對jar包進行解壓。

解決方法:

step1:在啓動類中添加一個路徑映射配置

public class ProjectApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProjectApplication .class, args);
    }

    // 添加該調用
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
                        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/","file:static/");
    }

}

step2:在項目配置文件中添加相關配置(這裏以properties配置爲例)

################ 該配置名稱爲自定義,即resourceX和fileDir可以自定義命名
resourceX.fileDir = C:/Users/Administrator/Desktop/photo_album_jar/static
################
spring.resources.static-locations = classpath:static/,file:${resourceX.fileDir}

step3:將要運行的jar內的static目錄移動到與jar包同級目錄下

step4:使用如下自定義調用,獲取文件存儲路徑

...
import org.springframework.util.ClassUtils;
import java.util.*;
...

    private String imagePath;
    // 獲取文件存儲路徑的方法(config對象爲配置類對象,擁有如“文件存儲路徑”等字段)
    private String getImagePath() {
        if (null == imagePath) {
            URL url = ClassUtils.getDefaultClassLoader().getResource("static");
            if (url != null) {
                // 當前爲idea中的開發運行,使用下面的代碼生成存儲路徑
                String projectPath = url.getPath();
                imagePath = projectPath + File.separator + config.imagePath.replace(".", File.separator) + File.separator;
            } else {
                // 如果是生產環境運行,請將jar中的“static目錄”複製到jar同級的目錄下
                imagePath = "static"+File.separator+config.imagePath.replace(".", File.separator) + File.separator;
            }
            imagePath = FileDataSaveModule.adjustPathNameSeparator(imagePath);
            logger.info("文件存儲路徑初始化:" + imagePath);
        }
        return imagePath;
    }

...

 

 

 

 

 

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