删除从GcsFilename而不是BlobKey创建的ServingUrl似乎不受支持?

时间:2014-08-07 00:41:28

标签: google-app-engine

我正在将我的Google App Engine应用程序从BlobStore移植到Google Cloud Store。

我发现在GAE SDK 1.9.7中,他们弃用了所有.getServingURL()方法BlobKey并将其替换为on ServingUrlOptions对象作为配置。

这很有道理并且似乎有效,但似乎没有任何匹配.deleteServingUrl()需要GcsFilename

我在SdkReleaseNotes中发现了以下内容,但它并没有说明你实际上是如何做到这一点的?

  

版本1.7.0 - 2012年6月26日

     
      
  • 您现在可以将get_serving_url()和delete_serving_url()用于Google云端存储分区。
  •   

ImagesService javadoc中似乎没有任何内容可以帮助您完成工作。

如何删除使用GcsFilename创建的服务URL?

1 个答案:

答案 0 :(得分:0)

解决方案

经过多次挖掘JavaDocs后,我发现:

BlobKey createGsBlobKey(java.lang.String filename)

这是我最终的完整解决方案。

进口:

import com.google.appengine.api.blobstore.BlobKey;
import com.google.appengine.api.blobstore.BlobstoreService;
import com.google.appengine.api.blobstore.BlobstoreServiceFactory;
import com.google.appengine.api.images.ImagesService;
import com.google.appengine.api.images.ImagesServiceFactory;
import com.googlecode.objectify.Work;
import com.vertigrated.gae.codex.service.datastore.entity.ImageMetadata;

import javax.annotation.Nonnull;
import java.util.UUID;

import static com.googlecode.objectify.ObjectifyService.ofy;

代码:

private static final BlobstoreService BLOBSTORE_SERVICE;
private static final ImagesService IMAGES_SERVICE;

static
{
    BLOBSTORE_SERVICE = BlobstoreServiceFactory.getBlobstoreService();
    IMAGES_SERVICE = ImagesServiceFactory.getImagesService();
}

@Override
public boolean delete(@Nonnull final UUID uuid)
{
    return ofy().transact(new Work<Boolean>()
    {
        @Override
        public Boolean run()
        {
            final ImageMetadata im = ofy().load().type(ImageMetadata.class).id(uuid.toString()).now();
            final BlobKey bk = BLOBSTORE_SERVICE.createGsBlobKey(im.getFilename().toString());
            IMAGES_SERVICE.deleteServingUrl(bk);
            ofy().delete().entity(im);
            return ImageMetadataEntityService.this.delete(uuid);
        }
    });
}