NamedTemporaryFile срабатывает SuspiciousFileOperation

В django версии 3.2.12 я пытаюсь загрузить изображение, для которого у меня есть URL, и сохранить его в поле ImageField. Это выглядит следующим образом:

def load_image_from_url(self):
    image_file = NamedTemporaryFile(delete=True, dir='project/media')
    with urlopen(self.extra_large_url) as uo:
        assert uo.status == 200
        image_file.write(uo.read())
        image_file.flush()
    image = File(image_file)
    self.image.save(image.name, image)

Когда я создаю NamedTemporaryFile, создаваемый путь является абсолютным путем.

В django.core.files.utils он блокируется при следующем условии:

if allow_relative_path:
    # Use PurePosixPath() because this branch is checked only in
    # FileField.generate_filename() where all file paths are expected to be
    # Unix style (with forward slashes).
    path = pathlib.PurePosixPath(name)
    if path.is_absolute() or '..' in path.parts:
        raise SuspiciousFileOperation(
            "Detected path traversal attempt in '%s'" % name
        )

При задании аргумента dir для NamedTemporaryFile проблема сохраняется, даже если папка является подкаталогом проекта.

Есть ли лучшее решение, чем делать это:

    self.image.save(os.path.basename(image.name), image)
Вернуться на верх