grails で uploader を作る。その2

昨日に引き続き更新。
今回は、ファイルアップロード時に元ファイルと同じ名前でサーバに保存できるようにする。

controller の作成

前回作った controller を編集していく。

request.getFile() メソッドでアップロードされたファイルの情報を取得。 ファイル情報を取得したら以下のメソッドでファイルの情報を取得することが可能と…

  • class : アップロードしたファイルのクラス名
  • name : アップロードしたファイルの名前(オリジナルのファイル名ではない)
  • size : アップロードしたファイルのサイズ
  • contentType : アップロードしたファイルのタイプ
  • originalFilename : アップロードしたファイルのオリジナルの名前

調べたら、意外と簡単にできた。
あとは、上のメソッドを前回作った controller に追加して…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class UploaderController {
    ....
    def upload = {
        def file = request.getFile('myFile')
        if (!file.empty) {
            println "Class: ${file.class}"
            println "Name: ${file.name}"
            println "OriginalFileName: ${file.originalFilename}"
            println "Size: ${file.size}"
            println "ContentType: ${file.contentType}"
            f.transferTo(new File('data/'+file.originalFilename))
            response.sendError(200, 'Done')
        }
        else {
            flash.message = 'file cannot be empty'
            redirect(action: index)
        }
}

こんな感じに編集。これでアップロードしたファイルと同じ名前でサーバに保存される。
実行して気づいたのだが、println の行はページに表示されるのではなくてコンソールに出力される。

実行!

% grails run-app

前回同様、コマンドを実行して何事も無く起動できたら http://localhost:8080/gapp にアクセス。

ファイルを選択して送信…またまた真っ白いページに飛ばされるけれど、 「data」フォルダにアップロードしたファイルと同じ名前のファイルが ( ´∀`)bグッ!

ファイル送信後の真っ白いページどうにかしろって話ですよね。
アップロードしたファイルを表示できたらいいのかな? この辺の処理をどう書いていいのかよく分からない。

今回参考にしたページに TagLib ってのを使うとできるって書いてあったのでやってみるかな。

あと、アップロードしたファイルを DB で管理できると今後幸せになりそうなので、 そこんとこの処理も考えないといけないかも。

参考

Comments