SpringBoot项目Eclipse环境下上传图片相对路径异常问题排查
问题核心原因
- 你使用
./开头的相对路径时,路径的基准是Java进程的工作目录(Working Directory),而非你的项目根目录。macOS下Eclipse默认启动SpringBoot项目时,工作目录被设置为Eclipse.app自身的执行路径/Users/chathura/eclipse/jee-2021-03/Eclipse.app/Contents/MacOS/,所以最终文件会被存入Eclipse安装目录内,而非你期望的项目目录。 - Eclipse的项目资源管理器仅会展示项目根目录下的文件,所以你看不到存在Eclipse安装目录内的图片,但终端可以正常访问对应路径是因为文件确实被成功存储了,只是存储位置不符合预期。
- 额外设计问题:
src/main是源码目录,项目编译打包后该目录会消失,即使本地调试路径改对,后续线上部署也会出现找不到路径的问题。
修复方案
方案1:临时修改Eclipse运行配置(仅适合本地调试)
- 打开Eclipse的「Run Configurations」,找到你当前SpringBoot项目对应的启动项
- 切换到
Arguments标签页,找到下方Working directory设置项,选择Other,点击Workspace选中你的项目根目录,保存配置后重启项目即可。此时相对路径的基准会变为项目根目录,文件会存入你指定的src/main/imageuploads目录下。 - 注意:存入
src/main的文件需要右键点击项目选择「Refresh」刷新,Eclipse不会自动同步外部修改的文件。
方案2:配置化存储路径(推荐,兼容本地调试和线上部署)
不要硬编码路径,改为在配置文件中灵活配置上传根目录:
- 在
application.properties中添加配置:
# 本地调试时填写你项目的实际绝对路径,示例: upload.root-dir=/Users/chathura/workspace/你的项目名称/src/main/imageuploads/ # 线上部署时替换为服务器上的存储路径即可
- 代码中注入配置使用,避免硬编码:
@Value("${upload.root-dir}") private String uploadRootDir; // 拼接路径时使用以下写法,自动适配不同系统的路径分隔符 String uploaddir = Paths.get(uploadRootDir, String.valueOf(savedadvert.getId())).toString();
补充提醒:如果需要通过接口直接访问上传的图片,需要额外配置SpringBoot静态资源映射,将
/imageuploads/**的访问路径指向你实际的存储根目录即可。
内容的提问来源于stack exchange,提问作者Chathura Kawshalya
相关产品推荐
相关产品推荐

