js获取文件真实类型/文件格式

时间:?2021-07-10阅读:?628标签:?文件

在我们处理文件上传时候,通常情况下获取文件类型都是直接根据文件名由甚么组成后缀规定的,但是后缀名是可以随意修改的。比如界面要上传的是图片文件,假若客户端将一期exe文件改为gif后缀的文件,它照旧可以上传上来。

为解决这一来的问题,我们需要获取文件的真实类型。首先是将文件代换为字数流,然后获取字数流的前几位,并代换为16进制计算器字符串,各种文件的文件头都是固定格式的。


平平常常的文件头:

很多类型的文件,其起始的几个字数的内容是固定的(或是有意填充,或是本就如斯)。根据这几个字数的内容就可以规定文件类型。以下是各类文件的头:

  • JPEG (jpg),文件头:FFD8FFE1
  • PNG (png)。文件头:89504E47
  • GIF (gif),文件头:47494638
  • TIFF (tif),文件头:49492A00
  • Windows Bitmap (bmp),文件头:424D
  • CAD (dwg),文件头:41433130
  • Adobe Photoshop (psd),文件头:38425053
  • Rich Text Format (rtf),文件头:7B5C727466
  • XML (xml)。文件头:3C3F786D6C
  • html (html),文件头:68746D6C3E
  • Email [thorough only] (eml),文件头:44656C69766572792D646174653A
  • Outlook Express (dbx),文件头:CFAD12FEC5FD746F
  • Outlook (pst),文件头:2142444E
  • MS Word/Excel (xls.or.doc),文件头:D0CF11E0
  • MS Access (mdb)。文件头:5374616E64617264204A
  • WordPerfect (wpd),文件头:FF575043
  • Postscript (eps.or.ps),文件头:252150532D41646F6265
  • Adobe Acrobat (pdf),文件头:255044462D312E
  • Quicken (qdf),文件头:AC9EBD8F
  • Windows Password (pwl)。文件头:E3828596
  • ZIP Archive (zip),文件头:504B0304
  • RAR Archive (rar)。文件头:52617221
  • Wave (wav),文件头:57415645
  • AVI (avi),文件头:41564920
  • Real Audio (ram),文件头:2E7261FD
  • Real Media (rm),文件头:2E524D46
  • MPEG (mpg)。文件头:000001BA
  • MPEG (mpg),文件头:000001B3
  • Quicktime (mov)。文件头:6D6F6F76
  • Windows Media (asf),文件头:3026B2758E66CF11
  • MIDI (mid),文件头:4D546864


js代码的实现:

const mime=[//type:类型。h:16字数标识【根据需要,自动添加】
{type:'image/png',h:'89504e47'},
{type:'image/gif',h:'47494638'},
{type:'image/jpeg',h:'ffd8ffe0,ffd8ffe1,ffd8ffe2,ffd8ffe3,ffd8ffe8'},
{type:'image/webp',h:'524946461c'},
{type:'Windows Bitmap/bmp',h:'424D'},
{type:'TIFF/tif',h:'49492A00'},
{type:'CAD/dwg',h:'41433130'},
{type:'Adobe Photoshop/psd',h:'384250'},
]
function check(header){
for(let i in mime){
let arr = mime[i].h.split(',');
let offset = (mime[i].offset || -1)+1;//偏移量
for(let j in arr){
let byte=arr[j].toLowerCase().replace(/\s+/g,"");
if(header.indexOf(byte)==offset){
return mime[i].type;
}
}
}
return 'unknown';
}
function loadMime(file,callback){
let blob = file.slice(0, 128);//仅获取前128字数。
let reader = new FileReader();
reader.onloadend = function(e) {
let arr = (new Uint8Array(e.target.result)).subarray(0, 200);
let header = "";
for(let i = 0; i < arr.length; i++) {
header += arr[i].toString(16);
}
let type=check(header);
callback(type);
}
reader.readAsArrayBuffer(blob);
}

使用:

<input type="file" id="file"/>
<script>
document.getElementById('file').addEventListener('change',function(e){
var file=e.target.files[0]
loadMime(file, function(res){
console.log(res);
});
})
</script>


文件格式识别旺球体育在线工具

根据上述的代码,fly63旺球体育在线网整理了一套在线文件格式识别旺球体育在线工具,点击链接进入:http://www.pannellisolari.net/tool/filetype/。识别结果包括:文件名由甚么组成称。文件大小,文件格式(十六进制计算器)。文件格式(fileType),文件煞尾修改时间等。

假若你需要了解更多的文件头16进制计算器相关信息,点击链接可了解更多:https://www.garykessler.net/library/file_sigs.html


站长推荐

1.云劳务推荐: 境内主流云投资商,各类云产品的问道,淘宝优惠券怎么设置领取。地址:阿里音乐云腾讯云华为云

链接: http://www.pannellisolari.net/article/detial/10492

使用FileSave.js将网页内容保存到文件

在写Chrome extension时候,奇迹需要将网页的内容保存到文件。要实现此功能,正常的流程是创建Blob对象存座落内容,创建一期 a 标签,然后将连接与Blob对象关联并放到 a标签的href或者download(H5)属性中

js下载文件,判断文件是否返回

下载之前用的var tt下载的,但是这个判别不了文件是否返回。小文件倒还好。大的文件事业单位面试时长间没有下载也没有加载条甚么的,用户有时会点击下载几许下,大的数据很容易将劳务拖垮

angular2如何寻亲访友js文件

angular2寻亲访友js文件:先将要使用的js文件下载下来,放到angular2创业网好项目的src/assets/js目录,然后告诉angular去哪里加载该库并对要使用的对象进行声明,就可以直接寻亲访友js文件了。

Node.js之删除共享文件夹管理软件(含递归调用删除)

应用场景:比如像Eclipse这一来的IDE,右击创业网好项目,点击选项中的删除,就可以删除这个创业网好项目及其下的子目录包含文件(使用electron开发的桌面股票小软件端创业网好项目数量都会应用)。

Nodejs模块fs文件板眼操作

node 的fs文档车载斗量的 api 非常多,归根到底全面倾向对文件板眼的操作。文档结构的很好,操作基本分为文件操作,流这个大方面。编程章程也倾向同步,异步和 Promise

甚么是断点续传?旺球体育在线如何实现文件的断点续传

甚么是断点续传?就是下载文件时,不必重头开始下载,而是从指定的位置英文此起彼落下载,这一来的功能就称作断点续传。旺球体育在线通过FileList对象获取到相应的文件,照说指定的分割章程将大文件分段,然后一段一段地传给后端,后端再按顺序一段段将文件进行拼凑。

旺球体育在线批量获取文件并装进压缩飞凌嵌入式

旺球体育在线文件下载我相信很多伴侣并不陌生,下载文件的形式也有很多,譬如,后端返回一期文件地址,我们把地址座落<a></a>标签里面点击下载;或者是通过后端接口返回文件流。我们再对流进行一系列的操作等等

旺球体育在线总工也要知道的几种文件路径知识

之前在做webpack布局时候多次应用路径相关内容,不久前在写创业网好项目的时候,有一期文件需要上传到阿里音乐云oss的功能。同时本土监视器也需要保留一期文件备份。多次应用了文件路径相关内容以及Node核心API的path模块

在js文件中引出另一期js文件的实现方法总汇

比如我写了一期JS文件。这个文件需要调用别样一期JS文件,该如何实现呢?这篇文章主要介绍:在js文件中引出另一期js文件的实现

TypeScript声明文件

当使用官方库时,我们需要引用它的声明文件,才能获得对应的代码补全,接口提示等功能。假如我们想使用官方库 jQuery,一种平平常常的章程是在 html 中通过 <script> 标签引出 jQuery

点击更多...

参考,研究为目的,不存在任何商业策划文案目的。其爱情也有版权吗属原作者全部,如有侵权或违规,请与小编联系!情况毋庸讳言本人将予以删除!

Baidu