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

部署Heroku后Python无法创建JSON文件,求助直接写入S3的方法

解决方案:将JSON文件写入S3存储桶替代Heroku本地文件写入

当然可以直接把JSON文件写入S3存储桶,这不仅能解决你当前的问题,还是适配Heroku环境的最佳实践之一!

先给你解释下为什么Heroku上创建文件没效果:Heroku的dyno(运行你应用的容器)使用的是临时文件系统——你写入的文件只会存在到dyno重启之前(比如部署新版本、自动缩放、每日例行重启),重启后所有临时文件都会被清空。而且Heroku的文件写入操作通常不会抛出异常,这就是你没看到报错但文件没创建成功的原因。

下面是具体实现步骤,跟着做就能搞定:

1. 安装AWS SDK依赖

首先需要安装boto3(AWS的Python SDK),在本地运行:

pip install boto3

然后把boto3添加到你的requirements.txt文件里,这样Heroku部署时会自动安装这个依赖。

2. 配置AWS凭证(安全第一!)

绝对不要把AWS的密钥硬编码到代码里,我们用Heroku的环境变量来存储敏感信息:

  • 打开Heroku控制台,找到你的应用,进入「Settings」→「Config Vars」
  • 添加三个环境变量:
    • AWS_ACCESS_KEY_ID:你的AWS IAM用户访问密钥ID
    • AWS_SECRET_ACCESS_KEY:你的AWS IAM用户秘密访问密钥
    • S3_BUCKET_NAME:你要写入的S3存储桶名称

或者用Heroku CLI命令设置(更快捷):

heroku config:set AWS_ACCESS_KEY_ID=你的访问密钥ID AWS_SECRET_ACCESS_KEY=你的秘密访问密钥 S3_BUCKET_NAME=你的存储桶名称

3. 编写上传JSON到S3的代码

这里给你一个实用的示例函数,直接集成到你的项目里就行:

import boto3
import json
import os

def upload_json_to_s3(json_data, target_filename):
    # 初始化S3客户端,从环境变量读取凭证
    s3_client = boto3.client(
        's3',
        aws_access_key_id=os.getenv('AWS_ACCESS_KEY_ID'),
        aws_secret_access_key=os.getenv('AWS_SECRET_ACCESS_KEY')
    )
    bucket_name = os.getenv('S3_BUCKET_NAME')

    # 将Python字典转为JSON字符串
    json_content = json.dumps(json_data, indent=4, ensure_ascii=False)

    # 上传到S3
    try:
        s3_client.put_object(
            Bucket=bucket_name,
            Key=target_filename,
            Body=json_content,
            ContentType='application/json'
        )
        print(f"✅ JSON文件 {target_filename} 成功上传到S3存储桶 {bucket_name}")
        return True
    except Exception as e:
        print(f"❌ 上传失败:{str(e)}")
        return False

# 调用示例:把你的JSON数据传进去就行
my_json_data = {"user_id": 123, "username": "test_user", "data": ["item1", "item2"]}
upload_json_to_s3(my_json_data, "user_data.json")

4. 额外注意事项

  • 确保你的AWS IAM用户只拥有S3的PutObject权限(最小权限原则),不要给管理员权限,避免安全风险。
  • 如果之后需要读取S3里的JSON文件,可以用boto3的get_object方法,逻辑类似。
  • 本地测试时,可以在本地设置同样的环境变量,先验证功能正常再部署到Heroku。

内容的提问来源于stack exchange,提问作者Abdul Rehman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:41:14