2016-09-19 5 views
10

Я следующий входнойСохранить base64 изображение в поле Джанго файла

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

Я хочу сохранить этот файл в поле файл. Что я могу сделать?

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) 

Я пытаюсь сделать это

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

и сохранить возвратный файл экземпляра модели

somemodel.file = get_file(image_base64_data) 

но это дает следующее сообщение об ошибке

AttributeError at /someurl/ 

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

posibel ответить http://stackoverflow.com/questions/15115730/saving-a-decoded-temporary-image-to-django-imagefield –

+0

@Anna Vracheva Я попробовать этот ответ, но не решить мою проблему , –

+0

Решение такое же, как упоминалось @AnnaVracheva. Расшифруйте свой base64 и создайте экземпляр ContentFile и назначьте его в поле модели. Можете ли вы объяснить, в чем проблема, с которой вы столкнулись? – jatinderjit

ответ

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. 

Используйте этот фрагмент кода для декодирования строка base64.

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 

 Смежные вопросы

  • Нет связанных вопросов^_^