Введение:
У меня есть веб-приложение Django, которое размещено на AWS. Кроме того, мои статические и мультимедийные файлы хранятся на AWS S3. У меня в S3 2 ведра, а именно Static и Media . Все работало нормально. Теперь я хотел добавить библиотеку JavaScript, которая уменьшает изображения на стороне клиента и загружает изображения в мою медиа-папку. Мне удалось сделать это успешно на стадии разработки.
Улов:
Библиотека JavaScript использует папку (я назвал папку filepond-temp-uploads ), где она временно сохраняет изображения, пока пользователь заполняет форму, и когда форма отправляется, она сохраняет ее в папки Media и удаляет ее из папки filepond-temp-uploads
Это прекрасно работает на моей стадии разработки. Сейчас на моей стадии производства. Папки Static и Media правильно настроены в моем S3 ( См. Код ниже ). Мне нужно знать, как добавить filepond-temp-uploads папка для моего S3 в моем файле настроек Django
Мой код:
AWS_DEFAULT_ACL = None
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
DEFAULT_FILE_STORAGE = 'aws_storage_classes.MediaStorage'
AWS_STORAGE_BUCKET_NAME = 'some_aws_busket_6d'
STATICFILES_STORAGE = 'aws_storage_classes.StaticStorage'
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_S3_DOMAIN = "%s.s3.amazonaws.com" % AWS_STORAGE_BUCKET_NAME
STATIC_URL = 'https://%s/static/' % AWS_S3_DOMAIN
MEDIA_URL = 'https://%s/media/' % AWS_S3_DOMAIN
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
У меня есть другой файл на моем корневом уровне с именем aws_storage_classes.py Ниже приведен код в этом файле
from storages.backends.s3boto import S3BotoStorage
class StaticStorage(S3BotoStorage):
location = 'static'
class MediaStorage(S3BotoStorage):
location = 'media'
Ниже приведен код для моих filepond-temp-uploads в моих настройках django
DJANGO_DRF_FILEPOND_UPLOAD_TMP = os.path.join(BASE_DIR, 'filepond-temp-uploads')
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': os.path.join(BASE_DIR, 'debug.log'), #This is a file created by the library. Should I add this to my S3?. I am not sure But If I can I would love to.
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'stream': sys.stdout,
},
},
'loggers': {
'django_drf_filepond': {
'handlers': ['console'],
'level': 'DEBUG',
},
'django': {
'handlers': ['console'],
'level': 'ERROR', #'DEBUG',
'propagate': True,
},
},
}
TEMP_EXPIRE_MIN = 300
Я могу создать папку с именем filepond-temp-uploads в моем S3, как мне связать ее в настройках django.
Я попробовал ниже
Добавление еще одной папки с именем filepond-temp-uploads
в мой aws S3 вместе с папками static
и media
Добавление другого класса в мой aws_storage_classes.py в моем проекте django
из хранилищ. Backends.s3boto import S3BotoStorage
class StaticStorage(S3BotoStorage):
location = 'static'
class MediaStorage(S3BotoStorage):
location = 'media'
class FilepondStorage(S3BotoStorage):
location = 'filepond-temp-uploads'
Затем я изменил свой settings.py
, как показано ниже
DEFAULT_FILE_STORAGE = 'aws_storage_classes.MediaStorage'
AWS_STORAGE_BUCKET_NAME = 'some_aws_busket_6d'
STATICFILES_STORAGE = 'aws_storage_classes.StaticStorage'
DJANGO_DRF_FILEPOND_UPLOAD_TMP = 'aws_storage_classes.FilepondStorage' #I added this
и прокомментировал ниже
#DJANGO_DRF_FILEPOND_UPLOAD_TMP = os.path.join(BASE_DIR, 'filepond-temp-uploads')
Однако это не сработало. Есть идеи?