actix_multipart/
extractor.rs

1use actix_utils::future::{ready, Ready};
2use actix_web::{dev::Payload, Error, FromRequest, HttpRequest};
3
4use crate::multipart::Multipart;
5
6/// Extract request's payload as multipart stream.
7///
8/// Content-type: multipart/*;
9///
10/// # Examples
11///
12/// ```
13/// use actix_web::{web, HttpResponse};
14/// use actix_multipart::Multipart;
15/// use futures_util::StreamExt as _;
16///
17/// async fn index(mut payload: Multipart) -> actix_web::Result<HttpResponse> {
18///     // iterate over multipart stream
19///     while let Some(item) = payload.next().await {
20///            let mut field = item?;
21///
22///            // Field in turn is stream of *Bytes* object
23///            while let Some(chunk) = field.next().await {
24///                println!("-- CHUNK: \n{:?}", std::str::from_utf8(&chunk?));
25///            }
26///     }
27///
28///     Ok(HttpResponse::Ok().finish())
29/// }
30/// ```
31impl FromRequest for Multipart {
32    type Error = Error;
33    type Future = Ready<Result<Multipart, Error>>;
34
35    #[inline]
36    fn from_request(req: &HttpRequest, payload: &mut Payload) -> Self::Future {
37        ready(Ok(Multipart::from_req(req, payload)))
38    }
39}