Обработка файлов в Django при публикации изображения из сервисного вызова - PullRequest
7 голосов
/ 15 марта 2009

Я использую 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 пропускает некоторые свойства, такие как режим, имя и т. Д.

Я также думаю, что использование StringIO полностью загрузит данные изображения в память, что плохо, поэтому я могу просто отказаться от AMF для этого конкретного случая и использовать POST.

Что вы думаете?

1 Ответ

9 голосов
/ 15 марта 2009

В 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)
...