Spring Cloud上传图片到项目根路径文件夹下(完美解决,有问题捶我)

前言

来看看离过年还有一个月,已经想着放假的这位。
在这里插入图片描述
在这里插入图片描述

还有已经放假在家放飞自我,又会赚钱的另一位。

在这里插入图片描述

人与人的悲欢并不相通,我只是觉得他们吵闹。
在这里插入图片描述

正文

Spring Boot上传图片到项目根路径文件夹下

之前都是借助DFS分布式文件系统。

那现在为啥不用了呢?我就上传几张图片,再搭个DFS文件系统,这不高射炮打蚊子嘛,人间不值得。

文件写到本项目的跟路径下。

	  if (file.isEmpty()) {
         return Result.fail("文件不能为空");
      }
      // 拿到文件名
      String filename = file.getOriginalFilename();

      // 存放上传图片的文件夹
      String img = "static/upload/" + DateHelper.dateToStringYYYYMMDD(new Date());
      // 构建上传文件的存放 "文件夹" 路径
      String fileDirPath = new String("src/main/resources/"  + img);
      String url = InetAddress.getLocalHost().getHostAddress() + ":" + port + img;
      File fileDir = new File(fileDirPath);
      if(!fileDir.exists()){
          // 递归生成文件夹
          fileDir.mkdirs();
      }
      // 输出文件夹绝对路径  -- 这里的绝对路径是相当于当前项目的路径而不是“容器”路径
      File newFile = null;
      try {
          // 构建真实的文件路径
          newFile = new File(fileDir.getAbsolutePath() + File.separator + filename);
          file.transferTo(newFile);
      } catch (IOException e) {
          e.printStackTrace();
      }

上传图片后返回的状态码是0,没问题,成功了呀!!!那项目的根目录下怎么没图片呢?

首先是上传文件成功了,但是去哪了不知道,这时候就需要打个断点排查了。

在这里插入图片描述
发现是少了路径。Spring Cloud项目,获取的绝对路径到父工程,那加上项目的子工程名是不是就完美解决了。

// 构建上传文件的存放 "文件夹" 路径
String fileDirPath = new String("shiyi/src/main/resources/"  + img);

确实是,完美解决。搞完收工,感觉今天能下个早班啊!!!能回去和我家宝贝视频一起奋斗,美滋滋。

在这里插入图片描述

但是。。。通过url访问,结果显示404,我裂开了,怎么能404。明明文件夹下已经创建目录成功并且有了原文件,那怎么回事呢?

在这里插入图片描述
那怎么办?

重启!!! 重启能解决百分之99的问题。要是没解决,那就是电脑的问题了。

果然,重启从来没让我失望过,确实能访问了,但总不能上传一次图片,重启一次服务吧。

重启大招都用完了,无计可施,该怎么办呢? 百度。

在这里插入图片描述
解决办法

//新增加一个类用来添加虚拟路径映射
@Configuration
public class FileUploadConfig extends WebMvcConfigurerAdapter {


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //获取文件的真实路径
        String path = System.getProperty("user.dir")+"\\src\\main\\resources\\static\\upload\\";
        //static/upload/**是对应resource下工程目录
        registry.addResourceHandler("static/upload/**").addResourceLocations("file:"+path);
        super.addResourceHandlers(registry);
    }
}

百度的结果是需要配置虚拟文件路径的映射

配置后发现还是访问不了,是人品的问题嘛?当然。。。不是了。

太蠢了,前面刚少加了子工程的目录,到这里又忘记了。

//获取文件的真实路径
String path = System.getProperty("user.dir")+"\\shiyi\\src\\main\\resources\\static\\upload\\";
//static/upload/**是对应resource下工程目录

这次总没问题了吧,搞完收工。

在这里插入图片描述
上次点赞、在看的人已经脱单!!!你还在等什么,点个关注吧。

我是失忆,一个热爱技术的宅男,文章有任何问题您都可以在留言中指出。欢迎大家点赞、在看、留言。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

失忆老幺

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

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

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

打赏作者

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

抵扣说明:

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

余额充值