4 releases

0.1.3 Dec 1, 2024
0.1.2 Jan 12, 2018
0.1.1 Jan 6, 2017
0.1.0 Jan 4, 2017

#450 in Web programming

Download history 1635/week @ 2024-08-28 1633/week @ 2024-09-04 2292/week @ 2024-09-11 1697/week @ 2024-09-18 1774/week @ 2024-09-25 1105/week @ 2024-10-02 938/week @ 2024-10-09 1692/week @ 2024-10-16 1964/week @ 2024-10-23 1644/week @ 2024-10-30 1360/week @ 2024-11-06 1340/week @ 2024-11-13 1931/week @ 2024-11-20 2444/week @ 2024-11-27 2218/week @ 2024-12-04 2747/week @ 2024-12-11

9,666 downloads per month
Used in 7 crates (6 directly)

Apache-2.0

41KB
640 lines

mime-sniffer ci crate

Detecting mime types base on content sniffer.

Document

The detection workflow was copied from Chromium

For more detail, please read How Mozilla determines MIME Types.

Usage

To use mime-sniffer, first add this to your Cargo.toml:

[dependencies]
mime-sniffer = "^0.1"

Then, add this to your crate root:

extern crate mime_sniffer;

use mime_sniffer::MimeTypeSniffer;

And then, use hash function with module or hasher

use mime_sniffer::MimeTypeSniffer;

assert_eq!(Some("application/pdf"), b"%PDF-1.5".sniff_mime_type());

Examples

extern crate url;
#[macro_use]
extern crate mime;
extern crate mime_sniffer;

use url::Url;

use mime_sniffer::{HttpRequest, MimeTypeSniffer, MimeTypeSniffable, MimeTypeSnifferExt};

let url = Url::parse("http://localhost/notes.ppt").unwrap();
let req = HttpRequest {
    content: b"\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1",
    url: &url,
    type_hint: "text/plain",
};

assert!(req.should_sniff_mime_type());
assert_eq!(req.sniff_mime_type(), Some("application/vnd.ms-powerpoint"));
assert_eq!(req.sniff_mime_type_ext().unwrap().type_(), mime::APPLICATION);
  • To recognize binary file type, you may need libmagic with rust binding rust-magic crate. crate
  • To guess MIME type by file extension, you may need mime_guess crate. crate
  • To manage MIME type as strong types, you may need mime.rs crate. crate

Dependencies

~2–3MB
~55K SLoC