View Source Infer
A dependency free library to infer file and MIME type by checking the magic number signature.
An elixir adaption of the infer
rust library.
installation
Installation
The package can be installed
by adding infer
to your list of dependencies in mix.exs
:
def deps do
[
{:infer, "~> 0.2.6"}
]
end
The docs can be found at https://hexdocs.pm/infer.
examples
Examples
infer-get-1
Infer.get/1
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"}
infer-get_from_path-1
Infer.get_from_path/1
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"}
infer-is-2
Infer.is?/2
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")
true
infer-mime-2
Infer.mime?/2
Takes 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")
true
infer-image-1
Infer.image?/1
Takes 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)
true
infer-document-1
Infer.document?/1
Takes 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)
true
infer-doc-docx-1
Infer.Doc.docx?/1
Takes 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
supported-types
Supported Types
image
Image
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 |
video
Video
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 |
audio
Audio
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 |
document
Document
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 |
archive
Archive
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 |
font
Font
MIME | Extension |
---|---|
application/font-woff | woff |
application/font-woff2 | woff2 |
application/font-sfnt | ttf |
application/font-sfnt | otf |
book
Book
MIME | Extension |
---|---|
application/epub+zip | epub |
application/x-mobipocket-ebook | mobi |
application
Application
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 |
license
License
This project and is licensed under the MIT License - see the LICENSE file for details.
Copyright (c) 2021 Daniel Khaapamyaki