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

如何在Heroku托管的Django项目中使用Dropbox存储媒体文件?

方案可行性说明

针对你提到的Heroku环境下的媒体存储需求,使用Dropbox托管媒体文件的方案完全可行,但需要提前明确免费版的能力边界:Dropbox免费个人账号总存储容量为2GB,接口调用有固定频率阈值,仅适合低流量的个人项目、小型站点使用,如果后续访问量上升,免费额度会快速触顶。

具体配置流程

整个对接过程可以通过你找到的django-storages包完成,不需要自行编写Dropbox接口对接的重复逻辑,步骤如下:

1. 安装依赖

先在本地项目的虚拟环境安装需要的两个依赖包,记得把版本固化到项目的requirements.txt中,避免Heroku部署时拉取到不兼容的新版本:

  • 安装核心依赖:
    pip install django-storages
    pip install dropbox
    
  • 安装完成后,把storages加入settings.py的INSTALLED_APPS列表,否则Django无法识别对应的自定义存储后端。

2. Dropbox侧准备工作

  • 登录Dropbox账号进入开发者管理后台,创建独立应用时选择「仅访问应用专属独立文件夹」的权限范围,不要开放全账号访问权限,避免应用获取到你私人存储的全部文件权限,安全性会高很多
  • 为应用生成长期有效的访问令牌,后续全链路对接都靠这个令牌完成鉴权,需要特别注意这个令牌属于敏感凭证,绝对不能硬编码写进代码提交到公开代码仓库,后续要存在Heroku的环境变量中使用

3. 项目配置修改

在settings.py中替换原本的本地媒体存储配置,所有敏感值全部从环境变量读取,不要硬编码到代码里:

# 从Heroku环境变量读取Dropbox访问令牌
DROPBOX_OAUTH2_TOKEN = os.environ.get("DROPBOX_MEDIA_ACCESS_TOKEN")
# 指定Dropbox中存储媒体文件的根目录
DROPBOX_ROOT_PATH = "/media"
# 将默认的本地文件存储后端替换为Dropbox存储
DEFAULT_FILE_STORAGE = "storages.backends.dropbox.DropboxStorage"
# 保留本地开发时的媒体路径配置,不影响本地调试流程
MEDIA_URL = "/media/"
MEDIA_ROOT = BASE_DIR / "media"

实用提示:不要用Dropbox托管项目的静态文件,静态文件在Heroku上通过Whitenoise托管的性能和稳定性远高于走Dropbox接口,Dropbox仅用来存储用户上传的媒体文件即可。

4. 常见踩坑提醒

  • 第一次测试文件上传前,先在Dropbox的应用专属文件夹内手动创建media目录,否则路径不匹配会触发接口404错误
  • Dropbox免费版的API日均调用阈值约为1000次,媒体文件读取量稍大时就要配置前端缓存,不然很容易触发接口限频导致文件加载失败
  • 配置完成后先在本地环境测试一遍文件上传、读取的全流程,确认没有权限类问题后再部署到Heroku,避免线上环境出现不必要的故障

内容的提问来源于stack exchange,提问作者riddhi athreya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 11:54:02