Django媒体上传到AS3

时间:2012-10-15 16:48:41

标签: django amazon-s3 boto django-storage

我正在尝试将所有Django媒体文件(从管理面板上传)上传到Amazon S3。所以设置文件看起来像这样:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'tastypie',
'core',
'advertisment',
'storages',

)

  DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
  AWS_ACCESS_KEY_ID = 'xxx' 
  AWS_SECRET_ACCESS_KEY = 'xxx'
  AWS_STORAGE_BUCKET_NAME = 'media'
  MEDIA_URL = 'https://s3.amazonaws.com/%s/' % AWS_STORAGE_BUCKET_NAME

当我尝试从管理面板上传文件时,出现以下错误:

S3ResponseError: 403 Forbidden

我检查了this回答,但仍然没有帮助

2 个答案:

答案 0 :(得分:2)

您是否安装了boto,因为django-storage依赖于boto?

然后,您必须将以下内容添加到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 = os.environ.get('S3_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 S3上。

我希望它有所帮助

注意:出于安全原因,最好将AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY添加为环境变量,而不是直接在setting.py中将其写下来。

答案 1 :(得分:0)

首先,您需要在您的settings.py中设置您放置媒体文件的媒体网址。本文将帮助您在aws https://www.caktusgroup.com/blog/2014/11/10/Using-Amazon-S3-to-store-your-Django-sites-static-and-media-files/

中设置媒体文件