In Ruby, the HTTParty gem is a popular library used for making HTTP requests, including multipart requests. Multipart requests are typically used to upload files and submit form data with different types of content.
To make a multipart request with HTTParty, you would generally use the HTTParty.post
method and include the :multipart
option within the :body
of the request. You would also need to specify the correct Content-Type
header for a multipart form-data request, which is multipart/form-data
.
Below is an example of how to make a multipart request using HTTParty to upload a file along with other form fields:
require 'httparty'
require 'mime/types'
# Determine the MIME type of the file
mime_type = MIME::Types.type_for('example.png').first.content_type
# Prepare the file to be uploaded
file = File.new('example.png')
# Create the request body for the multipart form-data
body = {
# Regular form field (key-value pair)
'field1' => 'value1',
# File field
'file' => HTTParty::Request::Multipart::File.new(file, mime_type)
}
# Make the multipart POST request
response = HTTParty.post(
'http://example.com/upload',
body: body,
headers: { 'Content-Type' => 'multipart/form-data' },
multipart: true # Tell HTTParty that this is a multipart request
)
# Output the response
puts response.body
In the example above, we use HTTParty::Request::Multipart::File
to prepare the file for uploading. It takes two arguments: an instance of File
and the MIME type of the file.
Important to note is that when making multipart requests with HTTParty, it's not necessary to manually set the boundary
in the Content-Type
header. HTTParty handles that automatically when you specify multipart: true
.
Additionally, HTTParty has been updated to handle multipart requests more conveniently. This means that you might not need to manually set the Content-Type
header to multipart/form-data
or use HTTParty::Request::Multipart::File
. Instead, HTTParty can detect the presence of file objects in the body
and set the headers accordingly.
Here's a simplified example using the newer HTTParty syntax:
require 'httparty'
# Prepare the file to be uploaded
file = File.new('example.png')
# Create the request body for the multipart form-data
body = {
# Regular form field (key-value pair)
'field1' => 'value1',
# File field
'file' => file
}
# Make the multipart POST request
response = HTTParty.post(
'http://example.com/upload',
body: body,
multipart: true # Tell HTTParty that this is a multipart request
)
# Output the response
puts response.body
In this example, we simply pass the File
object directly in the body
hash, and HTTParty takes care of the rest.
Before using these examples, ensure you have the latest version of HTTParty installed since APIs might change. You can install or update HTTParty using the following command:
gem install httparty