A dependency free library to infer file and MIME type by checking the magic number signature.
An elixir adaption of the infer rust library.
The package can be installed
by adding infer to your list of dependencies in mix.exs:
def deps do
[
{:infer, "~> 0.2.6"}
]
endThe docs can be found at https://hexdocs.pm/infer.
Takes the binary file contents as argument and returns the Infer.Type.t() if the file matches one of the supported types. Returns nil otherwise.
iex> binary = File.read!("test/images/sample.png")
iex> Infer.get(binary)
%Infer.Type{extension: "png", matcher: &Infer.Image.png?/1, matcher_type: :image, mime_type: "image/png"}Similar to Infer.get/1, but takes the file path as argument.
iex> Infer.get_from_path("test/images/sample.png")
%Infer.Type{extension: "png", matcher: &Infer.Image.png?/1, matcher_type: :image, mime_type: "image/png"}Takes the binary content and the file extension as arguments. Returns whether the file content is of the given extension.
iex> binary = File.read!("test/images/sample.png")
iex> Infer.is?(binary, "png")
trueTakes the binary content and the file extension as arguments. Returns whether the file content is of the given mime type.
iex> binary = File.read!("test/images/sample.png")
iex> Infer.mime?(binary, "image/png")
trueTakes the binary file contents as argument and returns whether the file is an image or not.
iex> binary = File.read!("test/images/sample.png")
iex> Infer.image?(binary)
trueTakes the binary file contents as argument and returns whether the file is a document (microsoft office, open office)
iex> binary = File.read!("test/docs/sample.xlsx")
iex> Infer.document?(binary)
trueTakes the binary file contents as arguments. Returns true if it's Microsoft Word Open XML Format Document (DOCX) data.
iex> binary = File.read!("test/docs/sample.docx")
iex> Infer.Doc.docx?(binary)
true| MIME | Extension |
|---|---|
| image/jpeg | jpg |
| image/jp2 | jp2 |
| image/png | png |
| image/gif | image/web |
| image/x-canon-c32 | cr2 |
| image/tiff | tif |
| image/bmp | bmp |
| image/vnd.ms-photo | jxr |
| image/vnd.adobe.photoshop | psd |
| image/vnd.microsoft.icon | ico |
| image/heif | heif |
| image/avif | avif |
| MIME | Extension |
|---|---|
| video/mp4 | mp4 |
| video/x-m4v | m4v |
| video/x-matroska | mkv |
| video/webm | webm |
| video/quicktime | mov |
| video/x-msvideo | avi |
| video/x-ms-wmv | wmv |
| video/mpeg | mpg |
| video/x-flv | flv |
| MIME | Extension |
|---|---|
| audio/midi | midi |
| audio/mpeg | mp3 |
| audio/m4a | m4a |
| audio/ogg | ogg |
| audio/x-flac | flac |
| audio/x-wav | wav |
| audio/amr | amr |
| audio/aac | aac |
| audio/x-aiff | aiff |
| MIME | Extension |
|---|---|
| application/msword | doc |
| application/vnd.openxmlformats-officedocument.wordprocessingml.document | docx |
| application/vnd.ms-excel | xls |
| application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | xlsx |
| application/vnd.ms-powerpoint | ppt |
| application/vnd.openxmlformats-officedocument.presentationml.presentation | pptx |
| application/vnd.oasis.opendocument.text | odt |
| application/vnd.oasis.opendocument.spreadsheet | ods |
| application/vnd.oasis.opendocument.presentation | odp |
| MIME | Extension |
|---|---|
| application/epub+zip | epub |
| application/zip | zip |
| application/x-tar | tar |
| application/vnd.rar | rar |
| application/gzip | gz |
| application/x-bzip2 | bz2 |
| application/x-7z-compressed | 7z |
| application/x-xz | xz |
| application/is_pdf | |
| application/x-shockwave-flash | swf |
| application/rtf | rtf |
| application/octet-stream | eot |
| application/postscript | ps |
| application/vnd.sqlite3 | sqlite |
| application/x-nintendo-nes-rom | nex |
| application/x-unix-archive | ar |
| application/x-compressed | Z |
| application/x-lzip | lz |
| application/x-rpm | rpm |
| application/dicom | dcm |
| application/zstd | zst |
| application/x-ole-storage | msi |
| application/x-google-chrome-extension | crx |
| application/vnd.ms-cab-compressed | cab |
| application/vnd.debian.binary-package | deb |
| MIME | Extension |
|---|---|
| application/font-woff | woff |
| application/font-woff2 | woff2 |
| application/font-sfnt | ttf |
| application/font-sfnt | otf |
| MIME | Extension |
|---|---|
| application/epub+zip | epub |
| application/x-mobipocket-ebook | mobi |
| MIME | Extension |
|---|---|
| application/wasm | wasm |
| application/x-executable | elf |
| application/vnd.microsoft.portable-executable | exe |
| application/vnd.microsoft.portable-executable | dll |
| application/java | class |
| application/x-llvm | bc |
| application/x-mach-binary | mach |
| application/vnd.android.dex | dex |
| application/vnd.android.det | dey |
| application/x-x509-ca-cert | der |
| application/x-executable | obj |
This project and is licensed under the MIT License - see the LICENSE file for details.
Copyright (c) 2021 Daniel Khaapamyaki