我想使用appengine Blobstore从我的android应用程序上载并获取图片。我有一些问题。我认为我不太了解blobstore的过程。
这就是我所做的:
在我的客户端(Android)我只是调用一个URL(api / pictures / upload /)并将我的图片作为一个字节数组(byte [])发布。我认为我的客户方面很好。
在我的服务器端(在泽西岛的java中使用appengine)这是我的网络服务:
- 上传网络服务:(此功能由android直接调用)
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadImageBis(@Context HttpServletRequest req, @Context HttpServletResponse res) throws IOException{
BlobstoreService bs = BlobstoreServiceFactory.getBlobstoreService();
bs.createUploadUrl("/upload");
Map<String, List<BlobKey>> blobFields = bs.getUploads(req);
List<BlobKey> blobKeys = blobFields.entrySet().iterator().next().getValue();
if (blobKeys != null && !blobKeys.isEmpty()) {
BlobKey blobKey = blobKeys.get(0);
System.out.println("MY KEY: "+blobKey.getKeyString());
}
return null;
}
该行&#34; BlobstoreService bs = BlobstoreServiceFactory.getBlobstoreService();
&#34;创建错误:必须从blob上传回调请求中调用
但过了一段时间它会持续存在(在数据存储区或blobstore中),当我检查我的数据存储区时,会创建一个名为的新选项卡: BlobUploadSession
然后,当我尝试使用谷歌控制台上的密钥获取图片时,我有这样的错误:无法找到blob:BlobKey:... 我想这可能是图片存储在dataStore而不是blobstore?
但我认为我在上传网络服务中做错了。如果有人可以帮助我并解释错误,那将会很棒。 THX。
答案 0 :(得分:0)
GAE上的Blobupload是一个两步过程:
一个。客户请求一次性上传网址:
@GET
@Produces("text/plain")
public String uploadImageBis(@Context HttpServletRequest req, @Context HttpServletResponse res) throws IOException{
BlobstoreService bs = BlobstoreServiceFactory.getBlobstoreService();
return bs.createUploadUrl("/upload");
}
湾客户端将多部分数据POST到该Url:
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadImageBis(@Context HttpServletRequest req, @Context HttpServletResponse res) throws IOException{
Map<String, List<BlobKey>> blobFields = bs.getUploads(req);
List<BlobKey> blobKeys = blobFields.entrySet().iterator().next().getValue();
if (blobKeys != null && !blobKeys.isEmpty()) {
BlobKey blobKey = blobKeys.get(0);
System.out.println("MY KEY: "+blobKey.getKeyString());
}
return null;
}