How do I upload an image with Sinatra (like Paperclip)?

Discussion in 'Ruby' started by Tony Tony, Aug 9, 2009.

  1. Tony Tony

    Tony Tony Guest

    Hi all,

    I need to upload an image from my local computer to a web server and
    store the location in a database (similar to how Paperclip and
    attachment_fu work) in Sinatra.

    Any ideas on how to get this to work?


    Thanks in advance,
    Tony
    --
    Posted via http://www.ruby-forum.com/.
     
    Tony Tony, Aug 9, 2009
    #1
    1. Advertising

  2. [Note: parts of this message were removed to make it a legal post.]

    If you use datamapper, there is an paperclip for datamapper!

    regards!
     
    Marcos Vanetta, Aug 9, 2009
    #2
    1. Advertising

  3. Tony Tony

    Tony Tony Guest

    Marcos Vanetta wrote:
    > If you use datamapper, there is an paperclip for datamapper!
    >
    > regards!


    Thanks for the reply! I'm using ActiveRecord and wouldn't want to change
    to Datamapper unless I HAD to. Thanks again, I'll look into it as soon
    as I get a chance.


    -Tony
    --
    Posted via http://www.ruby-forum.com/.
     
    Tony Tony, Aug 9, 2009
    #3
  4. Tony Tony wrote:
    > I need to upload an image from my local computer to a web server and
    > store the location in a database (similar to how Paperclip and
    > attachment_fu work) in Sinatra.


    I don't know Paperclip or attachment_fu, but getting the attachment in
    Sinatra is easy: you get an open tempfile that you read from.

    Something like this (extracted from some working code but not tested in
    isolation):

    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

    ---------
    %h1 Upload

    %form{:action=>"/upload",:method=>"post",:enctype=>"multipart/form-data"}
    %input{:type=>"file",:name=>"file"}
    %input{:type=>"submit",:value=>"Upload"}
    --
    Posted via http://www.ruby-forum.com/.
     
    Brian Candler, Aug 10, 2009
    #4
  5. Tony Tony

    Bin Bin Guest

    Brian Candler wrote:
    > Tony Tony wrote:
    >> I need to upload an image from my local computer to a web server and
    >> store the location in a database (similar to how Paperclip and
    >> attachment_fu work) in Sinatra.

    >
    > I don't know Paperclip or attachment_fu, but getting the attachment in
    > Sinatra is easy: you get an open tempfile that you read from.
    >
    > Something like this (extracted from some working code but not tested in
    > isolation):
    >
    > 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
    >
    > ---------
    > %h1 Upload
    >
    > %form{:action=>"/upload",:method=>"post",:enctype=>"multipart/form-data"}
    > %input{:type=>"file",:name=>"file"}
    > %input{:type=>"submit",:value=>"Upload"}


    That is helpful.Thank u so much




    ---------------
    http://dressup9x.com is a best Fashion Games, Girl Games, Dressup Game
    --
    Posted via http://www.ruby-forum.com/.
     
    Bin Bin, Aug 10, 2009
    #5
  6. Tony Tony

    Tony Tony Guest

    Thank you Brian! I will give it a shot when I have some time and reply
    here. Truly appreciate it!


    -Tony
    --
    Posted via http://www.ruby-forum.com/.
     
    Tony Tony, Aug 10, 2009
    #6
  7. Tony Tony

    Almaz Om Guest

    phanks:

    post '/upload' do
    unless params[:file] &&
    (tmpfile = params[:file][:tempfile]) &&
    (name = params[:file][:filename])
    @error = "No file selected"
    return haml:)upload)
    end
    directory = "public/files"
    path = File.join(directory, name)
    File.open(path, "wb") { |f| f.write(tmpfile.read) }
    end

    so will be better for me :)
    --
    Posted via http://www.ruby-forum.com/.
     
    Almaz Om, Jul 24, 2010
    #7
  8. Almaz OM wrote:
    > phanks:
    >
    > post '/upload' do
    > unless params[:file] &&
    > (tmpfile = params[:file][:tempfile]) &&
    > (name = params[:file][:filename])
    > @error = "No file selected"
    > return haml:)upload)
    > end
    > directory = "public/files"
    > path = File.join(directory, name)
    > File.open(path, "wb") { |f| f.write(tmpfile.read) }
    > end
    >
    > so will be better for me :)


    OK. Beware that f.write(tmpfile.read) will use as much RAM as the size
    of the attachment. Hence the suggestion to read it in and write it out
    in blocks of, say, 64K.
    --
    Posted via http://www.ruby-forum.com/.
     
    Brian Candler, Jul 30, 2010
    #8
  9. Tony Tony

    Bohdan S. Guest

    Brian Candler wrote in post #929342:
    > Almaz OM wrote:
    >> phanks:
    >>
    >> post '/upload' do
    >> unless params[:file] &&
    >> (tmpfile = params[:file][:tempfile]) &&
    >> (name = params[:file][:filename])
    >> @error = "No file selected"
    >> return haml:)upload)
    >> end
    >> directory = "public/files"
    >> path = File.join(directory, name)
    >> File.open(path, "wb") { |f| f.write(tmpfile.read) }
    >> end
    >>
    >> so will be better for me :)

    >
    > OK. Beware that f.write(tmpfile.read) will use as much RAM as the size
    > of the attachment. Hence the suggestion to read it in and write it out
    > in blocks of, say, 64K.


    "f.write(tmpfile.read)"?? Why so complex?...

    post '/upload' do
    tempfile = params['file'][:tempfile]
    filename = params['file'][:filename]
    File.copy(tempfile.path, "./files/#{filename}")
    redirect '/'
    end

    http://tumblr.com/xciegm157

    --
    Posted via http://www.ruby-forum.com/.
     
    Bohdan S., Apr 5, 2011
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Tony Tony
    Replies:
    1
    Views:
    165
    Tony Tony
    Nov 10, 2008
  2. Ryan Tomayko

    [ANN] Sinatra 0.9.0 released!

    Ryan Tomayko, Jan 18, 2009, in forum: Ruby
    Replies:
    0
    Views:
    123
    Ryan Tomayko
    Jan 18, 2009
  3. John O'gara
    Replies:
    3
    Views:
    97
    John O'gara
    Jan 22, 2010
  4. Dan Quach
    Replies:
    3
    Views:
    138
    Robert Klemme
    Jan 6, 2011
  5. Ed Howland
    Replies:
    1
    Views:
    139
    Konstantin H.
    Oct 26, 2010
Loading...

Share This Page