Google App Engine でのファイルアップロード
HTML フォームからファイルをアップロードするには、通常次のようなフォームを利用しますよね。
<form action="..." method="POST" enctype="multipart/form-data"> <input type="file" name="file1"> <input type="submit" value="Upload"> </form>
ポイントは FORM タグの action にアップロード先 URL を設定、enctype として multipart/form-data、そして、 ファイルの指定は INPUT タグの type 属性に file を指定します。
これは Google App Engine に限ったことではないのでご存知の方も多いと思います。
Google App Engine のファイルアップロードでも、これをベースにしています。
Google App Engine でのファイルアップロード
ファイルをアップロードして保存する先はブロブストア (blobstore) です。
アップロードされたファイルはブロブストアに保存され、ひとつひとつのアップロードファイルが、ブロブストア内のブロブとして識別されます。 ブロブを識別するキーは、ブロブキー (BlobKey) です。
アップロード先 URL の取得
ブロブストアにアップロードする、と言いましたが、具体的な URL がないと action 属性が書けません。 アップロード先 URL を取得するには、BlobstoreService の createUploadUrl() メソッドを呼びます。
これで取得された URL を action 属性に設定すればアップロードは完了します。 アップロード完了後、createUploadUrl メソッドのパラメータに指定した URL にフォワードされます。
具体例で説明します。次のコードを見てください。
<% String uploadUrl = blobstoreService.createUploadUrl("/upload"); %> <html> <body> <form action="<%= uploadUrl %>" method="POST" enctype="multipart/form-data">
ここでは、"/upload" という文字列を createUploadUrl メソッドに渡して、アップロード先 URL (uploadUrl) を取得しています。 こうすると、ファイルをアップロードすると、まずブロブストアにファイルがブロブとして格納され、 その後に "/upload" へフォワードされます。
フォワード先の "/upload" では、ブロブキーを取り出すことができ、それを用いていろいろと次なる処理ができるわけです。
アップロードフォーム例
以上から、ファイルをアップロードするためのフォームは次のように作ることができます。
<%@page import="com.google.appengine.api.blobstore.BlobstoreServiceFactory" %> <%@page import="com.google.appengine.api.blobstore.BlobstoreService" %> <% BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); String uploadUrl = blobstoreService.createUploadUrl("/upload"); %> <html> <body> <form action="<%= uploadUrl %>" method="POST" enctype="multipart/form-data"> <input type="file" name="file1"> <input type="submit" value="Upload"> </form> </body> </html>
さて、作成されたブロブにはどのようにアクセスするのでしょうか。 その点については、「Google App Engine でのファイルアップロード ~ ブロブの取得」 を見てください。