Я пытаюсь реализовать возможность загрузки изображений в Amazon S3 в моем приложении Django, используя django -хранилища, boto3, whitenoise и подушку. Я следовал этому уроку , а также этому , и хотя я смог успешно загрузить свои статичные c ресурсы для загрузки из S3, я не могу похоже, мое приложение загружается в медиа-папку на S3. Он по-прежнему загружает изображения в локальную среду.
Есть ли что-то, чего мне не хватает в этих конфигурациях, что является причиной этого? Я фокусируюсь на неправильной части проекта?
Мои настройки имеют следующую конфигурацию в соответствии с двумя учебниками:
settings.py
STATIC_URL = '/static/'
AWS_LOCATION = 'static'
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 = '<my-bucket>'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
DEFAULT_FILES_STORAGE = '<my-project>.storage_backends.MediaStorage'
STATICFILES_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
]
AWS_DEFAULT_ACL = None
С файлом storage-backends.py в том же каталоге, содержащим следующее:
from storages.backends.s3boto3 import S3Boto3Storage
class MediaStorage(S3Boto3Storage):
location = 'media'
file_overwrite = False
В models.py есть:
profile_pic = models.ImageField(upload_to='profile_pics/', blank=True)
Что не доставляло мне никаких проблем до того, как я реализовал белый шум для развертывания, но белый шум не очень хорошо работает с локальными файлами, так что это ожидалось.
Я пытался выполнить миграцию, меняя разрешения на ведро, создание нового ведра, сбор данных c, настройка различных конфигураций выше, и до сих пор не повезло ни с чем.
В настоящее время я работаю в локальной среде разработки с Docker, но Я успешно смог заставить ресурсы stati c работать как в локальной среде, так и в промежуточной среде в Heroku.