【问题标题】:How do I save an output file from Django to Amazon S3如何将 Django 的输出文件保存到 Amazon S3
【发布时间】:2015-04-01 16:51:56
【问题描述】:

作为该过程的一部分,我的网站从 pandas 数据框创建了一个 csv 文件 -

df.to_csv()

由于应用程序部署在 Heroku 上,这里没有持久文件存储,我想将其保存到 Amazon S3。我已经为上传的文件和静态文件设置了这个,但不能让它为此工作。非常感谢任何帮助。

【问题讨论】:

    标签: python django heroku amazon-s3


    【解决方案1】:

    也许您可以使用django-storages 将您的文件保存到 Amazon S3。像这样将您的 AWS 凭证添加到您的配置中:

    heroku config:add AWS_ACCESS_KEY_ID='your_key_here'
    heroku config:add AWS_SECRET_ACCESS_KEY='your_secret_here'
    heroku config:add AWS_STORAGE_BUCKET_NAME='your_bucket_name_here'
    

    并像这样在您的 settings.py 中检索它们:

    AWS_ACCESS_KEY = os.environ.get('AWS_ACCESS_KEY_ID')
    AWS_SECRET_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
    AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
    

    更新:您可以尝试StringIO 执行以下操作:

    from django.core.files.base import ContentFile
    from StringIO import StringIO
    
    output = StringIO()
    df.to_csv(output)
    mymodel.myfield.save('django_test.csv', ContentFile(output.getvalue()))
    

    【讨论】:

    • 我正在使用 django-storages 存储静态和上传的媒体文件,效果很好。如何使用它来保存在程序运行过程中创建的文件? df.to_csv(s3_storage.open(...)) 不起作用...
    • 我认为你需要类似with open(csv_filename, 'rb') as f:mymodel.myfield.save('django_test.csv', File(f), save=True)
    【解决方案2】:

    看看博托。该代码非常简单,您不必担心将文件写出,只需直接发布即可。

    heroku config:add AWS_ACCESS_KEY_ID='your_key_here'
    heroku config:add AWS_SECRET_ACCESS_KEY='your_secret_here'
    

    Boto 将自动使用配置:

    import boto
    filecontents = "colm1, colm2, etc"
    c = boto.connect_s3()
    b = c.get_bucket('mybucket') # substitute your bucket name here
    from boto.s3.key import Key
    k = Key(b)
    k.key = filecontents
    k.get_contents_as_string()
    'colm1, colm2, etc'
    

    阅读更多:http://boto.readthedocs.org/en/latest/s3_tut.html

    【讨论】:

      猜你喜欢
      • 2017-10-08
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2015-09-25
      • 2011-10-07
      • 2015-12-05
      • 2019-10-26
      • 2017-06-14
      相关资源
      最近更新 更多