module
MIME::Multipart
Overview
TheMIME::Multipart module contains utilities for parsing MIME multipart
messages, which contain multiple body parts, each containing a header section
and binary body. Themultipart/form-data content-type has a separate set of
utilities in theHTTP::FormData module.
Defined in:
mime/multipart.crmime/multipart/builder.cr
mime/multipart/parser.cr
mime/multipart/state.cr
Class Method Summary
-
.build(io : IO, boundary : String = Multipart.generate_boundary, &)
Yields a
Multipart::Builderto the given block, writing toio and usingboundary. -
.build(boundary : String = Multipart.generate_boundary, &)
Yields a
Multipart::Builderto the given block, returning the generated message as aString. -
.generate_boundary : String
Returns a unique string suitable for use as a multipart boundary.
-
.parse(io, boundary, &)
Parses a MIME multipart message, yielding
HTTP::Headersand anIOfor each body part. -
.parse(request : HTTP::Request, &)
Parses a MIME multipart message, yielding
HTTP::Headersand anIOfor each body part. -
.parse(response : HTTP::Client::Response, &)
Parses a MIME multipart message, yielding
HTTP::Headersand anIOfor each body part. -
.parse_boundary(content_type : String) : String | Nil
Extracts the multipart boundary from the Content-Type header.
Class Method Detail
Yields aMultipart::Builder to the given block, writing toio and
usingboundary.#finish is automatically called on the builder.
Returns a unique string suitable for use as a multipart boundary.
require "mime/multipart"
MIME::Multipart.generate_boundary # => "---------------------------dQu6bXHYb4m5zrRC3xPTGwV"
Parses a MIME multipart message, yieldingHTTP::Headers and anIO 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
Parses a MIME multipart message, yieldingHTTP::Headers and anIO 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
Parses a MIME multipart message, yieldingHTTP::Headers and anIO 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/byteranges; boundary=aA40"}
body = "--aA40\r\nContent-Type: text/plain\r\n\r\nbody\r\n--aA40--"
response = HTTP::Client::Response.new(
status: :ok,
headers: headers,
body: body,
)
MIME::Multipart.parse(response) do |headers, io|
headers["Content-Type"] # => "text/plain"
io.gets_to_end # => "body"
end