Multipart::Post
Adds a streamy multipart form post capability to Net::HTTP
. Also supports other
methods besides POST
.
Features/Problems
- Appears to actually work. A good feature to have.
- Encapsulates posting of file/binary parts and name/value parameter parts, similar to most browsers' file upload forms.
- Provides an
UploadIO
helper class to prepare IO objects for inclusion in the params hash of the multipart post object.
Installation
bundle add multipart-post
Usage
Please browse the source code index or refer to the guides below.
Parts Headers
By default, all individual parts will include the header Content-Disposition
as well as Content-Length
, Content-Transfer-Encoding
and Content-Type
for the File Parts.
You may optionally configure the headers Content-Type
and Content-ID
for both ParamPart and FilePart by passing in a parts
header.
For example:
url = URI.parse('http://www.example.com/upload')
params = {
"file_metadata_01" => { "description" => "A nice picture!" },
"file_content_01" => UploadIO.new(file, "image/jpeg", "image.jpg")
}
headers = {
'parts': {
'file_metadata_01': {
'Content-Type' => "application/json"
}
}
}
req = Net::HTTP::Post::Multipart.new(uri, params, headers)
This would configure the file_metadata_01
part to include Content-Type
Content-Disposition: form-data; name="file_metadata_01"
Content-Type: application/json
{
"description" => "A nice picture!"
}
Custom Parts Headers
For FileParts only.
You can include any number of custom parts headers in addition to Content-Type
and Content-ID
.
headers = {
'parts': {
'file_metadata_01': {
'Content-Type' => "application/json",
'My-Custom-Header' => "Yo Yo!"
}
}
}
Debugging
You can debug requests and responses (e.g. status codes) for all requests by adding the following code:
http = Net::HTTP.new(uri.host, uri.port)
http.set_debug_output($stdout)
Versioning
This library aims to adhere to Semantic Versioning 2.0.0. Violations of this scheme should be reported as bugs. Specifically, if a minor or patch version is released that breaks backward compatibility, a new version should be immediately released that restores compatibility. Breaking changes to the public API will only be introduced with new major versions.
As a result of this policy, you can (and should) specify a dependency on this gem using the Pessimistic Version Constraint with two digits of precision.
For example:
spec.add_dependency 'multipart-post', '~> 2.1'