Ruby: How to post a file via HTTP as multipart/form-data? Ruby: How to post a file via HTTP as multipart/form-data? ruby ruby

Ruby: How to post a file via HTTP as multipart/form-data?


I like RestClient. It encapsulates net/http with cool features like multipart form data:

require 'rest_client'RestClient.post('http://localhost:3000/foo',   :name_of_file_param => File.new('/path/to/file'))

It also supports streaming.

gem install rest-client will get you started.


I can't say enough good things about Nick Sieger's multipart-post library.

It adds support for multipart posting directly to Net::HTTP, removing your need to manually worry about boundaries or big libraries that may have different goals than your own.

Here is a little example on how to use it from the README:

require 'net/http/post/multipart'url = URI.parse('http://www.example.com/upload')File.open("./image.jpg") do |jpg|  req = Net::HTTP::Post::Multipart.new url.path,    "file" => UploadIO.new(jpg, "image/jpeg", "image.jpg")  res = Net::HTTP.start(url.host, url.port) do |http|    http.request(req)  endend

You can check out the library here:http://github.com/nicksieger/multipart-post

or install it with:

$ sudo gem install multipart-post

If you're connecting via SSL you need to start the connection like this:

n = Net::HTTP.new(url.host, url.port) n.use_ssl = true# for debugging dev server#n.verify_mode = OpenSSL::SSL::VERIFY_NONEres = n.start do |http|


Another one using only standard libraries:

uri = URI('https://some.end.point/some/path')request = Net::HTTP::Post.new(uri)request['Authorization'] = 'If you need some headers'form_data = [['photos', photo.tempfile]] # or File.open() in case of local filerequest.set_form form_data, 'multipart/form-data'response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| # pay attention to use_ssl if you need it  http.request(request)end

Tried a lot of approaches but only this was worked for me.