2009-03-15 1 views
7

Я использую PyAMF для передачи динамически генерируемого большого изображения из Flex в Django. На стороне Django я получаю данные encodedb64 в качестве параметра:Обработка файлов в Django при отправке изображения с вызова службы

Модель моего объекта как изображение. У меня есть проблемы с сохранением данных в качестве поля Django File.

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.

Как вы думаете?

ответ

9

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