我正在使用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。
您怎么看?
答案 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)