2

我的计划是通过随机选择其中一个键并检查数据存储中对它的引用来删除孤立的 blob(每十秒左右重复一次)。有没有办法得到那个清单?

4

3 回答 3

3

您正在寻找的方法是 BlobInfoFactory 上的 queryBlobInfos() 方法。它将为您提供所有存储的 blob,您可以检查并删除孤儿。不知道为什么这不在 BlobstoreService 上。 https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/blobstore/BlobInfoFactory#queryBlobInfos()

于 2015-04-01T10:15:36.587 回答
1

当您在数据存储中有引用时,您可以获取 file_name 并删除孤儿。

    blob_key = # you have stored
    blob_info = blobstore.BlobInfo.get(blob_key)
    blobs = blobstore.BlobInfo.gql("WHERE filename = '%s'" %(blob_info.filename))                            
    for blob in blobs :
        if blob.key() != blob_key :    # do not delete the referenced one 
            blob.delete()

当然,您也可以使用 gql 查询所有 blob 并将其与您的参考进行比较。

于 2013-01-17T14:50:00.943 回答
0

基于 Goose 的回答,这是我在实验后清理所有开发混乱的方式:

    private BlobInfoFactory blobInfoFactory = new BlobInfoFactory();

private void deleteAllBlobs() {
    Iterator<BlobInfo> blobsIterator = blobInfoFactory.queryBlobInfos();
    while (blobsIterator.hasNext()) {
        BlobInfo blobInfo = (BlobInfo) blobsIterator.next();
        LOG.info("Removing blob " + blobInfo.getFilename());
        blobstoreService.delete(blobInfo.getBlobKey());
    }
}
于 2015-09-20T08:24:38.990 回答