2016-09-19 5 views
10

Ich habe folgende EingabeSpeichern base64 Bild in django Dateifeld

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

ich diese Datei in Dateifeld speichern möchten. Was kann ich tun?

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) 

Ich versuche, diese

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

zu tun und Rückkehr-Datei speichern Instanz

somemodel.file = get_file(image_base64_data) 

zu modellieren, aber es ist gibt einen folgenden Fehler

AttributeError at /someurl/ 

'File' object has no attribute 'decode' 
+2

posibel beantworten http://stackoverflow.com/questions/15115730/saving-a-decoded-temporary-image-to-django-imagefield –

+0

@Anna Vracheva ich versuchen, diese Antwort, aber nicht mein Problem lösen . –

+0

Die Lösung ist die gleiche wie von @AnnaVracheva erwähnt. Dekodieren Sie Ihre base64 und erstellen Sie eine ContentFile-Instanz und weisen Sie diese Ihrem Modellfeld zu. Kannst du erklären, mit welchem ​​Problem du konfrontiert warst? – jatinderjit

Antwort

12
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. 

Mit diesem Code-Schnipsel zu dekodieren die Base64-Zeichenfolge.

3
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