Google App Engine でのファイルアップロード ~ ブロブキーの取得
Blob = アップロードファイルはこうして操作する
Google App Engine ではアップロードしたファイルはブロブストア (blobstore) 内に、ファイル一つ一つがブロブ (blob) として格納されるということは、 「Google App Engine でのファイルアップロード」で説明しました。まだ読んでないのでしたら、目を通しておいてください。
さて、createUploadUrl メソッドで取得した URL にファイルをアップロードした後、どのようにファイルを扱えば良いのでしょうか。
ブロブストアサービスではブロブキーを元にブロブそのものを操作できる
ブロブストアサービスでは、文字通りブロブキーをブロブのキーとしてブロブを操作します。 例えば、あるブロブを削除するなら、そのブロブのブロブキーを BlobstoreService の delete メソッドに渡せばよいのです。
ちなみに、ブロブサービスのインスタンスはブロブサービスファクトリ (BlobstoreServiceFactory) の getBlobstoreService メソッドで取得します。
getUploadedBlobs メソッドでブロブキーを取得できる
では、どうやってブロブキーを取得するかというとこれは簡単です。
ファイルをアップロードした後、フォワード先のプログラムでは次のようにすることで、ブロブキーを取得できます。 サーブレットのコード全体を示します。
import java.io.IOException; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.blobstore.BlobKey; import com.google.appengine.api.blobstore.BlobstoreService; import com.google.appengine.api.blobstore.BlobstoreServiceFactory; @SuppressWarnings("serial") public class FileUploadServlet extends HttpServlet { private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(request); BlobKey blobKey = blobs.get("file1"); response.sendRedirect( "/blobinfo.jsp?blobkey=" + blobKey.getKeyString()); } }
ポイントは次の箇所です。
Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(request); BlobKey blobKey = blobs.get("file1");
このように getUploadedBlobs メソッドによって、文字列をキーとして BlobKey を値とするコレクション (マップ) を取得できます。 キーは HTML の input タグに記載した name です。
このように簡単にブロブキーが取得できます。
尚、アップロードファイルが画像である場合は、画像サービス (image service)を利用するとブロブから直接画像を提供する URL を取得できたりして便利です。