You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot部署Heroku后无法访问上传资源,返回404错误

问题根因

1. Heroku临时文件系统限制

这是最核心的问题:Heroku的dyno实例使用的是临时文件系统,仅在dyno运行周期内有效,所有写入本地磁盘的文件(包括你上传的product-photos目录下的图片),会在dyno重启、应用重新部署、甚至dyno自动休眠唤醒后被全部清空。如果你的应用开了多个dyno实例,上传到A实例的图片,B实例也完全无法访问。

2. 跨平台路径协议适配问题

本地Windows环境下file://加绝对路径的写法可以正常运行,但Heroku使用的是Linux操作系统,Linux下本地文件的协议前缀需要是file:///(三个斜杠),你当前的拼接逻辑少了一个斜杠,导致资源路径解析错误。


修复方案

临时修复路径适配问题(仅解决路径解析错误,无法解决文件丢失问题)

修改MvcConfig类里的资源处理器注册逻辑,不要硬编码协议前缀,直接使用file:拼接路径,Spring会自动适配不同操作系统的协议格式:

registry.addResourceHandler("/" + dirName + "/**").addResourceLocations("file:" + uploadPath + "/");

修改后你可以在上传逻辑和资源注册逻辑里新增路径日志打印,验证Heroku环境下的路径是否符合预期。

长期可用的生产级修复方案

Heroku官方明确不推荐将用户上传的文件存储在本地文件系统,你需要替换为第三方对象存储服务,上传时直接将图片传到对象存储中,页面展示时直接使用对象存储的公网访问地址,完全规避本地存储的所有问题。


内容的提问来源于stack exchange,提问作者Shubhanshu Saxena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:06:04