2012-10-07 63 views
5

我一直在努力研究如何让AWS S3与Heroku一起使用FileField和ImageField上传。但是我一直没有得到它的工作。Django + Heroku + S3

的计划是

  1. 使用FileField或上传一些文件。
  2. 使用ImageField处理个人资料照片。
  3. 使用Sorl缩略图调整这些图片的大小。

我跟着this的文章,但它似乎没有工作。 有什么,我失踪? 我想要文件上传,尽可能无痛。有没有更好的选择比AWS更友好和更友好?任何在这方面的帮助将不胜感激。

回答

5

使用Django Storages来管理S3上的静态文件。然后按照Heroku Static assets guide when deploying

首先,使用AWS控制台或您最喜欢的工具在S3中创建一个存储桶。然后,修改settings.py并添加以下值:

import os 

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID') 
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY') 
AWS_STORAGE_BUCKET_NAME = '<YOUR BUCKET NAME>' 

STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 

STATIC_URL = 'http://' + AWS_STORAGE_BUCKET_NAME + '.s3.amazonaws.com/' 
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/' 

请注意,我们正在使用环境变量来存储AWS访问密钥和密钥。虽然我们在这个主题上,但如果您打算开源部署您正在部署的Django应用程序,请考虑将您的SECRET_KEY存储在环境变量中。

以上是从here

+0

这太棒了!谢啦!你可能想要做的唯一事情就是,因为这种方法是Boto,所以使用这种方法的任何人都必须安装[Boto](http://pypi.python.org/pypi/boto)。 虽然我确实有另一个问题。我如何添加一个访问控制策略= public-read给它?我尝试在settings.py中添加acl ='public-read',但似乎不起作用 – Jonathan

+0

我只想让Google文档查看器能够访问我上传的文件。有没有办法让这种情况发生? – Jonathan

+0

也许http://aws.amazon.com/s3/faqs/#How_can_I_control_access_to_my_data_stored_on_Amazon_S3应该有所帮助? –