2012-10-07 70 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應該有所幫助? –