7

我正在使用PyAMF将动态生成的大图像从 Flex 传输到 Django。在 Django 端,我收到编码的 b64 数据作为参数:

我的项目模型作为图像域。我有麻烦做的是将数据保存为文件 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)

那是行不通的,因为我来自 StringIO 的 File 对象错过了一些属性,例如模式、名称等。

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

你怎么看 ?

4

1 回答 1

9

django.core.files.base你可以找到类ContentFile。该类扩展了基本的 DjangoFile类,因此您不需要 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)
于 2009-03-15T16:08:11.487 回答