Google cloud storage 测试桶中是否存在对象?
我试图找出在谷歌云存储中测试Google cloud storage 测试桶中是否存在对象?,google-cloud-storage,google-app-engine,Google Cloud Storage,Google App Engine,我试图找出在谷歌云存储中测试存储桶中对象是否存在的最有效方法 这就是我现在正在做的: 试试看 { final GcsFileMetadata md=GCS_SERVICE.getMetadata(bm.getFilename()); if(md==null) { //做我该做的! } } 捕获(IOE异常) { L.错误(如getMessage()); } 因为根据文档,如果GcsFilename不存在,它将返回null 在存储桶上使用.list()并检查.contains()听起来很昂贵,
存储桶中对象是否存在的最有效方法
这就是我现在正在做的:
试试看
{
final GcsFileMetadata md=GCS_SERVICE.getMetadata(bm.getFilename());
if(md==null)
{
//做我该做的!
}
}
捕获(IOE异常)
{
L.错误(如getMessage());
}
因为根据文档,如果GcsFilename
不存在,它将返回null
在存储桶上使用.list()
并检查.contains()
听起来很昂贵,但其目的是明确的
就我个人而言,我认为测试null
以检查是否存在某些东西是不雅观的,不像GCS\u服务那样直接代码>但我想我没有机会设计GCS客户端API。我将在我的API中创建一个方法来进行此测试
是否有一种更有效(如及时)或更自我记录的方法来进行此测试?解决方案
以下是我最终得出的工作解决方案:
@Nonnull
受保护类getEntityType(){(类)新类型令牌(getClass()){}.getRawType();}
/**
*清除GCS中不再有匹配对象的ObjectMetadata记录。
*/
公共无效Purgorphans()
{
ofy().transact(新工作())
{
@凌驾
公共工程运行()
{
尝试
{
对于(最终的T bm:ofy().load().type(ObjectMetadataEntityService.this.getEntityType()).iterable())
{
final GcsFileMetadata md=GCS_SERVICE.getMetadata(bm.getFilename());
if(md==null)
{
ofy().delete().entity(bm);
}
}
}
捕获(IOE异常)
{
L.错误(如getMessage());
}
返回null;
}
});
}
他们添加了文件.exists()
方法
const fileExists = _=>{
return file.exists().then((data)=>{ console.log(data[0]); });
}
fileExists();
//logs a boolean to the console;
//true if the file exists;
//false if the file doesn't exist.
不,我认为你所做的是正确的。它应该向服务器发出HEAD请求。
@Nonnull
protected Class<T> getEntityType() { (Class<T>) new TypeToken<T>(getClass()) {}.getRawType(); }
/**
* purge ObjectMetadata records that don't have matching Objects in the GCS anymore.
*/
public void purgeOrphans()
{
ofy().transact(new Work<VoidWork>()
{
@Override
public VoidWork run()
{
try
{
for (final T bm : ofy().load().type(ObjectMetadataEntityService.this.getEntityType()).iterable())
{
final GcsFileMetadata md = GCS_SERVICE.getMetadata(bm.getFilename());
if (md == null)
{
ofy().delete().entity(bm);
}
}
}
catch (IOException e)
{
L.error(e.getMessage());
}
return null;
}
});
}
const fileExists = _=>{
return file.exists().then((data)=>{ console.log(data[0]); });
}
fileExists();
//logs a boolean to the console;
//true if the file exists;
//false if the file doesn't exist.