При сохранении больших файлов в проекте Django не находит временный файл или директорию
Когда я пытаюсь сохранить большие изображения в моём 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})
Источник: Stack Overflow на русском