GAE:如何通过未使用Java部署在GAE上的外部Web服务来访问存储在GAME Blobstore中的数据/文件

时间:2012-03-21 09:20:02

标签: java web-services google-app-engine blobstore

在GAE中,我有一个应用程序,用于在GAE blobstore服务中存储文件。存储数据后,还应将其发送到未部署在GAE上的外部Web服务。我用的是Java。

我的第一个想法是使用JAX-RPC(基于XML的Java的Java API)和SAAJ(SOAP with Attachments API for Java),如http://www.ibm.com/developerworks/xml/library/x-tippass/中所述,但我无法部署Axis2框架在GAE上,因为我有套接字异常(在GAE中不允许)。我们的想法是将数据推送到外部Web服务。

在我的第二次尝试中,我想从GAE中提取数据,这意味着外部Web服务直接在Blobstore中访问该文件。在GAE的管理控制台中,可以下载blob。因此,我想,通过将blob的密钥传递给外部Web服务以使用java.net.URL来获取我的文件,我可以对外部Web服务执行相同的操作,类似于此处描述:http://code.google.com/intl/de-DE/appengine/docs/java/urlfetch/overview.html。此链接如下所示:

String blobFileUrl = "https://appengine.google.com/blobstore/download?app_id=s~gae_app&key=" + gaeBlobKey;

但是,它无法正常工作,因为需要对webservice / www-user进行身份验证并授权其访问该文件。据我所知,Google没有提供Java API来从外部Web服务登录GAE。

是否可以使用外部Web服务访问GAE的blob /数据,而外部Web服务未使用Java部署在GAE上?如果是这样,怎么可能?

1 个答案:

答案 0 :(得分:2)

您可以在GAE应用程序中创建一个servlet,它只是为blob键提供blob。

网址将是这样的:

http://appid.appspot.com/blobserve?blobKey=3asdfg324gdasdf

你的servlet看起来像这样:

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws IOException {
    BlobKey blobKey = new BlobKey(req.getParameter("blobKey"));
    blobstoreService.serve(blobKey, res);
}