grails で uploader を作る。 その3
前回からの続き。
今回は、アップロードしたファイルの情報を DB に格納するところまで実装する。
DB の環境設定
はじめに、使う DB を MySQL に変更する。
DB を変更するために、conf/DataSource.groovy
を編集する。
その前に、grails で使うための DB をあらかじめ作っておくのと、
Grails と MySQL を連携するためのドライバ MySQL JDBC をダウンロードし、「lib」フォルダ以下に置いておく必要がある。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
これで、Grails から MySQL を使うことができる。
domain の作成
まず、ドメインクラスを作成する。
% grails create-domain-class uploader
これで、domain/{アプリ名}/Uploader.groovy
というファイルが生成されているので、
このファイルにテーブルのフィールド情報等を記述していく。
今回はアップロードしたファイルの情報を DB に格納するので、
- String title
- String summary
- String filename
- Date dateCreated
- Date lastUpdated
を定義する。
また、今回のようにアップロードされたファイルの名前を DB に格納する場合、次のような制約を記述する必要があるらしい。 (参照:ファイルのアップロードと Atom の配信)
filename(blank:true, nullable:true)
これらをまとめると、ドメインクラス Uploader.groovy は以下のような感じになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
static constraints ={}
には、フィールドの順番/長さ/パターンなど、フィールドに関する制約を記述。
static mapping = {}
には、主キー/複合キー等の設定や、今回のようにソート条件などを記述。
以上で、DB の設定と準備は終了。
controller の編集
前回作った controller を編集していく。
upload アクションに、form 入力された値(これは全て params にまとめられてる)を持つインスタンスを作成。 インスタンスを作成したら、
hasErrors()
メソッド:インスタンスがきちんと作られているかチェック。save()
メソッド:DB に保存
といったメソッドを使ってエラー処理、DB書込みを行う。
また、params の filename は「myFile」となっているので、これをアップロードされたファイルのオリジナルネームに変更している。 これらをまとめると、以下のような感じになる。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
以上で、アップロードされたファイルの情報が指定した DB に書き込まれる。
今回はファイルの情報を DB に格納するための処理を追加しただけなので、ファイル送信後のページは相変わらず真っ白なページ…。 DB に格納後ファイル一覧のページに redirect するように記述するとエラーでるんですよね。なんでだろ?
ファイルアップロード → DB書込み → ファイルの表示 ができるとアップローダらしくなるんだけどな。 この辺りはもう少し時間がかかりそう。