2012-02-13 14 views
3

私はファイルアップロードPOST APIリクエストをdjangoアプリRESTインターフェイスに作成しています。このリクエストは、フォームからファイルを受信して​​いる別のdjangoアプリケーションビューから行われます。私はポスターモジュールを使用していますDjango request.FILESが空です

image = request.FILES['image'] 
from utils.poster.encode import multipart_encode 
from utils.poster.streaminghttp import register_openers 
register_openers() 
datagen, headers = multipart_encode({'file':image.read()}) 
response = urlfetch.fetch(url="url", 
      payload=datagen, 
      method=urlfetch.POST, 
      headers=headers) 

ヘッダーがありませんか? djangoはmultipart/form-dataでどのようにプロセス要求を処理するのですか? これは私が得ているエラーです。

multipart_yielder instance has no attribute '__len__' 

答えて

3

GAEのUrlFetchは、ペイロードに対してmultipart_encode()によって返された出力を使用できません。 UrlFetch.fetchはペイロード上でlen()を実行しており、multipart_encodeによって返されるペイロードはPythonジェネレータであり、通常はlen()をサポートしていません。

回避策は、最初にペイロード文字列を作成することですが、大きなファイルには大量のメモリが使用されます。

datagen, headers = multipart_encode({'file':image.read()}) 
data = str().join(datagen)  
response = urlfetch.fetch(url="url", 
     payload=data , 
     method=urlfetch.POST, 
     headers=headers) 

問題が報告されましたhereです。

関連する問題