fc2ブログ

2011-10-16(Sun)

GAE + Slim3でPNGファイルをアップロードしてみる

やり方としては、以下の通り。
(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();
Map blobs = 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生成 */
Map map = 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;
}
}



関連記事
スポンサーサイト



コメントの投稿

管理者にだけ表示を許可する

コメント

プロフィール

kumagonjp2

Author:kumagonjp2
Python,Django,R,Mongo,MySQL,Struts,Spring,データマイニングなどサーバー関係のメモを残していきます。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
雪が3Dで降るブログパーツ ver2

マウスで見る方向変えられます

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR