2009-03-15 2 views
7

PyAMFを使用して、動的に生成された大きな画像をFlexからDjangoに転送しています。 Django側では、パラメータとしてencodedb64データを受け取ります。サービスコールからの画像投稿時のDjangoでのファイル操作

My Itemモデルを画像フィールドとして使用します。 私は、ファイルDjangoフィールドとしてデータを保存することが問題です。

たStringIOから私のFileオブジェクトは、このようなモードなどいくつかのプロパティを逃すので、動作しません
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がメモリに完全に画像データをロードします使用することはそれほど悪くしていると思いますこの特定のケースではAMFをあきらめてPOSTを使用することがあります。

あなたはどう思いますか?

答えて

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) 
関連する問題