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