【问题标题】:Django media uploads to AS3Django 媒体上传到 AS3
【发布时间】:2012-10-05 16:48:39
【问题描述】:

我正在尝试将所有 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 的答案,但仍然没有帮助

【问题讨论】:

    标签: django amazon-s3 boto django-storage


    【解决方案1】:

    你安装了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 中。

    【讨论】:

    • 是的,我确实安装了 Boto,但我仍然遇到同样的问题。在花了几个小时试图弄清楚之后,我认为问题在于 boto 何时尝试获取存储桶密钥。请查看我在原始帖子中的编辑。
    • 我刚刚使用了这个设置。我确认它适用于 django 1.6。非常感谢!
    猜你喜欢
    • 2016-02-21
    • 2021-11-03
    • 2020-04-21
    • 2013-09-09
    • 2021-12-12
    • 1970-01-01
    • 2015-10-04
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多