7

PyAMFを使用して、動的に生成された大きな画像を Flex から Django に転送しています。Django 側では、encodedb64 データをパラメーターとして受け取ります。

イメージフィールドとしての My Item モデル。私が問題を抱えているのは、データをファイル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。このクラスは 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)
于 2009-03-15T16:08:11.487 に答える