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}