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.
Add this to your Cargo.toml
:
toml
[dependencies]
multer = "1.0"
```rust use bytes::Bytes; use futures::stream::Stream; // Import multer types. use multer::Multipart; use std::convert::Infallible; use futures::stream::once;
async fn main() -> Result<(), Box
// Create a `Multipart` instance from that byte stream and the boundary.
let mut multipart = Multipart::new(stream, boundary);
// Iterate over the fields, use `next_field()` to get the next field.
while let Some(field) = multipart.next_field().await? {
// Get field name.
let name = field.name();
// Get the field's filename if provided in "Content-Disposition" header.
let file_name = field.file_name();
println!("Name: {:?}, File Name: {:?}", name, file_name);
// Read field content as text.
let content = field.text().await?;
println!("Content: {:?}", content);
}
Ok(())
}
// Generate a byte stream and the boundary from somewhere e.g. server request body.
async fn getbytestreamfromsomewhere() -> (impl Stream
(stream, "X-BOUNDARY")
} ```
An example showing usage with hyper.rs.
For more examples, please visit examples.
Your PRs and suggestions are always welcome.