在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上?如果是这样,怎么可能?
答案 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);
}