部署在Heroku的Express应用运行后用户头像及封面图丢失问题咨询
问题根因
Heroku 平台的 dyno 采用临时文件系统:每次应用重新部署、dyno 自动重启(Heroku 每24小时会强制重启所有运行中的dyno)、或者应用扩容/缩容时,所有写入到本地磁盘的文件都会被清空重置。你本地运行正常是因为本地开发环境的文件系统是持久化存储的,和Heroku的运行机制完全不同。
从你提供的主代码来看,你配置了express.static映射public目录,同时注册了/uploads路由处理上传请求,说明当前上传逻辑是将文件写入了Heroku的本地磁盘,这正是文件消失的直接诱因。
修复方案
- 替换存储方案:将用户上传的头像、封面图等资源存储到第三方对象存储服务中,这类服务专门用于静态资源存储,提供持久化存储和CDN加速能力。你只需要在用户上传时将文件发送到对应服务的接口,拿到资源的公网访问链接后存入你的MongoDB数据库即可,不需要再存储到应用本地磁盘。
- 调整上传逻辑:修改你
uploadRoutes路由对应的处理代码,把原本使用fs模块写入本地磁盘的逻辑,替换为对应对象存储服务的SDK上传逻辑。 - 若不想额外接入第三方服务,也可以选择将小体积图片转为Base64格式存入MongoDB,但该方案会额外增加数据库的存储压力,不推荐生产环境使用。
内容的提问来源于stack exchange,提问作者dayan ibrar
相关产品推荐
相关产品推荐

