Сохраните загруженный 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