« 結婚指輪なくちゃった...(ToT) | トップページ

2008/09/21

Rubyでファイルのアップロード

稟議決裁書類の管理用WebスクリプトをRubyで作っていたのですが、題名だけで検索できても結局ファイルを探して内容を確認しなくてはならないので不便。
以前紹介したバージョンはこちら

ということで、PDFで取り込んだものを保存できるようにするため、Rubyでファイルをアップロードする機能を実装してみました。
ついでにデータベースのスキーマもちょっといじって、区分や分類を編集できるようにしてますがこれは主題ではないので説明を省略。

で、アップロードするのに必要なフォームを

<form method="post" action="upload.rb" enctype="multipart/form-data">
  アップロードしたいファイル : <input type="FILE" name="file"><br>
  コメント : <input type="text" name="comment" size="40"><br>
  <input type="submit" name="upload" value="アップロードする">
</form>

とすると、これを受け取るスクリプトは下記になります。

require "cgi"

cgi = CGI.new()

file = cgi.params["file"][0]
comment = cgi.params["comment"][0].read

file_name = file.original_filename.split(/(\\|\/)/)[-1]
open(Dir.getwd + "/file/#{file_name}", "w") {|fh|
  fh.binmode
  fh.write file.read
}

このスクリプトで、実行しているディレクトリ下にあるfileフォルダにアップロードされたファイルを保存します。

ここで注意したいのは、送信したコメントを取得するためにreadメソッドを利用するということです。
アップロードするのに合わせて何か付加情報を登録したい場合があると思いますが、通常のフォームデータの受け取り方法ではだめみたいですね。
これがわかるまでには結構時間がかかりました。

最近の参考資料は「Rubyレシピブック 第二版」ですが、ちょっと痒いところに手が届かないのが残念。

で、完成品は下記のサイトで確認できますので、興味のある方は動作テストしてみて下さい。勝手に登録・削除して頂いてかまいませんので、ご自由にどうぞ。

サンプルサイト

また、ソースコードも合わせて公開するので、こちらの方も必要な方はご利用下さい。

「ringi_dev.zip」をダウンロード

以上、備忘のためのメモでした。

|

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/79953/42546452

この記事へのトラックバック一覧です: Rubyでファイルのアップロード:

コメント

コメントを書く



(ウェブ上には掲載しません)