module MIME::Multipart
¶
The MIME::Multipart module contains utilities for parsing MIME multipart
messages, which contain multiple body parts, each containing a header section
and binary body. The multipart/form-data content-type has a separate set of
utilities in the HTTP::FormData module.
Class methods¶
.build(io : IO, boundary : String = Multipart
¶
(io : IO, boundary : String = Multipart
Yields a Multipart::Builder to the given block, writing to io and
using boundary. #finish is automatically called on the builder.
.build(boundary : String = Multipart
¶
(boundary : String = Multipart
Yields a Multipart::Builder to the given block, returning the generated
message as a String.
.generate_boundary : String
¶
: String
Returns a unique string suitable for use as a multipart boundary.
require "mime/multipart"
MIME::Multipart.generate_boundary # => "---------------------------dQu6bXHYb4m5zrRC3xPTGwV"
.parse
¶
Parses a MIME multipart message, yielding HTTP::Headers and an IO for
each body part.
Please note that the IO object yielded to the block is only valid while the block is executing. The IO is closed as soon as the supplied block returns.
require "mime/multipart"
multipart = "--aA40\r\nContent-Type: text/plain\r\n\r\nbody\r\n--aA40--"
MIME::Multipart.parse(IO::Memory.new(multipart), "aA40") do |headers, io|
headers["Content-Type"] # => "text/plain"
io.gets_to_end # => "body"
end
See: Multipart::Parser
.parse(request : HTTP::Request
¶
(request : HTTP::Request
Parses a MIME multipart message, yielding HTTP::Headers and an IO for
each body part.
Please note that the IO object yielded to the block is only valid while the block is executing. The IO is closed as soon as the supplied block returns.
require "http"
require "mime/multipart"
headers = HTTP::Headers{"Content-Type" => "multipart/mixed; boundary=aA40"}
body = "--aA40\r\nContent-Type: text/plain\r\n\r\nbody\r\n--aA40--"
request = HTTP::Request.new("POST", "/", headers, body)
MIME::Multipart.parse(request) do |headers, io|
headers["Content-Type"] # => "text/plain"
io.gets_to_end # => "body"
end
See: Multipart::Parser
.parse_boundary(content_type)
¶
(content_type)
Extracts the multipart boundary from the Content-Type header. May return
nil is the boundary was not found.
require "mime/multipart"
MIME::Multipart.parse_boundary("multipart/mixed; boundary=\"abcde\"") # => "abcde"