A backend-agnostic extension for file uploads in HTTP libraries for Rust
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
src client: add note about trailing CRLF Jan 28, 2019
.travis.yml Use lazy_static 1.2.0, remove twoway/pcmp and require rust 1.24.1+ Jan 19, 2019
LICENSE Initial commit Oct 21, 2014
LICENSE-APACHE Change license to Apache-2.0/MIT Mar 13, 2016
LICENSE-MIT Update copyright disclaimer in MIT license Mar 28, 2016
README.md remove `sse4` note in README Jan 28, 2019
fuzz_server.sh Allow setting fuzz data length by env var Apr 20, 2017
lorem_ipsum.txt Move `lorem_ipsum.txt` to root Sep 20, 2017


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.24.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. Uses SIMD acceleration when possible.


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.