#django #amazon-web-services #amazon-s3 #signals
Вопрос:
Я написал сигнал pre_save в Django для автоматического удаления старого профиля пользователя, если пользователь обновит свой профиль. Это мой код.
@receiver(pre_save, sender=User) def delete_file_on_update(sender, instance, **kwargs): """ Delete the user's old profile pic file when user update the profile and return the status True or False i.e where old pic is deleted or not. """ # If instance is saving for first time in database, don't delete # profile_pic file. try: old_file = sender.objects.get(pk=instance.pk).profile_pic except sender.DoesNotExist: return False # If user has not updated profile pic, don't delete profile_pic # file. new_file = instance.profile_pic if old_file == new_file: return False try: old_file.delete(save=False) return True except Exception: return False
Это работало нормально, когда хранилище было локальным, но когда я использовал хранилище AWS s3, оно больше не удаляет старый profile_pic. Также при отладке этот сигнал вызывается для каждого предварительного сохранения пользователя и old_file.удаление(сохранить=ложь) также выполняется, но файл не удаляется на AWS s3.
Комментарии:
1. Где ваш код для удаления объекта из S3?
2. в последней попытке-за исключением того, что я написал old_file. удалить(сохранить=false), old_file-это старый профиль пользователя и объект файла изображения.
3. Единственная причина, которая приходит мне на ум, — это неправильная конфигурация S3, но вопрос нуждается в разъяснении по этой части. Можете ли вы сохранить фотографию профиля с помощью S3? Имеет ли ваша локальная среда доступ к корзине S3 с необходимыми разрешениями для создания/удаления объектов? Для участников всегда лучше, если вы поделитесь более подробной информацией (например, содержимым файла связанных настроек) перед отправкой своего вопроса.
4. Профиль пользователя _pic загружается на AWS s3. Но как я могу узнать, есть ли у меня разрешение на удаление объекта на s3 из локальной среды.
5. Добавьте ведение журнала, особенно в обработчиках исключений.