Middleware that parses multipart request bodies into parameters.

This middleware is necessary to handle file uploads from web browsers.

Ring comes with two different multipart storage engines included:



(content-too-large-handler _)(content-too-large-handler request respond _)
A handler function that responds with a minimal 413 Content Too Large


added in 1.2

(multipart-params-request request)(multipart-params-request request options)
Adds :multipart-params and :params keys to request.
See: wrap-multipart-params.


(wrap-multipart-params handler)(wrap-multipart-params handler options)
Middleware to parse multipart parameters from a request. Adds the
following keys to the request map:

:multipart-params - a map of multipart parameters
:params           - a merged map of all types of parameter

The following options are accepted

:encoding          - character encoding to use for multipart parsing.
                     Overrides the encoding specified in the request. If not
                     specified, uses the encoding specified in a part named
                     "_charset_", or the content type for each part, or
                     request character encoding if the part has no encoding,
                     or "UTF-8" if no request character encoding is set.

:fallback-encoding - specifies the character encoding used in parsing if a
                     part of the request does not specify encoding in its
                     content type or no part named "_charset_" is present.
                     Has no effect if :encoding is also set.

:store             - a function that stores a file upload. The function
                     should expect a map with :filename, :content-type and
                     :stream keys, and its return value will be used as the
                     value for the parameter in the multipart parameter map.
                     The default storage function is the temp-file-store.

:progress-fn       - a function that gets called during uploads. The
                     function should expect four parameters: request,
                     bytes-read, content-length, and item-count.

:max-file-size     - the maximum size allowed size of a file in bytes. If
                     nil or omitted, there is no limit.

:max-file-count    - the maximum number of files allowed in a single request.
                     If nil or omitted, there is no limit.

:error-handler     - a handler that is invoked when the :max-file-size or
                     :max-file-count limits are exceeded. Defaults to
                     using the content-too-large-handler function.