2016-09-19 15 views
10

Tôi đã sau đầu vàoảnh base64 Lưu tập tin trong lĩnh vực django

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

Tôi muốn lưu tập tin này trong lĩnh vực tập tin. Tôi có thể làm gì?

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) 

Tôi đang cố gắng để làm điều này

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

và lưu tập tin trở lại với mô hình dụ

somemodel.file = get_file(image_base64_data) 

nhưng nó đưa ra một lỗi sau

AttributeError at /someurl/ 

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

posibel trả lời http://stackoverflow.com/questions/15115730/saving-a-decoded-temporary-image-to-django-imagefield –

+0

@Anna Vracheva Tôi đang cố gắng câu trả lời này nhưng không giải quyết được vấn đề của tôi . –

+0

Giải pháp giống như được đề cập bởi @AnnaVracheva. Giải mã base64 của bạn và tạo một thể hiện ContentFile và gán nó cho trường mô hình của bạn. Bạn có thể giải thích vấn đề gì bạn phải đối mặt trong đó? – jatinderjit

Trả lời

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. 

Sử dụng đoạn mã này để giải mã chuỗi 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 
Các vấn đề liên quan