pub struct ContentDisposition {
pub disposition: DispositionType,
pub parameters: Vec<DispositionParam>,
}
Expand description
A Content-Disposition header. It is compatible to be used either as a response header for the main body as (re)defined in RFC 6266, or as a header for a multipart body as (re)defined in RFC 7587.
In a regular HTTP response, the Content-Disposition response header is a header indicating if the content is expected to be displayed inline in the browser, that is, as a Web page or as part of a Web page, or as an attachment, that is downloaded and saved locally, and also can be used to attach additional metadata, such as the filename to use when saving the response payload locally.
In a multipart/form-data body, the HTTP Content-Disposition general header is a header that can be used on the subpart of a multipart body to give information about the field it applies to. The subpart is delimited by the boundary defined in the Content-Type header. Used on the body itself, Content-Disposition has no effect.
ABNF
content-disposition = "Content-Disposition" ":"
disposition-type *( ";" disposition-parm )
disposition-type = "inline" | "attachment" | disp-ext-type
; case-insensitive
disp-ext-type = token
disposition-parm = filename-parm | disp-ext-parm
filename-parm = "filename" "=" value
| "filename*" "=" ext-value
disp-ext-parm = token "=" value
| ext-token "=" ext-value
ext-token = <the characters in token, followed by "*">
Note
filename is not supposed to contain any non-ASCII characters when used in a Content-Disposition HTTP response header, where filename* with charset UTF-8 may be used instead in case there are Unicode characters in file names. Filename is acceptable to be UTF-8 encoded directly in a Content-Disposition header for multipart/form-data, though.
filename must not be used within multipart/form-data.
Examples
use actix_web::http::header::{
Charset, ContentDisposition, DispositionParam, DispositionType,
ExtendedValue,
};
let cd1 = ContentDisposition {
disposition: DispositionType::Attachment,
parameters: vec![DispositionParam::FilenameExt(ExtendedValue {
charset: Charset::Iso_8859_1, // The character set for the bytes of the filename
language_tag: None, // The optional language tag (see `language-tag` crate)
value: b"\xa9 Copyright 1989.txt".to_vec(), // the actual bytes of the filename
})],
};
assert!(cd1.is_attachment());
assert!(cd1.get_filename_ext().is_some());
let cd2 = ContentDisposition {
disposition: DispositionType::FormData,
parameters: vec![
DispositionParam::Name(String::from("file")),
DispositionParam::Filename(String::from("bill.odt")),
],
};
assert_eq!(cd2.get_name(), Some("file")); // field name
assert_eq!(cd2.get_filename(), Some("bill.odt"));
// HTTP response header with Unicode characters in file names
let cd3 = ContentDisposition {
disposition: DispositionType::Attachment,
parameters: vec![
DispositionParam::FilenameExt(ExtendedValue {
charset: Charset::Ext(String::from("UTF-8")),
language_tag: None,
value: String::from("\u{1f600}.svg").into_bytes(),
}),
// fallback for better compatibility
DispositionParam::Filename(String::from("Grinning-Face-Emoji.svg"))
],
};
assert_eq!(cd3.get_filename_ext().map(|ev| ev.value.as_ref()),
Some("\u{1f600}.svg".as_bytes()));
Security Note
If “filename” parameter is supplied, do not use the file name blindly, check and possibly change to match local file system conventions if applicable, and do not use directory path information that may be present. See RFC 2183 §2.3.
Fields
disposition: DispositionType
The disposition type
parameters: Vec<DispositionParam>
Disposition parameters
Implementations
Parse a raw Content-Disposition header value.
Returns true
if type is Attachment
.
Returns true
if type is FormData
.
Returns true
if type is Ext
and the disp_type
matches.
Return the value of filename if exists.
Return the value of filename* if exists.
Return the value of the parameter which the name
matches.
Return the value of the extended parameter which the name
matches.
Trait Implementations
Returns the name of the header field.
Parse the header from a HTTP message.
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
type Error = InvalidHeaderValue
type Error = InvalidHeaderValue
The type returned in the event of a conversion error.
Try to convert value to a HeaderValue.
Auto Trait Implementations
impl RefUnwindSafe for ContentDisposition
impl Send for ContentDisposition
impl Sync for ContentDisposition
impl Unpin for ContentDisposition
impl UnwindSafe for ContentDisposition
Blanket Implementations
Mutably borrows from an owned value. Read more
type Error = <T as TryIntoHeaderValue>::Error
pub fn try_into_pair(
self
) -> Result<(HeaderName, HeaderValue), <T as TryIntoHeaderPair>::Error>
pub fn vzip(self) -> V
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more