我在服务器端使用带有 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/
上面上传网址中的部分?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/
更令人困惑的是,当我在本地服务器上执行 get 请求时(来自 App Engine 提供的 Eclipse),我没有得到该部分:
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 中?