Enregistrer l'image base64 dans le champ de fichier django

j'ai l'entrée suivante

"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7YAAAISCAIAAAB3YsSDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAA5JxJREFUeNrsnQl4FEX6xqcJJEAS7ivhBkMAQTSJ4h0QEQ+I90rAc1cOL3QBXXV1AV1dVwmrsCqQ9VwJ6HoC7oon0T8iEkABwRC5IeE+kkAIkPT/nfmSmprunskk5CDw/p55hu7qOr76api8........"

je veux enregistrer ce fichier dans le champ fichier. Que puis-je faire?

models.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)

je suis en train de le faire

def get_file(data):
    from django.core.files import File
    return File(data)

et enregistrer le fichier de retour à l'instance de modèle

somemodel.file = get_file(image_base64_data)

mais il donne une erreur suivante

AttributeError at /someurl/

'File' object has no attribute 'decode'
22
demandé sur NIKHIL RANE 2016-09-19 17:53:31

3 réponses

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.

utilisez ce code pour décoder la chaîne base64.

24
répondu Vaibhav Mule 2017-07-26 14:58:04
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
8
répondu Abhisek 2017-12-29 07:40:07

cette question semble devoir aider: Django - comment créer un fichier et le sauvegarder dans le champ de fichier d'un modèle?

vous devriez être en mesure de décoder la chaîne base64 et fournir que comme l'argument content à FieldFile.save :

3
répondu souldeux 2017-05-23 12:25:30