ブロブからの画像 URL 取得

Google App Engine ではブロブサービスを利用することで、 ファイルをアップロードすることができます。当サイトでもブロブストアで説明しています。

画像ファイルをアップロードした場合、その画像ファイルはブロブストアに行きます。 具体的にどこにどのような形でファイルが保存されているのかを知らなくても、アップロード画像のブロブキーを取得することで、画像への URL を直ちに取得することが可能です。

画像サービスを利用する具体例

それでは実際にブロブストアにアップロードした画像ファイルの URL を取得する例をみてください。 ここではブロブキー (BlobKey) を文字列で渡して、画像の URL を取得します。

下のスクリーンショットでは、アップロードした画像をサイズ違いで表示しています。 上側がアップロードしたままの元のサイズの画像。下の小さいのは長辺が 48px とした画像です。

Google App Engine の画像サービス

このページのソースコードは次の通りです。

<%@page import="com.google.appengine.api.blobstore.BlobKey" %>
<%@page import="com.google.appengine.api.images.*" %>
<%
  String blobKeyParam = request.getParameter("blobkey");
  BlobKey blobKey = new BlobKey(blobKeyParam);

  ImagesService imagesService
    = ImagesServiceFactory.getImagesService();

  String imageUrl = imagesService.getServingUrl(blobKey);
  String imageUrl48 = imagesService.getServingUrl(blobKey, 48false);
%>
<html>
<body>
<h1>Blob Info</h1>
<p>BlobKey = <%= blobKey.getKeyString() %></p>
<h2>Image URLs</h2>
<p>Image URL = <%= imageUrl %></p>
<p><img src="<%= imageUrl %>" alt="imageUrl"></p>
<p>Image URL (48= <%= imageUrl48 %></p>
<p><img src="<%= imageUrl48 %>" alt="imageUrl48"></p>
</body>
</html>

上から処理をみていきましょう。

  String blobKeyParam = request.getParameter("blobkey");
  BlobKey blobKey = new BlobKey(blobKeyParam);

この部分ではブロブキーの文字列表現をパラメータとして受け取っています。BlobKey はコンストラクタに、文字列を渡せばそこからブロブキー (BlobKey) のインスタンスを作ってくれます。

  ImagesService imagesService
    = ImagesServiceFactory.getImagesService();

ここでイメージサービスのインスタンスを取得しています。イメージサービスファクトリ (ImageServiceFactory) のスタティックメソッドである getImagesService メソッドで取得できます。

イメージサービスのインスタンスとブロブキーがあれば、あとは簡単です。 次のように、イメージサービスの getServingUrl メソッドにブロブキーを渡せば URL が取得できます。

  String imageUrl = imagesService.getServingUrl(blobKey);

画像のリサイズ

リサイズしたい場合は、次のように getServingUrl のパラメータにそのサイズを渡せば OK です。

  String imageUrl48 = imagesService.getServingUrl(blobKey, 48false);

ちなみに、getServingUrl メソッドが受け取るサイズの値は、 SERVING_SIZES (static final java.util.Set<Integer>) で決められています。

getServingUrl が受け取れる値 = SERVING_SIZES
 0, 32, 48, 64, 72, 80, 90, 94, 104, 110, 120, 128, 
 144, 150, 160, 200, 220, 288, 320, 400, 512, 576, 
 640, 720, 800, 912, 1024, 1152, 1280, 1440, 1600

これ以外の値、例えば 50 などを getServingUrl に渡しても正しくリサイズされた画像は取得できませんので、注意してください。