multer_derive/
form_file.rs1use crate::{
2 error::Error, from_multipart_field::FromMultipartField, multipart_form::MultipartField,
3};
4use http::HeaderMap;
5use mime::Mime;
6use multer::bytes::Bytes;
7
8#[derive(Debug, Clone)]
10pub struct FormFile {
11 bytes: Bytes,
12 headers: HeaderMap,
13 content_type: Mime,
14 name: String,
15 file_name: String,
16}
17
18impl FormFile {
19 pub fn bytes(&self) -> &Bytes {
21 &self.bytes
22 }
23
24 pub fn name(&self) -> &str {
26 &self.name
27 }
28
29 pub fn file_name(&self) -> &str {
31 &self.file_name
32 }
33
34 pub fn headers(&self) -> &HeaderMap {
36 &self.headers
37 }
38
39 pub fn content_type(&self) -> &Mime {
41 &self.content_type
42 }
43}
44
45impl FromMultipartField for FormFile {
46 fn from_field(field: &MultipartField) -> Result<Self, Error> {
47 let name = field
48 .name()
49 .ok_or_else(|| Error::new("field does not have a name"))?
50 .to_owned();
51
52 let file_name = field
53 .file_name()
54 .ok_or_else(|| Error::new("file does not have a name"))?
55 .to_owned();
56
57 let headers = field.headers().clone();
58 let bytes = field.bytes().clone();
59 let content_type = field
60 .content_type()
61 .cloned()
62 .unwrap_or(mime::APPLICATION_OCTET_STREAM);
63
64 Ok(FormFile {
65 bytes,
66 headers,
67 name,
68 file_name,
69 content_type,
70 })
71 }
72}