2011-10-16(Sun)
GAE + Slim3でPNGファイルをアップロードしてみる
やり方としては、以下の通り。
(1).controllerのdoGetでjspにforward()してアップロードするファイルを選択する画面を表示させる。
(2).controllerのdoPostでアップロードしたファイルをBlobstoreから取り出し画像リンクURLをresponse(JSONで)する。
レスポンスでのURLをブラウザで確認すると、画像が見れます。
作り方
(1).controller作成
(2). ファイル選択画面(upload.jsp)作成
(3). ファイルに結びつくキーを保存する
(1).controllerのdoGetでjspにforward()してアップロードするファイルを選択する画面を表示させる。
(2).controllerのdoPostでアップロードしたファイルをBlobstoreから取り出し画像リンクURLをresponse(JSONで)する。
レスポンスでのURLをブラウザで確認すると、画像が見れます。
作り方
(1).controller作成
public class FileUploadController extends Controller{
/** Blogstoreから画像リンクURLを取り出す */
private String getImateUrl(BlobKey blobKey){
ImagesService imagesService = ImagesServiceFactory.getImagesService();
String url = imagesService.getServingUrl(blobKey);
return url;
}
/** 単純な画像表示 */
private void displayPicture(){
//String keyName = asString("zTvi-8sWRxIXdbTcixL6uA");
BlobKey blobKey2 = new BlobKey("zTvi-8sWRxIXdbTcixL6uA");
BlobstoreService bs2 = BlobstoreServiceFactory.getBlobstoreService();
try {
bs2.serve(blobKey2, response);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public Navigation doGet() {
/** アップロードするファイルを選択する画面へ */
return forward("upload.jsp");
}
@Override
public Navigation doPost(){
/** BlobKeyを取得する */
BlobstoreService bs = BlobstoreServiceFactory.getBlobstoreService();
Mapblobs = bs.getUploadedBlobs(request);
BlobKey blobKey = blobs.get("formFile");
/** BlobstoreのKeyを生成して保存する */
Key key = Datastore.createKey(Blobstore.class, blobKey.getKeyString());
Blobstore blobstore = new Blobstore();
blobstore.setKey(key);
Datastore.put(blobstore);
String url = this.getImateUrl(blobKey);
/** response生成 */
Mapmap = new HashMap ();
map.put("URL", url);
try {
PrintWriter out = null;
try {
out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), encoding));
out.print(JSON.encode(map));
} finally {
if (out != null) {
out.close();
}
}
} catch (IOException e) {
ThrowableUtil.wrapAndThrow(e);
}
return null;
}
}
(2). ファイル選択画面(upload.jsp)作成
<%@page pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="f" uri="http://www.slim3.org/functions"%>
<%@page import="com.google.appengine.api.blobstore.BlobstoreServiceFactory" %>
<%@page import="com.google.appengine.api.blobstore.BlobstoreService" %>
< form action="${f:blobstoreUrl('FileUpload')}" method="post" enctype="multipart/form-data">
< input type="file" name="formFile" />
< input type="submit" value="Upload"/>
< /form>
< /body>
< /html>
(3). ファイルに結びつくキーを保存する
@Model(schemaVersion = 1)
public class Blobstore implements Serializable {
private static final long serialVersionUID = 1L;
@Attribute(primaryKey = true)
private Key key;
public Key getKey() {
return key;
}
public void setKey(Key key) {
this.key = key;
}
}
- 関連記事
-
- GAE + Slim3でPNGファイルをアップロードしてみる
- slim3でCollections.shuffleを使ってみる
- GAE + Slim3を使ってみたのでメモ
スポンサーサイト