Faraday Multipart
The Multipart
middleware converts a Faraday::Request#body
Hash of key/value pairs into a multipart form request, but
only under these conditions:
- The request's Content-Type is "multipart/form-data"
- Content-Type is unspecified, AND one of the values in the Body responds to
#content_type
.
Faraday contains a couple helper classes for multipart values:
Faraday::Multipart::FilePart
wraps binary file data with a Content-Type. The file data can be specified with a String path to a local file, or an IO object.Faraday::Multipart::ParamPart
wraps a String value with a Content-Type, and optionally a Content-ID.
Installation
Add this line to your application's Gemfile:
gem 'faraday-multipart'
And then execute:
bundle install
Or install it yourself as:
gem install faraday-multipart
Usage
First of all, you'll need to add the multipart middleware to your Faraday connection:
require 'faraday/multipart'
conn = Faraday.new(...) do |f|
f.request :multipart
# ...
end
Payload can be a mix of POST data and multipart values.
# regular POST form value
payload = { string: 'value' }
# filename for this value is File.basename(__FILE__)
payload[:file] = Faraday::Multipart::FilePart.new(__FILE__, 'text/x-ruby')
# specify filename because IO object doesn't know it
payload[:file_with_name] = Faraday::Multipart::FilePart.new(
File.open(__FILE__),
'text/x-ruby',
File.basename(__FILE__)
)
# Sets a custom Content-Disposition:
# nil filename still defaults to File.basename(__FILE__)
payload[:file_with_header] = Faraday::Multipart::FilePart.new(
__FILE__,
'text/x-ruby',
nil,
'Content-Disposition' => 'form-data; foo=1'
)
# Upload raw json with content type
payload[:raw_data] = Faraday::Multipart::ParamPart.new(
{ a: 1 }.to_json,
'application/json'
)
# optionally sets Content-ID too
payload[:raw_with_id] = Faraday::Multipart::ParamPart.new(
{ a: 1 }.to_json,
'application/json',
'foo-123'
)
conn.post('/', payload)
Development
After checking out the repo, run bin/setup
to install dependencies.
Then, run bin/test
to run the tests.
To install this gem onto your local machine, run rake build
.
To release a new version, make a commit with a message such as "Bumped to 0.0.2" and then run rake release
. See how it
works here.
Contributing
Bug reports and pull requests are welcome on GitHub.
License
The gem is available as open source under the terms of the MIT License.