Сохраните загруженный InMemoryUploadedFile как tempfile на диск в Django

Я сохраняю POST-загруженный файл на диск, используя технику, описанную здесь: Как скопировать объект InMemoryUploadedFile на диск

from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
from django.conf import settings

data = request.FILES['image']
path = default_storage.save('tmp/%s' % filename, ContentFile(data.read()))
tmp_file = os.path.join(settings.MEDIA_ROOT, path)

Файл действительно загружается и сохраняется в указанном месте. Однако его содержимое искажено. Это изображение - и когда я смотрю на сохраненный файл, я вижу, что символы не совпадают, а файл изображения поврежден. Размер файла, однако, такой же, как и у оригинала.

Я предполагаю, что мне нужно сделать какое-то преобразование перед сохранением файла, но как/как...?

Настоятельно рекомендуется использовать FileSystemStorage непосредственно вместо default_storage, так как DEFAULT_FILE_STORAGE может быть установлено другое значение.

from django.core.files.storage import FileSystemStorage
from django.http import HttpResponse


def simple_view(request):
    in_memory_file_obj = request.FILES["file"]
    FileSystemStorage(location="/tmp").save(in_memory_file_obj.name, in_memory_file_obj)
    return HttpResponse("Success")

Примечание: Решение проверено с Django 4.1

Вернуться на верх