Не удается загрузить файл в App Engine "индекс списка вне диапазона" - PullRequest
2 голосов
/ 09 августа 2011

Я пытаюсь загрузить картинку из приложения Phonegap в мой проект Python 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' } 
                });
        }
    }

Ошибка следующая,

"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

Когда я пытаюсь загрузить файл через веб-форму, он отлично работает.

Ответы [ 2 ]

4 голосов
/ 09 августа 2011

Вам необходимо сгенерировать URL для загрузки через blobstore.create_upload_url('/upload').Прямо сейчас вы создаете POST из нескольких частей непосредственно в URL вашего обработчика загрузки.Промежуточный URL является критическим, поскольку он генерирует ключ Blobstore и добавляет его в заголовок MIME перед передачей его обработчику.

0 голосов
/ 09 августа 2011

Я ничего не знаю о PhoneGap (что это?), Но этот код Python ожидает, что ваш файл будет отправлен через HTTP POST, присоединенный к полю с именем file.Предположительно, PhoneGap не отправляет его на это поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...