python - framework - img base64
Guarda la imagen base64 en el campo del archivo django (3)
Tengo entrada siguiente
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7YAAAISCAIAAAB3YsSDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAA5JxJREFUeNrsnQl4FEX6xqcJJEAS7ivhBkMAQTSJ4h0QEQ+I90rAc1cOL3QBXXV1AV1dVwmrsCqQ9VwJ6HoC7oon0T8iEkABwRC5IeE+kkAIkPT/nfmSmprunskk5CDw/p55hu7qOr76api8........"
Quiero guardar este archivo en el campo de archivo. ¿Que puedo hacer?
modelos.py
class SomeModel(models.Model):
file = models.FileField(upload_to=get_upload_report)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
Estoy tratando de hacer esto
def get_file(data):
from django.core.files import File
return File(data)
y guardar el archivo de retorno a la instancia del modelo
somemodel.file = get_file(image_base64_data)
pero da un error siguiente
AttributeError at /someurl/
''File'' object has no attribute ''decode''
Esta pregunta parece que debería ayudar: Django: ¿cómo crear un archivo y guardarlo en el FileField de un modelo?
Debería poder decodificar la cadena base64 y proporcionar eso como el argumento de content
a FieldFile.save
:
import base64
from django.core.files.base import ContentFile
format, imgstr = data.split('';base64,'')
ext = format.split(''/'')[-1]
data = ContentFile(base64.b64decode(imgstr), name=''temp.'' + ext) # You can save this as file instance.
Usa este fragmento de código para decodificar la cadena base64.
import base64
from django.core.files.base import ContentFile
image_data = requestData[''user''][''image'']
format, imgstr = image_data.split('';base64,'')
print("format", format)
ext = format.split(''/'')[-1]
data = ContentFile(base64.b64decode(imgstr))
file_name = "''myphoto." + ext
user.image.save(file_name, data, save=True) # image is User''s model field