Skip to content

Detect the file type of a Buffer/Uint8Array

License

Notifications You must be signed in to change notification settings

yagop/file-type

 
 

Repository files navigation

file-type Build Status

Detect the file type of a Buffer/Uint8Array

The file type is detected by checking the magic number of the buffer.

Install

$ npm install --save file-type

Usage

Node.js
const readChunk = require('read-chunk'); // npm install read-chunk
const fileType = require('file-type');
const buffer = readChunk.sync('unicorn.png', 0, 262);

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'}
	});
});
Browser
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();

API

fileType(buffer)

Returns an object (or null when no match) with:

buffer

Type: buffer (Node.js), uint8array

It only needs the first 262 bytes.

Supported file types

  • jpg
  • png
  • gif
  • webp
  • cr2
  • tif
  • bmp
  • jxr
  • psd
  • zip
  • tar
  • rar
  • gz
  • bz2
  • 7z
  • dmg
  • mp4
  • m4v
  • mid
  • mkv
  • webm
  • mov
  • avi
  • wmv
  • mpg
  • mp3
  • m4a
  • ogg
  • flac
  • wav
  • amr
  • pdf
  • epub
  • exe
  • swf
  • rtf
  • woff
  • woff2
  • eot
  • ttf
  • otf
  • ico
  • flv
  • ps
  • xz
  • sqlite
  • nes
  • crx
  • xpi
  • cab
  • deb
  • ar
  • Z
  • lz

SVG isn't included as it requires the whole file to be read, but you can get it here.

PR welcome for additional commonly used file types.

Related

License

MIT © Sindre Sorhus

About

Detect the file type of a Buffer/Uint8Array

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 96.8%
  • PostScript 3.2%