FileNotFoundError [Errno 2] Нет такого файла или каталога: после изменения размера изображений - PullRequest
0 голосов
/ 05 января 2019

Я использую приведенный ниже код для изменения размера моих изображений, и он отлично работает. Однако, когда я иду, чтобы сделать другое занятие. Пример добавления нового сообщения и т. Д. Я получаю сообщение об ошибке

FileNotFoundError в / proof / new_proof / i_climbed_this_mountain

[Errno 2] Нет такого файла или каталога: '/home/samir/Samir/do_tasks/src/Task/media/profile_images/admin_big_XkWnEVw_VvyghrW.jpg'

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)        
    profile_image = models.ImageField(upload_to='profile_images/', default='', blank=True, null=True)

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):
        im = Image.open(self.profile_image)
        output = BytesIO()
        basewidth = 300
        wpercent = (basewidth/float(im.size[0]))
        hsize = int((float(img.size[1])*float(wpercent)))
        im = im.resize((basewidth, hsize))
        im.save(output, format='JPEG', quality=100)
        output.seek(0)
        self.profile_image = InMemoryUploadedFile(output, 'ImageField', "%s.jpg" % self.profile_image.name.split('.')[0], 'image/jpeg',
                                        sys.getsizeof(output), None)

        super(Profile, self).save()

Кроме того, все, что я пытаюсь сделать, корректно выполняется за страницей ошибок. Пример Если я добавляю пост. После нажатия кнопки «Сохранить» я получаю вышеуказанную ошибку. Но пост сделан правильно, и изображение профиля также изменено. Когда я комментирую def save, я могу добавлять сообщения и не получаю ошибок. Любая идея, что может быть причиной этого

Traceback:

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/django/contrib/auth/mixins.py" in dispatch
  56.         return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/django/views/generic/base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/django/views/generic/edit.py" in post
  269.         return self.delete(request, *args, **kwargs)

File "/home/samir/Samir/hello-fresh/src/HF/proof/views.py" in delete
  65.         return super().delete(*args, **kwargs)

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/django/views/generic/edit.py" in delete
  263.         success_url = self.get_success_url()

File "/home/samir/Samir/hello-fresh/src/HF/proof/views.py" in get_success_url
  85.                 user.profile.save()

File "/home/samir/Samir/hello-fresh/src/HF/accounts/models.py" in save
  44.         im = Image.open(self.profile_image)

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/PIL/Image.py" in open
  2613.         fp.seek(0)

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/django/core/files/utils.py" in <lambda>
  20.     seek = property(lambda self: self.file.seek)

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/django/db/models/fields/files.py" in _get_file
  51.             self._file = self.storage.open(self.name, 'rb')

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/django/core/files/storage.py" in open
  38.         return self._open(name, mode)

File "/home/samir/Samir/HelloFreshVenv/lib/python3.6/site-packages/django/core/files/storage.py" in _open
  300.         return File(open(self.path(name), mode))

Exception Type: FileNotFoundError at /proof/proof_delete/grilled-polenta-with-spinach-and-robiola-cheese/29/
Exception Value: [Errno 2] No such file or directory: '/home/samir/Samir/hello-fresh/src/HF/media/profile_images/admin_big_XkWnEVw_VvyghrW_OYB7Ijl_hlaAxap_man4HmS_zcA3TKB_DVKIMRa.jpg'

1 Ответ

0 голосов
/ 08 января 2019

Кажется, что данные образа не записываются на диск при попытке доступа к нему. Попробуйте добавить дополнительные super(Profile, self).save() перед и попробуйте изменить размер изображения:

def save(self, force_insert=False, force_update=False, using=None,
         update_fields=None):
    super(Profile, self).save()  # Call save() before resizing

    im = Image.open(self.profile_image)
    output = BytesIO()
    basewidth = 300
    wpercent = (basewidth/float(im.size[0]))
    hsize = int((float(img.size[1])*float(wpercent)))
    im = im.resize((basewidth, hsize))
    im.save(output, format='JPEG', quality=100)
    output.seek(0)
    self.profile_image = InMemoryUploadedFile(output, 'ImageField', "%s.jpg" % self.profile_image.name.split('.')[0], 'image/jpeg',
                                    sys.getsizeof(output), None)

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