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;
}
}



スポンサーサイト



2011-10-09(Sun)

slim3でCollections.shuffleを使ってみる

Collections.shuffleで文字列リストの組み合わせをランダムにしてみる。

まず文字列の組み合わせクラスを作る。

public class PairName {
private static final long serialVersionUID = 1L;

@Attribute(primaryKey = true)
private Key id;
@Attribute(persistent = true)
private String front;
@Attribute(persistent = true)
private String rear;

public void setFront(String front) {
this.front = front;
}
public void setRear(String rear) {
this.rear = rear;
}
}

文字列の組み合わせクラスに文字列リストを入れる。

public int PairInitialReg(){
PairName insPair1 = new PairName();
insPair1.setFront("元気な");
insPair1.setRear("ぶどう");
Datastore.put(insPair1);

PairName insPair2 = new PairName();
insPair2.setFront("かなしい");
insPair2.setRear("りんご");
Datastore.put(insPair2);

PairName insPair3 = new PairName();
insPair3.setFront("しんどい");
insPair3.setRear("バナナ");
Datastore.put(insPair3);

PairName insPair4 = new PairName();
insPair4.setFront("悔しい");
insPair4.setRear("もも");
Datastore.put(insPair4);

PairName insPair5 = new PairName();
insPair5.setFront("おかしい");
insPair5.setRear("スイカ");
Datastore.put(insPair5);
return SC_OK;
}

メイン関数

private String createName(){
this.PairInitialReg();

List insPairNameList = Datastore.query(PairName.class).asList();

ArrayList insFrontList = new ArrayList();
ArrayList insRearList = new ArrayList();
for (int i=0; i < insPairNameList.size(); i++){
insFrontList.add(insPairNameList.get(i).getFront());
insRearList.add(insPairNameList.get(i).getRear());
}

ArrayShuffle insArrayShuffle = new ArrayShuffle();
List frontList = insArrayShuffle.startShuffle(insFrontList);
List rearList = insArrayShuffle.startShuffle(insRearList);

/** シャッフルした文字列を組み合わせる */
String name = frontList.get(0) + rearList.get(0);

return name;

}

文字列をシャッフルさせるクラス

import java.util.Collections;
import java.util.List;
public class ArrayShuffle {
public List startShuffle(List srcList){
/** シャッフルするメソッド */
Collections.shuffle(srcList);
return srcList;
}

}


2011-10-05(Wed)

GAE + Slim3を使ってみたのでメモ

- 設定方法
Pluginを入れる。
-- Google Plugin for Eclipse
http://dl.google.com/eclipse/plugin/3.6

-- Slim3
http://slim3.googlecode.com/svn/updates/

-- プロジェクトの作成
File -> New -> Other -> Slim3 -> Slim3 Project
Project name, Root Packageを適当に入力。
"Use MVC of Slim3"をチェックする。
これでプロジェクトはできあがる。けっこう簡単。

-- projectの設定こちらを参照

-- コントローラーの設定
迷ったのはここですが
/war/WEB-INF/web.xmlのslim3.rootPackageにコントローラーの場所を指定する。

サンプルはこんな感じです。20111004_webxml.txt

controllerパスは必須。
コントローラーがcom.hoge.controllerにある場合
サンプルのようにcom.hogeと指定する。
com.hoge.controllerにTestControllerを作る。
この場合TestのdoGet()にリクエストがくる。

[Web Application]で実行
http://localhost:8888/Test
でリクエストがくる。

データストアをみる
http://localhost:8888/_ah/admin/

参考にしたもの
JavaによるRESTfulシステム構築

プロフィール

kumagonjp2

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

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

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

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

この人とブロともになる

QRコード
QR