|
|
5 years ago | |
|---|---|---|
| .. | ||
| index.d.ts | 5 years ago | |
| index.js | 5 years ago | |
| license | 5 years ago | |
| package.json | 5 years ago | |
| readme.md | 5 years ago | |
Detect the file type of a Buffer/Uint8Array/ArrayBuffer
The file type is detected by checking the magic number of the buffer.
$ npm install file-type
const readChunk = require('read-chunk');
const fileType = require('file-type');
const buffer = readChunk.sync('unicorn.png', 0, fileType.minimumBytes);
fileType(buffer);
//=> {ext: 'png', mime: 'image/png'}
Or from a remote location:
const http = require('http');
const fileType = require('file-type');
const url = 'https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif';
http.get(url, response => {
response.on('readable', () => {
const chunk = response.read(fileType.minimumBytes);
response.destroy();
console.log(fileType(chunk));
//=> {ext: 'gif', mime: 'image/gif'}
});
});
Or from a stream:
const fs = require('fs');
const crypto = require('crypto');
const fileType = require('file-type');
(async () => {
const read = fs.createReadStream('encrypted.enc');
const decipher = crypto.createDecipheriv(alg, key, iv);
const stream = await fileType.stream(read.pipe(decipher));
console.log(stream.fileType);
//=> {ext: 'mov', mime: 'video/quicktime'}
const write = fs.createWriteStream(`decrypted.${stream.fileType.ext}`);
stream.pipe(write);
})();
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 there is no match.
Type: Buffer | Uint8Array | ArrayBuffer
It only needs the first .minimumBytes bytes. The exception is detection of docx, pptx, and xlsx which potentially requires reading the whole file.
Type: number
The minimum amount of bytes needed to detect a file type. Currently, it's 4100 bytes, but it can change, so don't hardcode it.
Detect the file type of a readable stream.
Returns a Promise which resolves to the original readable stream argument, but with an added fileType property, which is an object like the one returned from fileType().
Note: This method is only for Node.js.
Type: stream.Readable
jpgpnggifwebpflifcr2tifbmpjxrpsdziptarrargzbz27zdmgmp4m4vmidmkvwebmmovaviwmvmpgmp2mp3m4aoggopusflacwavqcpamrpdfepubmobi - Mobipocketexeswfrtfwoffwoff2eotttfotficoflvpsxzsqlitenescrxxpicabdebarrpmZlzmsimxfmtswasmblendbpgdocxpptxxlsx3gpjp2 - JPEG 2000jpm - JPEG 2000jpx - JPEG 2000mj2 - Motion JPEG 2000aifodt - OpenDocument for word processingods - OpenDocument for spreadsheetsodp - OpenDocument for presentationsxmlheiccurktxape - Monkey's Audiowv - WavPackasf - Advanced Systems Formatwma - Windows Media Audiowmv - Windows Media Videodcm - DICOM Image Filempc - Musepack (SV7 & SV8)ics - iCalendarglb - GL Transmission Formatpcap - Libpcap File FormatSVG 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