我正在尝试使用http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html来同时提供静态文件和上传的媒体文件,但我不确定是否可行。有没有我遗漏的文档方法?此外,我希望你可以为每个文件配置一个单独的存储桶,但我找不到任何相关信息。
我正在尝试使用http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html来同时提供静态文件和上传的媒体文件,但我不确定是否可行。有没有我遗漏的文档方法?此外,我希望你可以为每个文件配置一个单独的存储桶,但我找不到任何相关信息。
将 DEFAULT_FILE_STORAGE
和 STATICFILES_STORAGE
都配置为使用 S3 存储是可能的。但是,如果您设置
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
那么这两个将都使用 S3 存储的默认设置,这意味着它们都将使用 AWS_STORAGE_BUCKET_NAME
存储桶。解决方法是在您的项目中创建一个小的 S3BotoStorage
子类,该子类使用不同的存储桶名称设置。
from django.conf import settings
from storages.backends.s3boto import S3BotoStorage
class S3StaticStorage(S3BotoStorage):
def __init__(self, *args, **kwargs):
kwargs['bucket'] = settings.AWS_STATIC_BUCKET_NAME
super(S3StaticStorage, self).__init__(*args, **kwargs)
然后,您需要定义AWS_STATIC_BUCKET_NAME
设置为您静态桶的名称,并将AWS_STATIC_BUCKET_NAME
更改为此自定义存储类的路径。
STATICFILES_STORAGE = 'dotted.path.to.storage.S3StaticStorage'
如果您想更改其他设置,如AWS_QUERYSTRING_AUTH
、AWS_S3_CUSTOM_DOMAIN
、AWS_PRELOAD_METADATA
等,则也应在此子类中更改它们。
bucket_name
属性为bucket_name = setting('S3_STATIC_STORAGE_BUCKET_NAME')
。 - Johnny 5STATICFILES_STORAGE
使用的存储将使用默认参数和关键字参数进行初始化,因此您需要确保这些默认值是您想要的。 - Mark Lavin