« 結婚指輪なくちゃった...(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メソッドを利用するということです。
アップロードするのに合わせて何か付加情報を登録したい場合があると思いますが、multipart/form-dataで送信した場合、通常のフォームデータの受け取り方法ではだめみたいですね。
これがわかるまでには結構時間がかかりました。

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

サンプルサイト

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

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

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

*2008/9/22追記

ちょこっと修正したので、更新版を公開します。
「ringi002.zip」をダウンロード

*2008/9/25追記

またまた修正したので、更新版を公開します。主な改良点として、「確認」ボタンを押した時に、インラインフレームでPDFを表示するようにしました。これで、いちいち新しいウィンドウを開かなくても中身の確認ができます。
「ringi003.zip」をダウンロード

|

« 結婚指輪なくちゃった...(ToT) | トップページ | 空手の試合 »

コメント

コメントを書く



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




トラックバック

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

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

« 結婚指輪なくちゃった...(ToT) | トップページ | 空手の試合 »