pub struct ContentDisposition {
    pub disposition: DispositionType,
    pub parameters: Vec<DispositionParam, Global>,
}
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, Global>

Disposition parameters

Implementations

Parse a raw Content-Disposition header value.

Returns true if type is Inline.

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 name if exists.

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 a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Formats the value using the given formatter. Read more

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 !=.

The type returned in the event of a conversion error.

Try to convert value to a HeaderValue.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Converts self into T using Into<T>. Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Causes self to use its Binary implementation when Debug-formatted.

Causes self to use its Display implementation when Debug-formatted. Read more

Causes self to use its LowerExp implementation when Debug-formatted. Read more

Causes self to use its LowerHex implementation when Debug-formatted. Read more

Causes self to use its Octal implementation when Debug-formatted.

Causes self to use its Pointer implementation when Debug-formatted. Read more

Causes self to use its UpperExp implementation when Debug-formatted. Read more

Causes self to use its UpperHex implementation when Debug-formatted. Read more

Returns the argument unchanged.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Performs the indexed conversion.

Pipes by value. This is generally the method you want to use. Read more

Borrows self and passes that borrow into the pipe function. Read more

Mutably borrows self and passes that borrow into the pipe function. Read more

Borrows self, then passes self.borrow() into the pipe function. Read more

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more

Borrows self, then passes self.as_ref() into the pipe function.

Mutably borrows self, then passes self.as_mut() into the pipe function. Read more

Borrows self, then passes self.deref() into the pipe function.

Mutably borrows self, then passes self.deref_mut() into the pipe function. Read more

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

Consumes the current HList and returns an HList with the requested shape. Read more

Immutable access to a value. Read more

Mutable access to a value. Read more

Immutable access to the Borrow<B> of a value. Read more

Mutable access to the BorrowMut<B> of a value. Read more

Immutable access to the AsRef<R> view of a value. Read more

Mutable access to the AsMut<R> view of a value. Read more

Immutable access to the Deref::Target of a value. Read more

Mutable access to the Deref::Target of a value. Read more

Calls .tap() only in debug builds, and is erased in release builds.

Calls .tap_mut() only in debug builds, and is erased in release builds. Read more

Calls .tap_borrow() only in debug builds, and is erased in release builds. Read more

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds. Read more

Calls .tap_ref() only in debug builds, and is erased in release builds. Read more

Calls .tap_ref_mut() only in debug builds, and is erased in release builds. Read more

Calls .tap_deref() only in debug builds, and is erased in release builds. Read more

Calls .tap_deref_mut() only in debug builds, and is erased in release builds. Read more

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

Uses borrowed data to replace owned data, usually by cloning. Read more

Converts the given value to a String. Read more

Attempts to convert self into T using TryInto<T>. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

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