diff options
Diffstat (limited to 'file_upload.rb')
-rw-r--r-- | file_upload.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/file_upload.rb b/file_upload.rb new file mode 100644 index 0000000..b9a6d6d --- /dev/null +++ b/file_upload.rb @@ -0,0 +1,54 @@ +# encoding: utf-8 + +require 'rubygems' +require 'haml' +require 'pathname' +require 'sinatra/base' + +class FileUpload < Sinatra::Base + configure do + enable :static + enable :sessions + + set :views, Pathname.new(__FILE__).dirname.join('views').expand_path + set :public, Pathname.new(__FILE__).dirname.join('public').expand_path + end + + helpers do + def flash(message = '') + session[:flash] = message + end + end + + not_found do + haml '404' + end + + error do + haml "Error (#{request.env['sinatra.error']})" + end + + get '/' do + @files = settings.public.join('files').entries - [Pathname('.'), Pathname('..')] + + @flash = session[:flash] + session[:flash] = nil + + haml :index + end + + post '/upload' do + if params[:file] + filename = params[:file][:filename] + file = params[:file][:tempfile] + + File.open(settings.public.join('files', filename), 'wb') {|f| f.write file.read } + + flash 'Uploaded successfully' + else + flash 'You have to choose a file' + end + + redirect '/' + end +end |