0

GCS のファイル ストアからservingUrlを取得しようとしています。これは、cloudStorage データから BlobKey を生成するコードです。

public BlobKey getCloudStorageBlobKey(String bucket_name, String object_name)
{       
    bucket_name = StringUtils.strip(bucket_name, "/");
    object_name = StringUtils.strip(object_name, "/");

    GcsFilename gcs_file = new GcsFilename(bucket_name, object_name);
    String cloudStorageURL = "/gs/" + gcs_file.getBucketName() + "/" + gcs_file.getObjectName();

    BlobstoreService bs = BlobstoreServiceFactory.getBlobstoreService();
    BlobKey bk = bs.createGsBlobKey(cloudStorageURL);
    return bk;
}

そして、ここでservingURLを取得するコード

public String getThumbUrl(BlobKey blobkey)
{       
    ServingUrlOptions options = ServingUrlOptions.Builder.withBlobKey(blobkey);

    try
    {
        return ImagesServiceFactory.getImagesService().getServingUrl(options);
    }
    catch(IllegalArgumentException e)
    {
        log().severe("BlobKey " + blobkey + " not valid: " + e.getMessage());
        return null;
    }
    catch(ImagesServiceFailureException e)
    {
        log().severe("ImageService access error");
        return null;
    }
}

ブロブストア BlobKey を使用してコードを起動するとエラーは発生しませんが、GCS BlobKey でこのメソッドを使用すると常にエラーが発生します

IllegalArgumentException

APIが言うので:

GCS オブジェクトの blobKey を取得したら、それを渡したり、シリアル化したり、Blobstore に保存されているオブジェクトの blobKey を使用できる場所ならどこでも交換可能に使用したりできます。これにより、アプリが一部のデータをブロブストアに保存し、一部を GCS に保存する場合に使用できますが、 それ以外の場合は、アプリの残りの部分で同じようにデータを扱います。(ただし、現在、GCS オブジェクトでは BlobInfo オブジェクトを使用できません。)

私はどこで間違っていますか?

この方法を見た

ServingUrlOptions options = ServingUrlOptions.Builder.withGoogleStorageFileName(googleStorageFileName)

しかし、低レベルでは BlobStore/GCS の両方に blobkey を使用したいため、これを使用できません。


編集 1: スタック トレースは次のとおりです: http://pastebin.com/index/se5DMfHF。奇妙な事実は、例外メッセージがまったく表示されないことです


EDIT2: 問題解決: のソース コードの分析

ImagesServiceFactory.getImagesService().getServingUrl(options);

メソッド、私はこの例外がスローされたことを発見しました:

com.google.apphosting.api.ApiProxy$ApplicationException

クイック検索で解決策を見つけました: https://stackoverflow.com/a/10051350

4

0 に答える 0