2024-01-10 04:00:20 +00:00
# `actix-multipart`
2019-04-29 20:47:21 -07:00
2024-01-10 04:00:20 +00:00
<!-- prettier - ignore - start -->
2021-02-10 12:10:03 +00:00
[](https://crates.io/crates/actix-multipart)
2024-07-07 00:34:18 +01:00
[](https://docs.rs/actix-multipart/0.7.2)
2024-02-13 01:24:34 +00:00

2021-02-10 12:10:03 +00:00

< br / >
2024-07-07 00:34:18 +01:00
[](https://deps.rs/crate/actix-multipart/0.7.2)
2021-02-10 12:10:03 +00:00
[](https://crates.io/crates/actix-multipart)
2021-06-26 16:33:36 +01:00
[](https://discord.gg/NWpN5mmg3x)
2021-02-10 12:10:03 +00:00
2024-01-10 04:00:20 +00:00
<!-- prettier - ignore - end -->
2024-05-18 21:02:00 +02:00
2024-06-10 23:35:26 +01:00
<!-- cargo - rdme start -->
2024-05-18 21:02:00 +02:00
2024-07-07 20:32:56 +01:00
Multipart request & form support for Actix Web.
The [`Multipart` ] extractor aims to support all kinds of `multipart/*` requests, including `multipart/form-data` , `multipart/related` and `multipart/mixed` . This is a lower-level extractor which supports reading [multipart fields ](Field ), in the order they are sent by the client.
Due to additional requirements for `multipart/form-data` requests, the higher level [`MultipartForm` ] extractor and derive macro only supports this media type.
2024-05-18 21:02:00 +02:00
2024-06-10 23:35:26 +01:00
## Examples
2024-05-18 21:02:00 +02:00
```rust
use actix_web::{post, App, HttpServer, Responder};
2024-07-07 20:32:56 +01:00
use actix_multipart::form::{json::Json as MpJson, tempfile::TempFile, MultipartForm};
2024-05-18 21:02:00 +02:00
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct Metadata {
name: String,
}
#[derive(Debug, MultipartForm)]
struct UploadForm {
#[multipart(limit = "100MB")]
file: TempFile,
2024-07-07 20:32:56 +01:00
json: MpJson< Metadata > ,
2024-05-18 21:02:00 +02:00
}
#[post("/videos")]
pub async fn post_video(MultipartForm(form): MultipartForm< UploadForm > ) -> impl Responder {
format!(
"Uploaded file {}, with size: {}",
form.json.name, form.file.size
)
}
#[actix_web::main]
async fn main() -> std::io::Result< ()> {
HttpServer::new(move || App::new().service(post_video))
.bind(("127.0.0.1", 8080))?
.run()
.await
}
```
2024-07-01 03:55:08 +01:00
cURL request:
2024-06-07 16:04:04 +01:00
2024-07-01 03:55:08 +01:00
```sh
2024-05-18 21:02:00 +02:00
curl -v --request POST \
--url http://localhost:8080/videos \
-F 'json={"name": "Cargo.lock"};type=application/json' \
-F file=@./Cargo.lock
```
2024-07-01 03:55:08 +01:00
2024-07-07 20:32:56 +01:00
[`MultipartForm` ]: struct@form::MultipartForm
2024-07-01 03:55:08 +01:00
<!-- cargo - rdme end -->
[More available in the examples repo → ](https://github.com/actix/examples/tree/master/forms/multipart )