从服务调用发布图像时Django中的文件处理

cou*_*lix 7 python apache-flex django pyamf

我正在使用PyAMF将动态生成的大图像从Flex传输到Django.在Django方面,我收到encodedb64数据作为参数:

我的物品模型作为图像场.我无法做的是将数据保存为File Django Field.

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)
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我从StringIO的File对象遗漏了一些属性,如模式,名称等.

我还认为使用StringIO会将图像数据完全加载到内存中,这很糟糕所以我可能会放弃AMF来处理这个特殊情况并使用POST.

你怎么看 ?

Guð*_*r H 9

django.core.files.base你可以找到类ContentFile.该类扩展了基本的Django File类,因此您不需要StringIO(尽管ContentFile在内部使用).修改后的save方法如下所示:

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)
Run Code Online (Sandbox Code Playgroud)