При сохранении больших файлов в проекте Django не находит временный файл или директорию

Рейтинг: 0Ответов: 0Опубликовано: 09.04.2023

Когда я пытаюсь сохранить большие изображения в моём Django проекте, Django пытается переместить их во временную папку, которую не может найти на моём компьютере.

Traceback, который я получаю:

Traceback (most recent call last): 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 56, in inner response = get_response(request) 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/Users/sokov/PycharmProjects/4utra/fourmorningpr/website/views.py", line 150, in create PortfolioPhoto.objects.create( 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/query.py", line 671, in create obj.save(force_insert=True, using=self.db) 
File "/Users/sokov/PycharmProjects/4utra/fourmorningpr/website/models.py", line 139, in save super().save() 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/base.py", line 812, in save self.save_base( 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/base.py", line 863, in save_base updated = self._save_table( 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/base.py", line 1006, in _save_table results = self._do_insert( 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/base.py", line 1047, in _do_insert return manager._insert( 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/query.py", line 1791, in _insert return query.get_compiler(using=using).execute_sql(returning_fields) 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1659, in execute_sql for sql, params in self.as_sql(): 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1583, in as_sql value_rows = [ 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1584, in [ 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1585, in self.prepare_value(field, self.pre_save_val(field, obj)) 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1533, in pre_save_val return field.pre_save(obj, add=True) 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/fields/files.py", line 315, in pre_save file.save(file.name, file.file, save=False) 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/db/models/fields/files.py", line 92, in save self.name = self.storage.save(name, content, max_length=self.field.max_length) 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/core/files/storage.py", line 56, in save name = self._save(name, content) 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/core/files/storage.py", line 309, in _save file_move_safe(content.temporary_file_path(), full_path) 
File "/Users/sokov/PycharmProjects/4utra/venv/lib/python3.9/site-packages/django/core/files/move.py", line 62, in file_move_safe with open(old_file_name, "rb") as old_file: 
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/hv/jygv2vpn7fn39fzj69_48l700000gn/T/tmp4yzlihe9.upload.jpg'

models.py

class PortfolioPhoto(models.Model):
    folder_name = models.ForeignKey(PortfolioLabel, on_delete=models.CASCADE, verbose_name='Folder name',
                                    blank=True,
                                    null=True)
    create_date = models.DateTimeField(auto_now=True)
    image = models.ImageField('General photo', upload_to=upload_photo,
                              validators=[FileExtensionValidator(allowed_extensions=['webp', 'jpeg', 'jpg', 'png'])])
    image_s = models.ImageField('Small photo', upload_to=upload_small_photo,
                                validators=[FileExtensionValidator(allowed_extensions=['webp', 'jpeg', 'jpg', 'png'])],
                                )
    enable = models.BooleanField('Enable', default=True)

    def save(self, *args, **kwargs):
        super().save()
        img = Image.open(self.image.path)
        fixed_height = 1200
        # When image height is greater than its width
        if img.height > img.width:
            height_percent = (fixed_height / float(img.height))
            width_size = int((float(img.width) * float(height_percent)))
            img = img.resize((width_size, fixed_height))
            img.save(self.image.path)
        else:
            width_percent = (fixed_height / float(img.height))
            width_size = int((float(img.width) * float(width_percent)))
            img = img.resize((width_size, fixed_height))
            img.save(self.image.path)

    def __str__(self):
        return str(self.create_date)

    class Meta:
        verbose_name = 'Photo'
        verbose_name_plural = 'Photos'

views.py

def create(request, data):
    form = PhotoForm
    if request.method == 'POST':
        files = request.FILES.getlist('image')
        slug = request.path[14:-1]
        for file in files:
            PortfolioPhoto.objects.create(
                folder_name=PortfolioLabel.objects.get(slug=slug),
                image=file,
                image_s=file,
            )
        return HttpResponseRedirect(reverse('detail_portfolio_page', kwargs={'slug': data}))
    return render(request, 'upload_photo_page.html', {'form': form})

Ответы

Ответов пока нет.