3 releases

Uses old Rust 2015

0.1.2 Jan 12, 2018
0.1.1 Jan 6, 2017
0.1.0 Jan 4, 2017

#4 in #detecting

Download history 1210/week @ 2023-12-12 1067/week @ 2023-12-19 702/week @ 2023-12-26 1178/week @ 2024-01-02 1006/week @ 2024-01-09 1031/week @ 2024-01-16 1037/week @ 2024-01-23 885/week @ 2024-01-30 926/week @ 2024-02-06 1114/week @ 2024-02-13 927/week @ 2024-02-20 1283/week @ 2024-02-27 1186/week @ 2024-03-05 1163/week @ 2024-03-12 1629/week @ 2024-03-19 1504/week @ 2024-03-26

5,868 downloads per month
Used in 5 crates

Apache-2.0

42KB
643 lines

mime-sniffer travis build 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!(Some("application/vnd.ms-powerpoint"), req.sniff_mime_type());
assert_eq!(mime!(Application/("vnd.ms-powerpoint")),
           req.sniff_mime_type_ext().unwrap());
  • 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

~2MB
~64K SLoC