2

サーバー側でJersey RESTを使用してGAE Blobstoreを使用しています。Android 経由でサーバーに GET リクエストを送信し、 というクエリ パラメータを含めますlogindx。サーバー側のコード スニペットは次のようになります。

@Path("/getuploadurl")
@GET
@Produces(MediaType.TEXT_PLAIN)
public Response getUploadUrl(@QueryParam("logindx") Long logIndx )  {
    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    String uurl = blobstoreService.createUploadUrl("/logblobkey"); 
    logger.severe("urltest: " + uurl);

    return Response.ok(uurl).build();
}

問題は、Android に返される結果の文字列 (ログにも記録される) が次のとおりであることです。

urltest: http://bardroid123.appspot.com/_ah/upload/?logindx=-43803902306520/AMmfu6b2Ubvf17gD_5uheZeDhTIsr8nm582oaNi0_SDPWfuxqHmYgtkWqVVP52QbBwnnNbWyJf_lDdf9GDmFKtdHU_eUn5gjjtrOSAB32HSu3HiVgLovO5pYeYDkapBPfu7uuo460Ez0/ALBNUaYAAAAAUeuzYniVLlTqyYCjIkfK7-n0ARv5yoo1/

上記のアップロード URLの部分?logindx=-43803902306520/は、確かに存在しないはずですか? この関数は、クエリ パラメータを抽出するためにオブジェクトをcreateUploadUrl取得する方法さえ知っているでしょうか?HttpRequest

問題は、Android アプリで上記の uri を次のように使用しようとしたときです。

HttpPost postRequest = new HttpPost(uri);

次のエラーが表示されます。

java.lang.IllegalArgumentException: Illegal character in query at index 253: http://bardroid123.appspot.com/_ah/upload/?logindx=-43803902306520/AMmfu6ZDQr7WenGd0N3ZkbI3zfSl0xPcY56XS5p_VQiS_MWxtTwtc1xm8NbhdrhK-PxopCIolsWci_06DQ3EsUJXSlbiavtJKX9JXT7RU3vTnwj-H0yY5DZKv9hbYR0brfOezaVwob1k/ALBNUaYAAAAAUevBZWOmVC0m1tipSR7Lk9WcwePsXBzf/

さらにややこしいのは、?logindx=-43803902306520/(App Engine が提供する Eclipse から) ローカル サーバーで get 要求を実行したときに、その部分を取得できないことです。

http://localhost:8888/res/logs/getuploadurl?logindx=1234567.

その場合、ブラウザは次のようなものを返します。

http://localhost:8888/_ah/upload/agtiYXJkcm9pZDEyM3IbCxIVX19CbG9iVXBsb2FkU2Vzc2lvbl9fGDIM

明らかに、これは Android とは何の関係もありません。また、これがジャージー固有のものである可能性もわかりません。

どんな助けでも大歓迎です。

ありがとう - アフリカから。

編集:

uri の最後のスラッシュ (/) をドロップするだけで、今すぐ取得でき、Illegal character in queryエラーはなくなりました。uri は、パーツが含まれている Blobstore と完全に連携して?logindx=-43803902306520/いました。今は関係ありませんが、なぜアップロード uri に含まれているのか疑問に思っていますか?

4

0 に答える 0