Django сохранение, удаление и просмотр загруженных пользователем медиа с тем же именем - PullRequest
0 голосов
/ 11 июня 2019

У меня есть приложение профиля, где пользователи могут загрузить изображение профиля. Я сохраняю картинку с именем пользователя, например. ifakih.jpg. Если этот файл уже существует, и они хотят изменить изображение своего профиля, я удаляю старый и заменяю его новым. Я вижу изменения в моем каталоге. Старый ifakih.jpg заменяется новым. Тем не менее, мой сайт по-прежнему использует старое изображение. Если я иду к администратору и проверяю поле изображения для этого пользователя, оно указывает на правильный каталог и изображение, но содержимое неверно.

Models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=64,blank=True)
    profilePic = models.ImageField(blank=True, null=True, upload_to= path_and_rename)
    phoneNumber = models.CharField(max_length=12,blank=True)
    streetAddress = models.CharField(max_length=64,blank=True)

@receiver(pre_delete, sender=Profile)
def post_delete(sender, instance, **kwargs):
"""
Deleting the specific image of a Post after delete it
"""
   if instance.profilePic:
       if os.path.isfile(instance.profilePic.path):
          os.remove(instance.profilePic.path)

 @receiver(pre_save, sender=Profile)
 def post_update(sender, instance, **kwargs):
  """
  Replacing the specific image of a Post after update
  """
  if not instance.pk:
     return False

  if sender.objects.get(pk=instance.pk).profilePic:
      old_image = sender.objects.get(pk=instance.pk).profilePic
      new_image = instance.profilePic
      if not old_image == new_image:
          if os.path.isfile(old_image.path):
              os.remove(old_image.path)
  else:
     return False  

1 Ответ

0 голосов
/ 11 июня 2019

Похоже, проблема связана с кэшированием изображений в браузере.

Чтобы увидеть, связано ли это с этим, попробуйте перезагрузить компьютер с помощью STRG + F5, чтобы игнорировать кэшированные файлы (вы можете отключить кэш браузера на вкладке сети).

Эту проблему можно решить вдвумя способами:

1) Вы отключаете кэширование для изображений своего профиля, чтобы браузер всегда загружал изображение и не кэшировал его вообще.Это приводит к увеличению трафика на вашем сервере, а также к увеличению времени загрузки вашего сайта.(НЕ рекомендуется)

2) Вы изменяете поведение при сохранении файла и допускаете использование разных имен файлов.Таким образом, браузер загрузит изображение для первого запроса, а затем сможет использовать его кэш.ImageField также сгенерирует вам уникальное имя при сохранении.(Предпочтительно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...