# actix_web::http::header::ContentDisposition - Rust
API documentation for the Rust `ContentDisposition` struct in crate `actix_web`.
Keywords: rust, rustlang, rust-lang, ContentDisposition

# [−] [src] Struct actix_web::http::header::ContentDisposition

    pub struct ContentDisposition {
        pub disposition: DispositionType,
        pub parameters: Vec<DispositionParam>,
    }

A Content-Disposition header. It is compatible to be used either as a response header for the main body as (re)defined in RFC6266, or as a header for a multipart body as (re)defined in RFC7587.

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* must not be used within multipart/form-data.

# Example

    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"));

# WARN

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 RFC2183 .

## Fields

`disposition: DispositionType`

The disposition type

`parameters: Vec<DispositionParam>`

Disposition parameters

## Methods

###

`impl ContentDisposition`

[src]

####

`pub fn from_raw(hv: &HeaderValue) -> Result<Self, ParseError>`

[src]

Parse a raw Content-Disposition header value.

####

`pub fn is_inline(&self) -> bool`

[src]

Returns `true` if it is `Inline`.

####

`pub fn is_attachment(&self) -> bool`

[src]

Returns `true` if it is `Attachment`.

####

`pub fn is_form_data(&self) -> bool`

[src]

Returns `true` if it is `FormData`.

####

`pub fn is_ext<T: AsRef<str>>(&self, disp_type: T) -> bool`

[src]

Returns `true` if it is `Ext` and the `disp_type` matches.

####

`pub fn get_name(&self) -> Option<&str>`

[src]

Return the value of name if exists.

####

`pub fn get_filename(&self) -> Option<&str>`

[src]

Return the value of filename if exists.

####

`pub fn get_filename_ext(&self) -> Option<&ExtendedValue>`

[src]

Return the value of filename* if exists.

####

`pub fn get_unknown<T: AsRef<str>>(&self, name: T) -> Option<&str>`

[src]

Return the value of the parameter which the `name` matches.

####

`pub fn get_unknown_ext<T: AsRef<str>>(&self, name: T) -> Option<&ExtendedValue>`

[src]

Return the value of the extended parameter which the `name` matches.

## Trait Implementations

###

`impl PartialEq<ContentDisposition> for ContentDisposition`

[src]

####

`fn eq(&self, other: &ContentDisposition) -> bool`

[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

####

`fn ne(&self, other: &ContentDisposition) -> bool`

[src]

This method tests for `!=`.

###

`impl Clone for ContentDisposition`

[src]

####

`fn clone(&self) -> ContentDisposition`

[src]

Returns a copy of the value. Read more

####

`fn clone_from(&mut self, source: &Self)`

1.0.0
[src]

Performs copy-assignment from `source`. Read more

###

`impl Display for ContentDisposition`

[src]

####

`fn fmt(&self, f: &mut Formatter) -> Result`

[src]

Formats the value using the given formatter. Read more

###

`impl Debug for ContentDisposition`

[src]

####

`fn fmt(&self, f: &mut Formatter) -> Result`

[src]

Formats the value using the given formatter. Read more

## Auto Trait Implementations

###

`impl Send for ContentDisposition`

###

`impl Sync for ContentDisposition`

## Blanket Implementations

###

`impl<T> ToOwned for T where T: Clone,`

[src]

#### `type Owned = T`

####

`fn to_owned(&self) -> T`

[src]

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

####

`fn clone_into(&self, target: &mut T)`

[src]

🔬 This is a nightly-only experimental API. (`toowned_clone_into`)

recently added

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

###

`impl<T> ToString for T where T: Display + ?Sized,`

[src]

####

`fn to_string(&self) -> String`

[src]

Converts the given value to a `String`. Read more

###

`impl<T> From for T`

[src]

####

`fn from(t: T) -> T`

[src]

Performs the conversion.

###

`impl<T, U> Into for T where U: From<T>,`

[src]

####

`fn into(self) -> U`

[src]

Performs the conversion.

###

`impl<T, U> TryFrom for T where T: From<U>,`

[src]

#### `type Error = !`

🔬 This is a nightly-only experimental API. (`try_from`)

The type returned in the event of a conversion error.

####

`fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>`

[src]

🔬 This is a nightly-only experimental API. (`try_from`)

Performs the conversion.

###

`impl<T> Borrow for T where T: ?Sized,`

[src]

####

`fn borrow(&self) -> &T`

[src]

Immutably borrows from an owned value. Read more

###

`impl<T> BorrowMut for T where T: ?Sized,`

[src]

####

`fn borrow_mut(&mut self) -> &mut T`

[src]

Mutably borrows from an owned value. Read more

###

`impl<T, U> TryInto for T where U: TryFrom<T>,`

[src]

#### `type Error = <U as TryFrom<T>>::Error`

🔬 This is a nightly-only experimental API. (`try_from`)

The type returned in the event of a conversion error.

####

`fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>`

[src]

🔬 This is a nightly-only experimental API. (`try_from`)

Performs the conversion.

###

`impl<T> Any for T where T: 'static + ?Sized,`

[src]

####

`fn get_type_id(&self) -> TypeId`

[src]

🔬 This is a nightly-only experimental API. (`get_type_id`)

this method will likely be replaced by an associated static

Gets the `TypeId` of `self`. Read more

###

`impl<T> Erased for T`

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g. `str,u8` or `String,struct:Vec,test`)