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

如何在Heroku部署的Django REST Framework项目中使用AWS S3存储上传图片

Django DRF对接AWS S3存储图片修改步骤

1. 安装依赖包

安装对接S3需要的两个工具包:

pip install django-storages boto3

安装完成后把两个包的版本信息更新到requirements.txt中,保证Heroku部署时能正常加载依赖。

2. 调整settings.py配置

首先把storages加入已安装应用列表:

INSTALLED_APPS = [
    # 原有其他应用保持不变
    'storages',
]

然后在settings.py末尾添加S3存储相关配置,所有敏感密钥通过环境变量读取,不要硬编码到代码中:

import os # 如果你没导入过os需要先加这行

# AWS S3基础配置
AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY")
AWS_STORAGE_BUCKET_NAME = os.getenv("AWS_STORAGE_BUCKET_NAME")
AWS_S3_REGION_NAME = "替换为你的S3桶所属区域,例如us-east-1"
# 同名文件自动重命名不覆盖,避免旧文件被误删
AWS_S3_FILE_OVERWRITE = False
# 沿用S3桶默认的访问权限配置,无需额外设置公开权限
AWS_DEFAULT_ACL = None

# 修改默认文件存储后端为S3
DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
# 媒体文件访问路径前缀,和原有upload_to配置兼容
MEDIA_URL = f"https://{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_S3_REGION_NAME}.amazonaws.com/media/"

3. 模型代码无需修改

你现有的UploadImage模型不需要做任何调整,upload_to='media/images/'配置会自动生效,后续上传的图片会直接存入S3桶对应路径,接口返回的图片访问链接也会自动替换为S3的公网链接。

4. 配置环境变量

本地开发时可以把AWS相关密钥存入.env文件读取,部署到Heroku时需要到Heroku控制台的Config Vars页面,添加三个变量:AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_STORAGE_BUCKET_NAME,和你settings中读取的变量名保持一致即可。

额外注意事项

  • 对接S3使用的IAM用户需要配置S3桶的读写权限,否则会出现上传失败的问题
  • 提前配置S3桶的CORS规则,允许你的Heroku应用域名访问资源,避免前端跨域无法加载图片
  • 此前已经上传到Heroku本地存储的旧图片需要手动迁移到S3桶,否则后续会随着Heroku实例重启丢失

内容的提问来源于stack exchange,提问作者Sushang Agnihotri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:57:04