SiNBLOG

140文字に入らないことを、極稀に書くBlog

Slim3 Source Code Reading No6に参加してきた!

Slim3 Source Code Reading #6 - ChugokuGTUG

に参加してきました!


今回も@ttyokoyama 殿と2人だったので、まったりと進みました。
まぁ、他の方が参加していても、まったり進むのですがw

T.Yokoyamaのブログ: Slim3 Source Code Reading #6


さて、今回はFireUploadです。
File Upload - Slim3

中身を見ていくと、Postされたファイルをbyte[]として、Datastoreに保存していました。
Slim3が行なっていることは、FrontControllerの中で、Requestの中からFileを読み取り、以下のクラスを作成していました。
Google Code Archive - Long-term storage for Google Code Project Hosting.

ただ、中身のソースに関しては、あまりその辺りの知識が無いため、よく分からず・・・。
httpでFileが送られてくる仕組みについて、色々とすることがあるのだろうなという印象で終わった・・・。


とりあえず、Fileの保存方法としては、Slim3公式のデモソースの通り、RequestからFileItemを取り出します。


public class UploadController extends Controller {

private UploadService service = new UploadService();

@Override
public Navigation run() {
FileItem formFile = requestScope("formFile");
service.upload(formFile);
return redirect(basePath);
}
}

その後も、デモソースのままです。
Slim3が内部で何かやっていると言うよりは、ファイルをどのようにしてDatastoreに保存するかという感じですね。
デモでは、2種類のModelを作成しています。
UploadDataとUploadDataFragmentです。
この2つのModelをリレーションシップで、1対多の関係とします。
送られてきたファイルを分割してUploadDataFragmentに格納し、それを紐付ける役としてUploadDataがあるというわけです。
この辺りのロジックは、要件に合わせて変えてしまえば良いのでしょう。
例えば、Uploadできるファイルの上限が、1つのModelに収まるのであれば、分割したりする必要は無いですしね。

http://slim3demos.appspot.com/upload/


また、今はBlobstoreAPIがあります。

http://code.google.com/intl/en/appengine/docs/java/blobstore/
横山殿がサンプルを作ってきてくださっていたのですが、そんなに難しくは無さそうでした。
更に、横山殿のBlogを見た@shin1ogawa 殿が以下のように仰っていたので、調べてみたいと思います。


Blobstoreを触るなら、FileServiceを使ったBlobstoreへのアクセスも合わせてやってみると面白いと思います。
AppEngineFileとか。そこからのGoogle Cloud Storageとか。


次回はValidationの辺りを読んでいく予定です。


後、結構前から気になっていたのですが、Slim3公式の文中のデモへのリンクが切れているのは何故なのでしょうか・・・?

http://slim3demo.appspot.com/upload/

http://slim3demos.appspot.com/upload/

上が貼ってあるリンクで、下が正しいリンク。
"s"が足らない!