Обработка файлов в 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)
Другие вопросы по тегам