如何将输出文件从Django保存到Amazon S3

时间:2015-02-02 17:04:10

标签: python django heroku amazon-s3

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

  

df.to_csv()

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

2 个答案:

答案 0 :(得分: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()))

答案 1 :(得分:1)

看看Boto。代码非常简单,您不必担心直接将文件写出来。

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