Обработка файлов в Django при публикации изображения из сервисного звонка
Я использую PyAMF для передачи динамически генерируемого большого изображения из Flex в Django. На стороне Django я получаю данные закодированного b64 в качестве параметра:
Моя модель товара как поле изображения. У меня проблемы с сохранением данных в поле File Django.
def save_item(request, uname, data):
""" Save a new item """
item = Item()
img = cStringIO.StringIO()
img.write(base64.b64decode(data))
myFile = File(img)
item.preview.save('fakename.jpg', myFile, save=False)
Это не будет работать, потому что мой объект File из StringIO пропускает некоторые свойства, такие как mode, name и т. Д.
Я также думаю, что использование StringIO полностью загрузит данные изображения в память, что плохо, поэтому я могу просто отказаться от AMF для этого конкретного случая и использовать POST.
Как вы думаете?
1 ответ
В django.core.files.base
вы можете найти класс ContentFile
, Этот класс расширяет базовый Django File
класс, так что вам не нужен StringIO (хотя ContentFile использует его для внутреннего использования). Модифицированный метод сохранения выглядит следующим образом:
from django.core.files.base import ContentFile
def save_item(request, uname, data):
item = Item()
myFile = ContentFile(base64.b64decode(data))
item.preview.save('fakename.jpg', myFile, save=False)