Detect the file type of a Buffer/Uint8Array
The file type is detected by checking the [magic number](http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files) of the buffer.
$ npm install file-type
const readChunk = require('read-chunk');
const fileType = require('file-type');
const buffer = readChunk.sync('unicorn.png', 0, 4100);
fileType(buffer);
//=> {ext: 'png', mime: 'image/png'}
Or from a remote location:
const http = require('http');
const fileType = require('file-type');
const url = 'http://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif';
http.get(url, res => {
res.once('data', chunk => {
res.destroy();
console.log(fileType(chunk));
//=> {ext: 'gif', mime: 'image/gif'}
});
});
const xhr = new XMLHttpRequest();
xhr.open('GET', 'unicorn.png');
xhr.responseType = 'arraybuffer';
xhr.onload = () => {
fileType(new Uint8Array(this.response));
//=> {ext: 'png', mime: 'image/png'}
};
xhr.send();
Returns an Object
with:
ext
- One of the supported file typesmime
- The MIME typeOr null
when no match.
Type: Buffer
Uint8Array
It only needs the first 4100 bytes. The exception is detection of docx
, pptx
, and xlsx
which potentially requires reading the whole file.
jpg
png
gif
webp
flif
cr2
tif
bmp
jxr
psd
zip
](https://en.wikipedia.org/wiki/Zip_(file_format))tar
](https://en.wikipedia.org/wiki/Tar_(computing)#File_format)rar
](https://en.wikipedia.org/wiki/RAR_(file_format))gz
bz2
7z
dmg
mp4
m4v
mid
mkv
webm
mov
avi
wmv
mpg
mp2
mp3
m4a
ogg
opus
](https://en.wikipedia.org/wiki/Opus_(audio_format))flac
wav
qcp
amr
pdf
epub
mobi
- Mobipocketexe
swf
rtf
woff
woff2
eot
ttf
otf
ico
](https://en.wikipedia.org/wiki/ICO_(file_format))flv
ps
xz
sqlite
nes
crx
xpi
cab
](https://en.wikipedia.org/wiki/Cabinet_(file_format))deb
](https://en.wikipedia.org/wiki/Deb_(file_format))ar
](https://en.wikipedia.org/wiki/Ar_(Unix))rpm
Z
lz
msi
mxf
mts
wasm
blend
bpg
docx
pptx
xlsx
3gp
jp2
- JPEG 2000jpm
- JPEG 2000jpx
- JPEG 2000mj2
- Motion JPEG 2000aif
odt
- OpenDocument for word processingods
- OpenDocument for spreadsheetsodp
- OpenDocument for presentationsxml
heic
cur
](https://en.wikipedia.org/wiki/ICO_(file_format))ktx
ape
- Monkey's Audiowv
- WavPackSVG isn't included as it requires the whole file to be read, but you can get it here.
Pull request welcome for additional commonly used file types.
MIT