7

GAEにファイルをアップロードしようとしています-サーバーサイドコード:

 class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
            upload_files = self.get_uploads('file')  
            blob_info = upload_files[0] # When using flask, request.files[0] gives correct output.
            self.response.out.write('/serve/%s' % blob_info.key())

HTMLを使用すると、次のように機能させることができます。

upload_url = blobstore.create_upload_url('/upload')
    self.response.out.write('<html><body>')
    self.response.out.write('<form action="%s" method="POST" enctype="multipart/form-data">' % upload_url)
    self.response.out.write("""Upload File: <input type="file" name="file"><br> <input type="submit"
        name="submit" value="Submit"> </form></body></html>""")

しかし、JavaからのマルチパートPOSTリクエストを実行できる必要があります。私は、Javaコードが機能しているように見えるopenshift request.files[0]代わりにflask)でホストされているflaskプロジェクトを持っています:

HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
DefaultHttpClient mHttpClient = new DefaultHttpClient(params);
HttpPost httppost = new HttpPost(getString(R.string.url_webservice) + "/upload");
MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntity.addPart("file", new FileBody(new File(path)));
httppost.setEntity(multipartEntity);
mHttpClient.execute(httppost, new MyUploadResponseHandler(path));

しかし、GAEで実行すると、upload_files[0]アップロード時にインデックスが範囲外になります-エラーはどこにありますか?私はそれを見つけることができないようです、コードは私が動作することを確認した次のものにとても似ています(フラスコ、オープンシフト)

def upload_file():
if request.method == 'POST':
    file = request.files['file']
    ...

更新:完全なエラーログ:

list index out of range
Traceback (most recent call last):
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line  1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__
   rv = self.router.dispatch(request, response)
   File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
return route.handler_adapter(request, response)
   File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1077, in __call__
return handler.dispatch()
   File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 547, in dispatch
return self.handle_exception(e, self.app.debug)
   File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch
return method(*args, **kwargs)
   File "myapp.py", line 22, in post
blob_info = upload_files[0]
 IndexError: list index out of range
4

1 に答える 1

2

blobstore.create_upload_url('/upload')はまだ Java でURL を生成しません。/upload/upload は、そのハンドラーから生成された html を確認するために投稿しようとしている場所であり、フォームのアクション URL が異なることがわかります。

Java コードが取得してから投稿するために使用するアップロード URL でハンドラーが応答するようにすることができます。

于 2012-08-18T05:28:22.643 に答える