#form-data #hyper #iron #http #upload

bin+lib multipart

A backend-agnostic extension for HTTP libraries that provides support for POST multipart/form-data requests on both client and server

51 releases

0.15.3 Aug 28, 2018
0.15.2 Jul 30, 2018
0.14.2 Mar 1, 2018
0.13.6 Dec 21, 2017
0.1.0 Nov 29, 2014

#8 in Web programming

Download history 1641/week @ 2018-09-05 2140/week @ 2018-09-12 2217/week @ 2018-09-19 2210/week @ 2018-09-26 2524/week @ 2018-10-03 1943/week @ 2018-10-10 2359/week @ 2018-10-17 1660/week @ 2018-10-24 2363/week @ 2018-10-31 2504/week @ 2018-11-07 2479/week @ 2018-11-14 1845/week @ 2018-11-21 1764/week @ 2018-11-28

8,173 downloads per month
Used in 44 crates (20 directly)



Multipart Build Status On Crates.io

Client- and server-side abstractions for HTTP file uploads (POST requests with Content-Type: multipart/form-data).

Supports several different (synchronous API) HTTP crates. Asynchronous (i.e. futures-based) API support will be provided by multipart-async.

Minimum supported Rust version: 1.22.1*

  • only mock, client and server features, only guaranteed to compile

Fully tested Rust version: 1.26.1



Example files demonstrating how to use multipart with these crates are available under examples/.


via the hyper feature (enabled by default).

Note: Hyper 0.9, 0.10 (synchronous API) only; support for asynchronous APIs will be provided by multipart-async.

Client integration includes support for regular hyper::client::Request objects via multipart::client::Multipart, as well as integration with the new hyper::Client API via multipart::client::lazy::Multipart (new in 0.5).

Server integration for hyper::server::Request via multipart::server::Multipart.


via the iron feature.

Provides regular server-side integration with iron::Request via multipart::server::Multipart, as well as a convenient BeforeMiddleware implementation in multipart::server::iron::Intercept.

Nickel returning to multipart in 0.14!

via the nickel feature.

Provides server-side integration with &mut nickel::Request via multipart::server::Multipart.


via the tiny_http feature.

Provides server-side integration with tiny_http::Request via multipart::server::Multipart.


Direct integration is not provided as the Rocket folks seem to want to handle multipart/form-data behind the scenes which would supercede any integration with multipart. However, an example is available showing how to use multipart on a Rocket server: examples/rocket.rs

⚡ Powered By ⚡


Customizable drop-in std::io::BufReader replacement, created to be used in this crate. Needed because it can read more bytes into the buffer without the buffer being empty, necessary when a boundary falls across two reads. (It was easier to author a new crate than try to get this added to std::io::BufReader.)


Fast, zero-copy HTTP header parsing, used to read field headers in multipart/form-data request bodies.


Fast string and byte-string search. Used to find boundaries in the request body. SSE 4.2 acceleration available under the sse42 or twoway/pcmp features.


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


~263K SLoC