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レシピブック 第二版」ですが、ちょっと痒いところに手が届かないのが残念。
で、完成品は下記のサイトで確認できますので、興味のある方は動作テストしてみて下さい。勝手に登録・削除して頂いてかまいませんので、ご自由にどうぞ。
また、ソースコードも合わせて公開するので、こちらの方も必要な方はご利用下さい。
以上、備忘のためのメモでした。
| 固定リンク
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/79953/42546452
この記事へのトラックバック一覧です: Rubyでファイルのアップロード:
コメント