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

时间:2009-03-15 14:23:25

标签: python django flex 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)

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

我还认为使用StringIO会将图像数据完全加载到内存中,这是不好的,所以我可能会放弃AMF来解决这个特殊情况并使用POST。

您怎么看?

1 个答案:

答案 0 :(得分: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)