SpringBoot打成jar運行時文件的上傳和下載問題

介紹:一般情況下使用SpringBoot在未打成jar執行時,在IDEA環境或者打成war包放在Tomcat中能夠正常的使用常見的文件上傳操作將文件上傳到對應的static目錄下以及在頁面中使用文件路徑進行訪問,但是打成jar運行後就不能正常的上傳和訪問(有的文章說可以正常上傳,但是我本人不能實現正常上傳)。"主要是因爲jar文件不能被修改"
大體思路:將jar文件下的static文件目錄映射成對應的磁盤下的某個文件路徑(建議:爲了使用方便則創建的路徑和jar所在的路徑一致)
                之後訪問則會訪問對應磁盤下的某個文件路徑
一、第一步:在啓動類中添加如下代碼(路徑映射)       

//將jar文件下的對應靜態資源文件路徑對應到磁盤的路徑(根據個人的情況修改"file:static/"的static的值)
public void addResourceHandlers(ResourceHandlerRegistry registry) {                            
      registry.
              addResourceHandler("/static/**").
              addResourceLocations("classpath:/static/","file:static/");
}

二、在application.yml或者properties中配置如下內容
 

# file配置(jar和fileUrl自己隨意定義)
jar: 
  fileUrl: E:/dhcc/static/



################
spring:
    resources:
        static-locations: classpath:static/,file:${jar.fileUrl}

三、將打包成功的jar包放入到對應的文件目錄中

四、運行jar使用如下命令:java -cp static -jar cry.jar
結果:

附:部分上傳代碼

文件上傳相關代碼:
@PostMapping("/upload")
	@ResponseBody
	public String fileUpload(@RequestParam("file") MultipartFile file,HttpSession session) {
		JSONObject jsonObject=new JSONObject();
		String  destDir=session.getServletContext().getRealPath("/static/modular/drgreportmg/upload");
		try {            
			FileUtil.fileToDest(file, destDir);
			//保存絕對路徑值
			absoluteUrl=destDir+"/"+file.getOriginalFilename();
			uploadedSize=100;
            jsonObject.put("success", 1);
		} catch (Exception e) {
               jsonObject.put("success", 0);
		}		
		
		return jsonObject.toJSONString();
		
	}



//其他方法就是簡單的邏輯判斷
 public static void fileToDest(MultipartFile file,String destDir){
    	if(file==null){
    		return ;
    	}else{
    		//目標文件路徑值
    		String destUrl=destDir+"/"+file.getOriginalFilename();
    		File dest=new File(destUrl);
    		try {
    			File dir=new File(destDir);
    			//創建文件所在的父目錄
    			if(!dir.exists()){
    				dir.mkdirs();
    			}    			
    			//判斷目標文件是否存在,若不存在則創建一個空的文件
    			if(!dest.exists()){
    				dest.createNewFile();
    			}
    			//複製源文件到目標文件下
    			file.transferTo(dest);
				return ;
			} catch (IOException e) {
				e.printStackTrace();
				return ;
			}
    		
    	}
    }

 

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