I am using django-storages and sorl_thumbnail together and I am using Amazon S3 for static and media files. I am using one bucket with 2 folders, 1 for static and 1 for media.
Here is my config:
MEDIA_ROOT = '/media/'
MEDIA_URL = 'https://s3.amazonaws.com/my-bucket/media/'
STATIC_ROOT = '/static/'
STATIC_URL = 'https://s3.amazonaws.com/my-bucket/static/'
AWS_STORAGE_BUCKET_NAME = 'my-bucket'
DEFAULT_FILE_STORAGE = 'my_lib.s3utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE = 'my_lib.s3utils.StaticRootS3BotoStorage'
MediaRootS3BotoStorage
and StaticRootS3BotoStorage
are defined like this:
StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='media')
When I am using sorl_thumbnail, the thumbnails generated are located in the right directory: https://s3.amazonaws.com/my-bucket/media/cache
but when sorl_thumbnail is trying to retrieve an already existing thumbnail, the URL generated is: https://s3.amazonaws.com/my-bucket/cache
, you will notice that the media
folder is omitted.
Do you have any idea how I could fix that?
I know I could just use django-storages and have my static and media files all mixed up in my bucket, but that's a bit too dirty for my taste :)
Thank you!
I was able to make it work by defining MediaRootS3BotoStorage and StaticRootS3BotoStorage as follows:
from storages.backends.s3boto import S3BotoStorage
from django.conf import settings
class StaticRootS3BotoStorage(S3BotoStorage):
"""
Storage for static files.
"""
def __init__(self, *args, **kwargs):
kwargs['location'] = 'static'
super(StaticRootS3BotoStorage, self).__init__(*args, **kwargs)
class MediaRootS3BotoStorage(S3BotoStorage):
"""
Storage for uploaded media files.
"""
def __init__(self, *args, **kwargs):
kwargs['location'] = 'media'
super(MediaRootS3BotoStorage, self).__init__(*args, **kwargs)
This link can be helpful https://github.com/jamstooks/django-s3-folder-storage
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With