GAE数据存储保存一个实体,然后不保存';t使用Java/Objectify更新它
我有一些处理个人资料图像上传的软件(这是GAE数据存储保存一个实体,然后不保存';t使用Java/Objectify更新它,java,google-app-engine,development-environment,objectify,Java,Google App Engine,Development Environment,Objectify,我有一些处理个人资料图像上传的软件(这是BlobstoreService完成巫毒后的回调) protectedvoiddopost(HttpServletRequest-req,HttpServletResponse-res) 抛出ServletException、IOException{ BlobstoreService blobSvc=BlobstoreServiceFactory.getBlobstoreService(); Map blobs=blobSvc.getUploads(req
BlobstoreService
完成巫毒后的回调)
protectedvoiddopost(HttpServletRequest-req,HttpServletResponse-res)
抛出ServletException、IOException{
BlobstoreService blobSvc=BlobstoreServiceFactory.getBlobstoreService();
Map blobs=blobSvc.getUploads(req);
List blobKeys=blobs.get(UserSvc.fieldProfileImg);
字符串principalKey=req.getParameter(UserSvc.fieldPrincipalKey);
布尔失败=真;
if(null!=blobKeys&&blobKeys.size()>0){
可选princi=GaeDataUtil.getByWebKey(principalKey);
if(princi.isPresent()){
log.info(“添加BlobKey之前:+princi.get());
princi.get().setProfileImgKey(blobKeys.get(0));
princi.get().setMiddleName(“Saved”);//只是为了测试是否会更新任何其他值
ofy().save().entity(princi.get()).now();
log.info(“添加BlobKey并保存后:+princi.get());
失败=错误;
res.getWriter().print(“成功”);
}否则{
log.warning(“未能找到具有web密钥的主体:“+principalKey”);
}
}
如果(失败){
res.getWriter()打印(“失败”);
}
}
除了重新保存检索到的实体外,所有操作都正常
背景信息
我自己的服务器端代码正在将配置文件图像数据提交到BlobstoreService
(我们不必讨论为什么会这样)。提交/上传工作正常,我可以在devserver的管理/数据存储中看到它,我得到我想要的BlobKey
,甚至可以从webKey
检索主体
,但似乎无法保存更新的实体。也没有例外
最初,当我尝试此方法时,我没有检索BlobKey
,我注意到数据存储将显示两个特殊实体:\uuuuu BlobInfo\uuuu
,另一个实体的名称我记不起来,但它以\uuuu
开头和结尾(双下划线)。在我刷新memcache之后,我只能看到\uuu BlobInfo\uuu
实体,而另一个实体则不见踪影。试图重置数据存储时,我删除了target \-1.0-SNAPSHOT\WEB-INF\appengine-generated\local_db.bin
,但仍然看不到数据存储中其他特殊实体的任何迹象
是否有方法重置development server上的数据存储和Blobstore
环境:
- 开发服务器
- 爪哇7
- 视窗7
- 目标化5.1.7
appengine web.xml中更改应用程序名称
appname
如果在此处提供不同的(虚拟)名称,则在重新运行开发服务器时,应重置开发服务器中的内容。请在此处内联代码,而不是在pastebin上。如果内联的代码太多,有时其他用户会反对。。。何时内联以及何时使用Pastebin和类似服务的标准是什么?永远不要使用Pastebin。如果你的代码太多,你就没有一个,应该去掉代码。所以y().save().entity(princi.get()).now()
不会失败(now()的文档是“如果计算产生异常,它将在这里抛出”),但是你在数据存储查看器中看不到更新吗?您可以重置您的本地环境:在启动时,在日志中显示关于创建sql文件的内容,请将其删除。@zapl!没有例外,但也没有更新。我想可能是无意中(神奇地)我在做一个异步保存,但即使几分钟后更新也不存在。
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
BlobstoreService blobSvc = BlobstoreServiceFactory.getBlobstoreService();
Map<String, List<BlobKey>> blobs = blobSvc.getUploads(req);
List<BlobKey> blobKeys = blobs.get(UserSvc.fieldProfileImg);
String principalKey = req.getParameter(UserSvc.fieldPrincipalKey);
boolean failure = true;
if (null != blobKeys && blobKeys.size() > 0) {
Optional<Principal> princi = GaeDataUtil.getByWebKey(principalKey);
if (princi.isPresent()) {
log.info("Before adding BlobKey: " + princi.get());
princi.get().setProfileImgKey(blobKeys.get(0));
princi.get().setMiddleName("Saved"); // just to test if any other value will update
ofy().save().entity(princi.get()).now();
log.info("After adding BlobKey and saving: " + princi.get());
failure = false;
res.getWriter().print("SUCCESS");
} else {
log.warning("Failed to find Principal with web key: " + principalKey);
}
}
if (failure) {
res.getWriter().print("FAIL");
}
}