У меня возникли проблемы с сохранением данных изображения base64 в поле изображения django, вот что я пробовал:
так что в основном я получаю данные изображения base64 из внешнего интерфейса, используя запрос POST axios. затем обработайте данные изображения в моем API-интерфейсе django rest framework.
Я пробовал два варианта:
1) запись декодированного base64 во TemporaryFile, затем передача его в imageField
.
2) открытие TemporaryFile
с помощью PIL.Image.open(img_temp)
, а затем преобразование PIL.Image
в InMemoryUploadedFile
и передача его в imageField
.
Однако в обоих случаях я получаю сообщение об ошибке: image
:
["Upload a valid image. The file you uploaded was either not an image or a corrupted image."]
Я не совсем понимаю, почему я получаю эту ошибку, потому что, когда я использовал img.show()
, изображение получалось нормально.
остальная структура Django
base64_data = request.data['image_data'][22:]
decode_image = base64.b64decode(base64_data)
img_temp = TemporaryFile()
img_temp.write(decode_image)
img_temp.flush()
img = PIL.Image.open(img_temp)
img_format = '.' + img.format
img.show()
image_io = BytesIO()
img.save(image_io, format=img.format)
file = InMemoryUploadedFile (
image_io,
None,
'photo' + img_format,
'image/' + img.format,
sys.getsizeof(image_io),
None,
)
img.close()
data = {
'image': File(img_temp) # I have tried passing File(img_tem) and "file" into the image field
}
serializer = ListSerializer(data=data, context={'request': request})
if serializer.is_valid():
instance = serializer.save()
instance.save()