Heroku部署项目后上传图片定期被删除,该如何解决?
问题根源
你遇到的图片自动删除问题和 dyno 是否休眠无关,核心原因是 Heroku 的 dyno 采用临时易失性文件系统:
- 所有写入本地文件系统的内容,仅在当前 dyno 的运行周期内有效
- Heroku 平台会每24小时自动轮转重启所有运行中的 dyno,和访问量无关,重启后本地文件系统会完全重置为你部署代码时的镜像状态,所有运行过程中写入的文件都会被清空
- UPTIME ROBOT 仅能避免 dyno 因长时间无访问进入休眠,不会改变文件系统的易失性,因此无法解决该问题
解决方案
方案1:对接第三方对象存储服务(最常用)
这是 Heroku 官方推荐的用户上传资源存储方案,你只需要修改项目代码逻辑,将用户上传的图片直接写入对象存储服务,本地仅保存图片的访问链接即可,不需要额外配置 Heroku 端的参数。
方案2:挂载 Heroku 持久化存储附加组件
如果不想修改现有上传逻辑,你可以在 Heroku 应用的附加组件市场选购持久化存储类服务,这类服务会为你的 dyno 提供一个可持久写入的挂载目录,将你项目的上传目录指向该挂载路径后,存入的文件就不会随 dyno 重启丢失。
额外提示
不要将任何需要持久化保留的业务数据、用户生成内容存储在 dyno 默认的本地文件系统中,该设计本身就是用于存储临时缓存、运行时临时文件的,不适合存持久化内容。
内容的提问来源于stack exchange,提问作者rodro 34
相关产品推荐
相关产品推荐

