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 ;
			}
    		
    	}
    }

 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长了脚の妖怪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值