Created
September 14, 2021 19:14
-
-
Save ilkou/18392ebd8bfcad44aa98d1bf6cdec405 to your computer and use it in GitHub Desktop.
Validation of files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export const isValidFile = async (file: File) => { | |
const contentBuffer = await readFileAsync(file); | |
if (!(window.FileReader && window.Blob)) { | |
console.error('FileReader && Blob are not supported'); | |
} | |
let header = ''; | |
const arr = new Uint8Array(contentBuffer).subarray(0, 4); | |
for (let i = 0; i < arr.length; i += 1) { | |
header += arr[i].toString(16); | |
} | |
return MIMES.find(({ signs }) => | |
signs.find( | |
(sign) => sign.substring(0, 8).toUpperCase() === header.toUpperCase(), | |
), | |
); | |
}; | |
export const readFileAsync = (file: File) => | |
new Promise((resolve, reject) => { | |
const reader = new FileReader(); | |
reader.onloadend = () => { | |
resolve(reader.result); | |
}; | |
reader.onerror = reject; | |
reader.readAsArrayBuffer(file); | |
}); | |
export const MIMES = [ | |
{ | |
ext: '123', | |
signs: ['00001A00051004'], | |
mime: 'application/vnd.lotus-1-2-3', | |
}, | |
{ | |
ext: 'cpl', | |
signs: ['4D5A', 'DCDC'], | |
mime: 'application/cpl+xml', | |
}, | |
{ | |
ext: 'epub', | |
signs: ['504B03040A000200'], | |
mime: 'application/epub+zip', | |
}, | |
{ | |
ext: 'ttf', | |
signs: ['0001000000'], | |
mime: 'application/font-sfnt', | |
}, | |
{ | |
ext: 'gz', | |
signs: ['1F8B08'], | |
mime: 'application/gzip', | |
}, | |
{ | |
ext: 'tgz', | |
signs: ['1F8B08'], | |
mime: 'application/gzip', | |
}, | |
{ | |
ext: 'hqx', | |
signs: [ | |
'28546869732066696C65206D75737420626520636F6E76657274656420776974682042696E48657820', | |
], | |
mime: 'application/mac-binhex40', | |
}, | |
{ | |
ext: 'doc', | |
signs: [ | |
'0D444F43', | |
'CF11E0A1B11AE100', | |
'D0CF11E0A1B11AE1', | |
'DBA52D00', | |
'2,ECA5C100', | |
], | |
mime: 'application/msword', | |
}, | |
{ | |
ext: 'mxf', | |
signs: ['060E2B34020501010D0102010102', '3C435472616E7354696D656C696E653E'], | |
mime: 'application/mxf', | |
}, | |
{ | |
ext: 'lha', | |
signs: ['2D6C68'], | |
mime: 'application/octet-stream', | |
}, | |
{ | |
ext: 'lzh', | |
signs: ['2D6C68'], | |
mime: 'application/octet-stream', | |
}, | |
{ | |
ext: 'exe', | |
signs: ['4D5A'], | |
mime: 'application/octet-stream', | |
}, | |
{ | |
ext: 'class', | |
signs: ['CAFEBABE'], | |
mime: 'application/octet-stream', | |
}, | |
{ | |
ext: 'dll', | |
signs: ['4D5A'], | |
mime: 'application/octet-stream', | |
}, | |
{ | |
ext: 'img', | |
signs: [ | |
'000100005374616E64617264204A6574204442', | |
'504943540008', | |
'514649FB', | |
'53434D49', | |
'7E742C015070024D52010000000800000001000031000000310000004301FF0001000800010000007e742c01', | |
'EB3C902A', | |
], | |
mime: 'application/octet-stream', | |
}, | |
{ | |
ext: 'iso', | |
signs: ['769,4344303031', '817,4344303031', '865,4344303031'], | |
mime: 'application/octet-stream', | |
}, | |
{ | |
ext: 'ogx', | |
signs: ['4F67675300020000000000000000'], | |
mime: 'application/ogg', | |
}, | |
{ | |
ext: 'oxps', | |
signs: ['504B0304'], | |
mime: 'application/oxps', | |
}, | |
{ | |
ext: 'pdf', | |
signs: ['25504446'], | |
mime: 'application/pdf', | |
}, | |
{ | |
ext: 'p10', | |
signs: ['64000000'], | |
mime: 'application/pkcs10', | |
}, | |
{ | |
ext: 'pls', | |
signs: ['5B706C61796C6973745D'], | |
mime: 'application/pls+xml', | |
}, | |
{ | |
ext: 'eps', | |
signs: ['252150532D41646F62652D332E3020455053462D332030', 'C5D0D3C6'], | |
mime: 'application/postscript', | |
}, | |
{ | |
ext: 'ai', | |
signs: ['25504446'], | |
mime: 'application/postscript', | |
}, | |
{ | |
ext: 'rtf', | |
signs: ['7B5C72746631'], | |
mime: 'application/rtf', | |
}, | |
{ | |
ext: 'tsa', | |
signs: ['47'], | |
mime: 'application/tamp-sequence-adjust', | |
}, | |
{ | |
ext: 'msf', | |
signs: ['2F2F203C212D2D203C6D64623A6D6F726B3A7A'], | |
mime: 'application/vnd.epson.msf', | |
}, | |
{ | |
ext: 'fdf', | |
signs: ['25504446'], | |
mime: 'application/vnd.fdf', | |
}, | |
{ | |
ext: 'fm', | |
signs: ['3C4D616B657246696C6520'], | |
mime: 'application/vnd.framemaker', | |
}, | |
{ | |
ext: 'kmz', | |
signs: ['504B0304'], | |
mime: 'application/vnd.google-earth.kmz', | |
}, | |
{ | |
ext: 'tpl', | |
signs: ['0020AF30', '6D7346696C7465724C697374'], | |
mime: 'application/vnd.groove-tool-template', | |
}, | |
{ | |
ext: 'kwd', | |
signs: ['504B0304'], | |
mime: 'application/vnd.kde.kword', | |
}, | |
{ | |
ext: 'wk4', | |
signs: ['00001A000210040000000000'], | |
mime: 'application/vnd.lotus-1-2-3', | |
}, | |
{ | |
ext: 'wk3', | |
signs: ['00001A000010040000000000'], | |
mime: 'application/vnd.lotus-1-2-3', | |
}, | |
{ | |
ext: 'wk1', | |
signs: ['0000020006040600080000000000'], | |
mime: 'application/vnd.lotus-1-2-3', | |
}, | |
{ | |
ext: 'apr', | |
signs: ['D0CF11E0A1B11AE1'], | |
mime: 'application/vnd.lotus-approach', | |
}, | |
{ | |
ext: 'nsf', | |
signs: ['1A0000040000', '4E45534D1A01'], | |
mime: 'application/vnd.lotus-notes', | |
}, | |
{ | |
ext: 'ntf', | |
signs: [ | |
'1A0000', | |
'30314F52444E414E43452053555256455920202020202020', | |
'4E49544630', | |
], | |
mime: 'application/vnd.lotus-notes', | |
}, | |
{ | |
ext: 'org', | |
signs: ['414F4C564D313030'], | |
mime: 'application/vnd.lotus-organizer', | |
}, | |
{ | |
ext: 'lwp', | |
signs: ['576F726450726F'], | |
mime: 'application/vnd.lotus-wordpro', | |
}, | |
{ | |
ext: 'sam', | |
signs: ['5B50686F6E655D'], | |
mime: 'application/vnd.lotus-wordpro', | |
}, | |
{ | |
ext: 'mif', | |
signs: ['3C4D616B657246696C6520', '56657273696F6E20'], | |
mime: 'application/vnd.mif', | |
}, | |
{ | |
ext: 'xul', | |
signs: ['3C3F786D6C2076657273696F6E3D22312E30223F3E'], | |
mime: 'application/vnd.mozilla.xul+xml', | |
}, | |
{ | |
ext: 'asf', | |
signs: ['3026B2758E66CF11A6D900AA0062CE6C'], | |
mime: 'application/vnd.ms-asf', | |
}, | |
{ | |
ext: 'cab', | |
signs: ['49536328', '4D534346'], | |
mime: 'application/vnd.ms-cab-compressed', | |
}, | |
{ | |
ext: 'xls', | |
signs: [ | |
'2,0908100000060500', | |
'D0CF11E0A1B11AE1', | |
'2,FDFFFFFF04', | |
'2,FDFFFFFF20000000', | |
], | |
mime: 'application/vnd.ms-excel', | |
}, | |
{ | |
ext: 'xla', | |
signs: ['D0CF11E0A1B11AE1'], | |
mime: 'application/vnd.ms-excel', | |
}, | |
{ | |
ext: 'chm', | |
signs: ['49545346'], | |
mime: 'application/vnd.ms-htmlhelp', | |
}, | |
{ | |
ext: 'ppt', | |
signs: [ | |
'2,006E1EF0', | |
'2,0F00E803', | |
'2,A0461DF0', | |
'D0CF11E0A1B11AE1', | |
'2,FDFFFFFF04', | |
], | |
mime: 'application/vnd.ms-powerpoint', | |
}, | |
{ | |
ext: 'pps', | |
signs: ['D0CF11E0A1B11AE1'], | |
mime: 'application/vnd.ms-powerpoint', | |
}, | |
{ | |
ext: 'wks', | |
signs: ['0E574B53', 'FF000200040405540200'], | |
mime: 'application/vnd.ms-works', | |
}, | |
{ | |
ext: 'wpl', | |
signs: [ | |
',4D6963726F736F66742057696E646F7773204D6564696120506C61796572202D2D20', | |
], | |
mime: 'application/vnd.ms-wpl', | |
}, | |
{ | |
ext: 'xps', | |
signs: ['504B0304'], | |
mime: 'application/vnd.ms-xpsdocument', | |
}, | |
{ | |
ext: 'cif', | |
signs: ['5B56657273696F6E'], | |
mime: 'application/vnd.multiad.creator.cif', | |
}, | |
{ | |
ext: 'odp', | |
signs: ['504B0304'], | |
mime: 'application/vnd.oasis.opendocument.presentation', | |
}, | |
{ | |
ext: 'odt', | |
signs: ['504B0304'], | |
mime: 'application/vnd.oasis.opendocument.text', | |
}, | |
{ | |
ext: 'ott', | |
signs: ['504B0304'], | |
mime: 'application/vnd.oasis.opendocument.text-template', | |
}, | |
{ | |
ext: 'pptx', | |
signs: ['504B030414000600'], | |
mime: | |
'application/vnd.openxmlformats-officedocument.presentationml.presentation', | |
}, | |
{ | |
ext: 'xlsx', | |
signs: ['504B030414000600'], | |
mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', | |
}, | |
{ | |
ext: 'docx', | |
signs: ['504B030414000600'], | |
mime: | |
'application/vnd.openxmlformats-officedocument.wordprocessingml.document', | |
}, | |
{ | |
ext: 'prc', | |
signs: ['424F4F4B4D4F4249', ',74424D504B6E5772'], | |
mime: 'application/vnd.palm', | |
}, | |
{ | |
ext: 'pdb', | |
signs: [ | |
',000000000000000000000000000000000000000000000000', | |
'4D2D5720506F636B6574204469637469', | |
'4D6963726F736F667420432F432B2B20', | |
'736D5F', | |
'737A657A', | |
'ACED0005737200126267626C69747A2E', | |
], | |
mime: 'application/vnd.palm', | |
}, | |
{ | |
ext: 'qxd', | |
signs: ['00004D4D585052'], | |
mime: 'application/vnd.Quark.QuarkXPress', | |
}, | |
{ | |
ext: 'rar', | |
signs: ['526172211A0700', '526172211A070100'], | |
mime: 'application/vnd.rar', | |
}, | |
{ | |
ext: 'mmf', | |
signs: ['4D4D4D440000'], | |
mime: 'application/vnd.smaf', | |
}, | |
{ | |
ext: 'cap', | |
signs: ['52545353', '58435000'], | |
mime: 'application/vnd.tcpdump.pcap', | |
}, | |
{ | |
ext: 'dmp', | |
signs: ['4D444D5093A7', '5041474544553634', '5041474544554D50'], | |
mime: 'application/vnd.tcpdump.pcap', | |
}, | |
{ | |
ext: 'wpd', | |
signs: ['FF575043'], | |
mime: 'application/vnd.wordperfect', | |
}, | |
{ | |
ext: 'xar', | |
signs: ['78617221'], | |
mime: 'application/vnd.xara', | |
}, | |
{ | |
ext: 'spf', | |
signs: ['5350464900'], | |
mime: 'application/vnd.yamaha.smaf-phrase', | |
}, | |
{ | |
ext: 'dtd', | |
signs: ['0764743264647464'], | |
mime: 'application/xml-dtd', | |
}, | |
{ | |
ext: 'zip', | |
signs: [ | |
'504B0304', | |
'504B0304', | |
'504B030414000100630000000000', | |
'504B0708', | |
',504B4C495445', | |
'6,504B537058', | |
'152,57696E5A6970', | |
], | |
mime: 'application/zip', | |
}, | |
{ | |
ext: 'amr', | |
signs: ['2321414D52'], | |
mime: 'audio/AMR', | |
}, | |
{ | |
ext: 'au', | |
signs: ['2E736E64', '646E732E'], | |
mime: 'audio/basic', | |
}, | |
{ | |
ext: 'm4a', | |
signs: ['00000020667479704D344120', '667479704D344120'], | |
mime: 'audio/mp4', | |
}, | |
{ | |
ext: 'mp3', | |
signs: ['494433', 'FFFB'], | |
mime: 'audio/mpeg', | |
}, | |
{ | |
ext: 'oga', | |
signs: ['4F67675300020000000000000000'], | |
mime: 'audio/ogg', | |
}, | |
{ | |
ext: 'ogg', | |
signs: ['4F67675300020000000000000000'], | |
mime: 'audio/ogg', | |
}, | |
{ | |
ext: 'qcp', | |
signs: ['52494646'], | |
mime: 'audio/qcelp', | |
}, | |
{ | |
ext: 'koz', | |
signs: ['49443303000000'], | |
mime: 'audio/vnd.audikoz', | |
}, | |
{ | |
ext: 'bmp', | |
signs: ['424D'], | |
mime: 'image/bmp', | |
}, | |
{ | |
ext: 'dib', | |
signs: ['424D'], | |
mime: 'image/bmp', | |
}, | |
{ | |
ext: 'emf', | |
signs: ['01000000'], | |
mime: 'image/emf', | |
}, | |
{ | |
ext: 'fits', | |
signs: ['53494D504C4520203D202020202020202020202020202020202020202054'], | |
mime: 'image/fits', | |
}, | |
{ | |
ext: 'gif', | |
signs: ['474946383961'], | |
mime: 'image/gif', | |
}, | |
{ | |
ext: 'jp2', | |
signs: ['0000000C6A5020200D0A'], | |
mime: 'image/jp2', | |
}, | |
{ | |
ext: 'jpg', | |
signs: ['FFD8', 'FFD8', 'FFD8', 'FFD8'], | |
mime: 'image/jpeg', | |
}, | |
{ | |
ext: 'jpeg', | |
signs: ['FFD8', 'FFD8'], | |
mime: 'image/jpeg', | |
}, | |
{ | |
ext: 'jpe', | |
signs: ['FFD8', 'FFD8'], | |
mime: 'image/jpeg', | |
}, | |
{ | |
ext: 'jfif', | |
signs: ['FFD8'], | |
mime: 'image/jpeg', | |
}, | |
{ | |
ext: 'png', | |
signs: ['89504E470D0A1A0A'], | |
mime: 'image/png', | |
}, | |
{ | |
ext: 'tiff', | |
signs: ['492049', '49492A00', '4D4D002A', '4D4D002B'], | |
mime: 'image/tiff', | |
}, | |
{ | |
ext: 'tif', | |
signs: ['492049', '49492A00', '4D4D002A', '4D4D002B'], | |
mime: 'image/tiff', | |
}, | |
{ | |
ext: 'psd', | |
signs: ['38425053'], | |
mime: 'image/vnd.adobe.photoshop', | |
}, | |
{ | |
ext: 'dwg', | |
signs: ['41433130'], | |
mime: 'image/vnd.dwg', | |
}, | |
{ | |
ext: 'ico', | |
signs: ['00000100'], | |
mime: 'image/vnd.microsoft.icon', | |
}, | |
{ | |
ext: 'mdi', | |
signs: ['4550'], | |
mime: 'image/vnd.ms-modi', | |
}, | |
{ | |
ext: 'hdr', | |
signs: ['233F52414449414E43450A', '49536328'], | |
mime: 'image/vnd.radiance', | |
}, | |
{ | |
ext: 'pcx', | |
signs: ['2,0908100000060500'], | |
mime: 'image/vnd.zbrush.pcx', | |
}, | |
{ | |
ext: 'wmf', | |
signs: ['010009000003', 'D7CDC69A'], | |
mime: 'image/wmf', | |
}, | |
{ | |
ext: 'eml', | |
signs: ['46726F6D3A20', '52657475726E2D506174683A20', '582D'], | |
mime: 'message/rfc822', | |
}, | |
{ | |
ext: 'art', | |
signs: ['4A47040E'], | |
mime: 'message/rfc822', | |
}, | |
{ | |
ext: 'manifest', | |
signs: ['3C3F786D6C2076657273696F6E3D'], | |
mime: 'text/cache-manifest', | |
}, | |
{ | |
ext: 'log', | |
signs: ['2A2A2A2020496E7374616C6C6174696F6E205374617274656420'], | |
mime: 'text/plain', | |
}, | |
{ | |
ext: 'tsv', | |
signs: ['47'], | |
mime: 'text/tab-separated-values', | |
}, | |
{ | |
ext: 'vcf', | |
signs: ['424547494E3A56434152440D0A'], | |
mime: 'text/vcard', | |
}, | |
{ | |
ext: 'dms', | |
signs: ['444D5321'], | |
mime: 'text/vnd.DMClientScript', | |
}, | |
{ | |
ext: 'dot', | |
signs: ['D0CF11E0A1B11AE1'], | |
mime: 'text/vnd.graphviz', | |
}, | |
{ | |
ext: 'ts', | |
signs: ['47'], | |
mime: 'text/vnd.trolltech.linguist', | |
}, | |
{ | |
ext: '3gp', | |
signs: ['0000001466747970336770', '0000002066747970336770'], | |
mime: 'video/3gpp', | |
}, | |
{ | |
ext: '3g2', | |
signs: ['0000001466747970336770', '0000002066747970336770'], | |
mime: 'video/3gpp2', | |
}, | |
{ | |
ext: 'mp4', | |
signs: [ | |
'000000146674797069736F6D', | |
'000000186674797033677035', | |
'0000001C667479704D534E56012900464D534E566D703432', | |
'6674797033677035', | |
'667479704D534E56', | |
'6674797069736F6D', | |
], | |
mime: 'video/mp4', | |
}, | |
{ | |
ext: 'm4v', | |
signs: [ | |
'00000018667479706D703432', | |
'00000020667479704D345620', | |
'667479706D703432', | |
], | |
mime: 'video/mp4', | |
}, | |
{ | |
ext: 'mpeg', | |
signs: ['00000100', 'FFD8'], | |
mime: 'video/mpeg', | |
}, | |
{ | |
ext: 'mpg', | |
signs: ['00000100', '000001BA', 'FFD8'], | |
mime: 'video/mpeg', | |
}, | |
{ | |
ext: 'ogv', | |
signs: ['4F67675300020000000000000000'], | |
mime: 'video/ogg', | |
}, | |
{ | |
ext: 'mov', | |
signs: ['00', '000000146674797071742020', '6674797071742020', '6D6F6F76'], | |
mime: 'video/quicktime', | |
}, | |
{ | |
ext: 'cpt', | |
signs: ['4350543746494C45', '43505446494C45'], | |
mime: 'application/mac-compactpro', | |
}, | |
{ | |
ext: 'sxc', | |
signs: ['504B0304', '504B0304'], | |
mime: 'application/vnd.sun.xml.calc', | |
}, | |
{ | |
ext: 'sxd', | |
signs: ['504B0304'], | |
mime: 'application/vnd.sun.xml.draw', | |
}, | |
{ | |
ext: 'sxi', | |
signs: ['504B0304'], | |
mime: 'application/vnd.sun.xml.impress', | |
}, | |
{ | |
ext: 'sxw', | |
signs: ['504B0304'], | |
mime: 'application/vnd.sun.xml.writer', | |
}, | |
{ | |
ext: 'bz2', | |
signs: ['425A68'], | |
mime: 'application/x-bzip2', | |
}, | |
{ | |
ext: 'vcd', | |
signs: ['454E5452595643440200000102001858'], | |
mime: 'application/x-cdlink', | |
}, | |
{ | |
ext: 'csh', | |
signs: ['6375736800000002000000'], | |
mime: 'application/x-csh', | |
}, | |
{ | |
ext: 'spl', | |
signs: ['00000100'], | |
mime: 'application/x-futuresplash', | |
}, | |
{ | |
ext: 'jar', | |
signs: ['4A4152435300', '504B0304', '504B0304140008000800', '5F27A889'], | |
mime: 'application/x-java-archive', | |
}, | |
{ | |
ext: 'rpm', | |
signs: ['EDABEEDB'], | |
mime: 'application/x-rpm', | |
}, | |
{ | |
ext: 'swf', | |
signs: ['435753', '465753', '5A5753'], | |
mime: 'application/x-shockwave-flash', | |
}, | |
{ | |
ext: 'sit', | |
signs: ['5349542100', '5374756666497420286329313939372D'], | |
mime: 'application/x-stuffit', | |
}, | |
{ | |
ext: 'tar', | |
signs: ['7,7573746172'], | |
mime: 'application/x-tar', | |
}, | |
{ | |
ext: 'xpi', | |
signs: ['504B0304'], | |
mime: 'application/x-xpinstall', | |
}, | |
{ | |
ext: 'xz', | |
signs: ['FD377A585A00'], | |
mime: 'application/x-xz', | |
}, | |
{ | |
ext: 'mid', | |
signs: ['4D546864'], | |
mime: 'audio/midi', | |
}, | |
{ | |
ext: 'midi', | |
signs: ['4D546864'], | |
mime: 'audio/midi', | |
}, | |
{ | |
ext: 'aiff', | |
signs: ['464F524D00'], | |
mime: 'audio/x-aiff', | |
}, | |
{ | |
ext: 'flac', | |
signs: ['664C614300000022'], | |
mime: 'audio/x-flac', | |
}, | |
{ | |
ext: 'wma', | |
signs: ['3026B2758E66CF11A6D900AA0062CE6C'], | |
mime: 'audio/x-ms-wma', | |
}, | |
{ | |
ext: 'ram', | |
signs: ['727473703A2F2F'], | |
mime: 'audio/x-pn-realaudio', | |
}, | |
{ | |
ext: 'rm', | |
signs: ['2E524D46'], | |
mime: 'audio/x-pn-realaudio', | |
}, | |
{ | |
ext: 'ra', | |
signs: ['2E524D460000001200', '2E7261FD00'], | |
mime: 'audio/x-realaudio', | |
}, | |
{ | |
ext: 'wav', | |
signs: ['52494646'], | |
mime: 'audio/x-wav', | |
}, | |
{ | |
ext: 'webp', | |
signs: ['52494646'], | |
mime: 'image/webp', | |
}, | |
{ | |
ext: 'pgm', | |
signs: ['50350A'], | |
mime: 'image/x-portable-graymap', | |
}, | |
{ | |
ext: 'rgb', | |
signs: ['01DA01010003'], | |
mime: 'image/x-rgb', | |
}, | |
{ | |
ext: 'webm', | |
signs: ['1A45DFA3'], | |
mime: 'video/webm', | |
}, | |
{ | |
ext: 'flv', | |
signs: ['00000020667479704D345620', '464C5601'], | |
mime: 'video/x-flv', | |
}, | |
{ | |
ext: 'mkv', | |
signs: ['1A45DFA3'], | |
mime: 'video/x-matroska', | |
}, | |
{ | |
ext: 'asx', | |
signs: ['3C'], | |
mime: 'video/x-ms-asf', | |
}, | |
{ | |
ext: 'wmv', | |
signs: ['3026B2758E66CF11A6D900AA0062CE6C'], | |
mime: 'video/x-ms-wmv', | |
}, | |
{ | |
ext: 'avi', | |
signs: ['52494646'], | |
mime: 'video/x-msvideo', | |
}, | |
]; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment