为什么GAE BlobstoreService#createUploadUrl(String)包含请求查询参数

时间:2013-07-21 11:11:35

标签: google-app-engine blobstore

我在服务器端使用带有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/部分肯定不在那里? Ho是否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/

更令人困惑的是,当我在本地服务器(来自App Engine提供的Eclipse)上执行get请求时,我没有得到?logindx=-43803902306520/部分:

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

在这种情况下,浏览器会返回如下内容:

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

显然它与Android没有任何关系,我也看不出这是如何具体的。

非常感谢任何帮助。

谢谢 - 来自非洲。

编辑:

我现在通过简单地删除uri中的最后一个斜杠(/)并且Illegal character in query错误消失了。 uri与包含?logindx=-43803902306520/部分的Blobstore完美配合。现在没关系,但仍然想知道为什么它被包含在上传uri中?

0 个答案:

没有答案