Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

File upload with Sinatra

I am trying to be able to upload files with Sinatra. I have the code here, but I'm getting the error "method file_hash does not exist" (see /lib/mvc/helpers/helpers.rb).

What is going on here? Is there some dependency I'm missing.

like image 929
Ethan Turkeltaub Avatar asked Apr 21 '10 19:04

Ethan Turkeltaub


2 Answers

I've had good luck with the example code found on this thread.

Including it here in case the link ever disappears:

post '/upload' do
  unless params[:file] &&
         (tmpfile = params[:file][:tempfile]) &&
         (name = params[:file][:filename])
    @error = "No file selected"
    return haml(:upload)
  end
  STDERR.puts "Uploading file, original name #{name.inspect}"
  while blk = tmpfile.read(65536)
    # here you would write it to its final location
    STDERR.puts blk.inspect
  end
  "Upload complete"
end

Then your view would look like this. This uses HAML, but the important part is not to forget to set the enctype in your form element, otherwise you will just get the filename instead of an object:

%form{:action=>"/upload",:method=>"post"   ,:enctype=>"multipart/form-data"}
  %input{:type=>"file",:name=>"file"}
  %input{:type=>"submit",:value=>"Upload"}
like image 186
Jeremy Mullin Avatar answered Sep 22 '22 18:09

Jeremy Mullin


include FileUtils::Verbose

get '/upload' do
    erb :upload
end

post '/upload' do
    tempfile = params[:file][:tempfile] 
    filename = params[:file][:filename] 
    cp(tempfile.path, "public/uploads/#{filename}")
    'Yeaaup'
end

__END__

@@upload
<form action='/upload' enctype="multipart/form-data" method='POST'>
    <input name="file" type="file" />
    <input type="submit" value="Upload" />
</form>
like image 30
ruvan Avatar answered Sep 20 '22 18:09

ruvan