2011-08-08 13 views
2

PhonegapアプリケーションからPython App Engineプロジェクトに画像をアップロードしようとしています。電話アプリはファイルをアップロードしようとしますが、App Engineは「リストのインデックスが範囲外です」というエラーを返します。App Engineの "リストのインデックスが範囲外です"ファイルをアップロードできません

私はエラーがようである

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler): 
    def post(self): 
    upload_files = self.get_uploads('file')  
    blob_info = upload_files[0]   
    self.redirect('/serve/%s' % blob_info.key()) 

し、ファイルを送信するためのPhoneGap側に次のコードを、

function uploadImage() { 
     var smallImage = document.getElementById('cameraImage'); 
     if (smallImage.src && smallImage.src !== "") { 
      var f = new FileTransfer(); 
      f.upload(smallImage.src, "http://testtest.appspot.com/upload", 
       // success callback 
       function(result) { 
        document.getElementById('uploadProgress').innerHTML = 
         result.bytesSent + ' bytes sent'; 
        alert(result.responseCode + ": " + result.response); 
       }, 
       // error callback 
       function(error) { 
        alert('error uploading file: ' + error.code); 
       }, 
       // options 
       { fileName: 'myImage.jpg', 
        params: { 'username':'jtyberg' } 
       }); 
     } 
    } 

、ファイルを処理するために、App Engineの側に次のコードを持っています次のようになります。

"POST /upload HTTP/1.1" 500 487 - "BlackBerry9550/5.0.0.469 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/-1" "testtest.appspot.com" ms=416 cpu_ms=93 api_cpu_ms=0 cpm_usd=0.014221 loading_request=1 instance=00c61b117ca6c4ea405471eea592a8f79ac6 
E 2011-08-06 11:49:17.309 
list index out of range 
Traceback (most recent call last): 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 702, in __call__ 
     handler.post(*groups) 
    File "/base/data/home/apps/s~testtest/1.352363227571120815/main.py", line 62, in post 
     blob_info = upload_files[0] 
IndexError: list index out of range 

ウェブフォームからファイルをアップロードしようとすると、うまくいきます。

答えて

4

blobstore.create_upload_url('/upload')でアップロードURLを生成する必要があります。今は、アップロードハンドラのURLに直接マルチパートPOSTを作成しています。中間URLはBlobstoreキーを生成し、それをハンドラに渡す前にMIMEヘッダーに追加するため重要です。

+0

マルチパートフォームの一部としてアップロードされているのではなく、リクエストの未処理のペイロードとしてアップロードされているようです。 –

+0

[documentation](http://docs.phonegap.com/phonegap_file.md.html#FileTransfer)に基づいて、FileTransferオブジェクトは複数の部分の投稿を作成するようです。 –

+0

奇数どこでも指定されたフィールド名はありません。 –

0

私はPhoneGap(それはなんですか?)については何も知らないけど、Pythonコードではfileという名前のフィールドに添付されたHTTP POST経由であなたのファイルが送信されることを期待しています。おそらく、PhoneGapはそのフィールドに対してそれを送信していません。

関連する問題