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

如何将S3存储桶中的CSV文件提供给部署在Heroku上的Python应用

解决Heroku上Dash应用无法读取静态文件的问题

可能的原因及解决方案

1. 本地文件路径不匹配Heroku环境

Heroku的文件系统结构和本地开发环境不同,绝对路径会失效,建议用动态路径获取:

  • 使用os.path模块拼接相对路径,示例:
    import os
    
    # 获取当前脚本所在目录
    current_dir = os.path.dirname(os.path.abspath(__file__))
    # 拼接静态文件路径
    csv_path = os.path.join(current_dir, 'data', 'your_file.csv')
    html_map_path = os.path.join(current_dir, 'maps', 'your_map.html')
    
  • 部署前确认项目目录结构,确保静态文件在Git追踪范围内(没被.gitignore排除)。

2. 利用已配置的AWS S3存储读取静态文件

既然已经完成AWS权限配置,直接从S3读取文件是更稳定的方案(Heroku临时文件系统重启后会丢失文件):

  • 使用boto3库从S3下载或直接读取文件内容:
    import boto3
    import pandas as pd
    
    s3 = boto3.client('s3')
    # 读取CSV文件到DataFrame
    csv_obj = s3.get_object(Bucket='your-bucket-name', Key='path/to/your_file.csv')
    df = pd.read_csv(csv_obj['Body'])
    
    # 读取HTML地图文件内容
    html_obj = s3.get_object(Bucket='your-bucket-name', Key='path/to/your_map.html')
    map_html = html_obj['Body'].read().decode('utf-8')
    

3. 验证文件是否已部署到Heroku

  • 登录Heroku CLI,进入应用目录执行heroku run bash,然后用ls命令查看文件是否存在于预期路径下:
    heroku run bash
    # 在Heroku容器内执行
    ls data/  # 检查CSV所在目录
    ls maps/  # 检查HTML地图所在目录
    
  • 如果文件不存在,检查.gitignore是否包含了这些文件/目录,确保它们被提交到Git并推送到Heroku。

4. 检查文件存在性与权限

  • 在代码中添加文件存在性检查,快速定位路径问题:
    import os
    
    csv_path = 'data/your_file.csv'
    if not os.path.exists(csv_path):
        raise FileNotFoundError(f"静态文件未找到:{csv_path}")
    
  • 本地文件权限设置无需特殊调整,Git提交后Heroku容器内会自动赋予合理权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:20:31