
multer-rs
An async parser for multipart/form-data content-type in Rust.
It accepts a Stream of Bytes as
a source, so that It can be plugged into any async Rust environment e.g. any async server.
Docs
Install
Add this to your Cargo.toml:
[dependencies]
multer = "1.0"
Basic Example
use bytes::Bytes;
use futures::stream::Stream;
use multer::Multipart;
use std::convert::Infallible;
use futures::stream::once;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let (stream, boundary) = get_byte_stream_from_somewhere().await;
let mut multipart = Multipart::new(stream, boundary);
while let Some(field) = multipart.next_field().await? {
let name = field.name();
let file_name = field.file_name();
println!("Name: {:?}, File Name: {:?}", name, file_name);
let content = field.text().await?;
println!("Content: {:?}", content);
}
Ok(())
}
async fn get_byte_stream_from_somewhere() -> (impl Stream<Item = Result<Bytes, Infallible>>, &'static str) {
let data = "--X-BOUNDARY\r\nContent-Disposition: form-data; name=\"My Field\"\r\n\r\nabcd\r\n--X-BOUNDARY--\r\n";
let stream = once(async move { Result::<Bytes, Infallible>::Ok(Bytes::from(data)) });
(stream, "X-BOUNDARY")
}
Usage with hyper.rs server
An example showing usage with hyper.rs.
For more examples, please visit examples.
Contributing
Your PRs and suggestions are always welcome.