javscript获取文件真实后缀名

news/2024/7/10 23:19:24 标签: javascript, es6

文章目录

  • javscript获取文件真实后缀名
      • 前言:错误的获取方法

javscript获取文件真实后缀名

前言:错误的获取方法

过去获取文件的步骤是什么?

第一个想到的是根据文件的输入得到的文件,然后得到文件的属性,然后根据文件的属性得到类型,然后通过截取得到格式。

如:

javascript"><input name="file" type="file" name="" id="fileid">

 let file = document.getElementById("fileid");
 file.addEventListener("change",function(){
       console.log(file.files[0])
 })

在这里插入图片描述

通过截取type的属性值获取到png。

但是问题来了,如果我替换文件扩展名,格式就不再正确了。

当我将文件扩展名从 png 更改为 jpg 时,输出了以下格式

在这里插入图片描述
这个格式是错误的,只是修改后缀名,但是原来的文件类型其实是png,但是这时候我们得到错误的输出jpg

javascript_32">1:通过javascript获取正确的后缀名

要得到正确的后缀名,这里需要得到文件的十进制格式

然后将得到的十进制数据转换成十六进制,确定文件格式

一如既往,先得到type为file的input元素

javascript">let file = document.getElementById("fileid");

选择文件时,会触发change事件

javascript">file.addEventListener("change",function(){

})

然后获取文件

javascript">let file = file.files[0];

接下来你需要使用一个新的对象 FileReader

javascript">let read = new FileReader();

然后使用该对象的 readAsArrayBuffer方法

javascript">        file.addEventListener("change",function(){
            let read = new FileReader();
            read.readAsArrayBuffer(file.files[0])
            read.onload = function(){
                console.log(read.result)
            }
       })

readAsArrayBuffer读取的文件会存放在result属性中,但需要onload后加载成功后获取。

这时候,你会得到如下数据:

在这里插入图片描述
展开查看:

在这里插入图片描述
获取数组前四条数据:

javascript">let arr = (new Uint8Array(read.result)).subarray(0, 4);

在这里插入图片描述
将这些数据组合成字符串并转成16进制数据以便于比较:

javascript">for(let i = 0;i<arr.length;i++){
    msg+=arr[i].toString(16)
}

得到:89504e47(msg的值)

其中:

  • png十六进制:89 50 4E 47
  • jpg十六进制:FF D8 FF E0
  • gif十六进制:47 49 46 38

接下来,您可以检查表格以确定文件类型:

javascript">        let file = document.getElementById("fileid");
        file.addEventListener("change",function(){
            let read = new FileReader();
            read.readAsArrayBuffer(file.files[0])
            read.onload = function(){
                let arr = (new Uint8Array(read.result)).subarray(0, 4);
                let msg = "";
                for(let i = 0;i<arr.length;i++){
                    msg+=arr[i].toString(16)
                }
                switch(msg){
                    case '89504e47':
                        console.log("png");
                        break;
                    case 'ffd8ffe0':
                        console.log("jpg");
                        break;
                    case '47494638':
                        console.log("gif");
                        break;
                }
            }
       })

部分文件数据类型如下:

签名内容
00 00 01 00ico
47 49 46 38 37 61gif
FF D8 FF E0jpg
52 61 72 21 1A 07rar
89 50 4E 47 0D 0A 1A 0Apng
25 21 50 53ps
25 50 44 46 2Dpdf
43 44 30 30 31iso
75 73 74 61 72tar
77 4F 46 46woff
77 4F 46 32woff2

http://www.niftyadmin.cn/n/965398.html

相关文章

iOS8开发~Swift(一)入门

一、概论及Swift介绍 iOS7刚公布多时候&#xff0c;苹果引入了JavaScriptCore.framework用来处理JavaScript&#xff0c;看到了能够接触其它编程语言的契机&#xff0c;使iOS程序猿不用吊死在OC这一颗树上。当但iOS8公布的时候。简直Hold不住了。新的开发语言《Swift》出现了&a…

javascript获取文件sha-256,sha-384,sha-512摘要,验证文件是否被篡改,验证文件一致性,文件安全管理,计算文件的MD5值

javascript获取文件sha-256,sha-384,sha-512摘要,验证文件是否被篡改&#xff0c;验证文件一致性&#xff0c;文件安全管理&#xff0c;计算文件的MD5值 文章目录javascript获取文件sha-256,sha-384,sha-512摘要,验证文件是否被篡改&#xff0c;验证文件一致性&#xff0c;文件…

Git配置SSH服务,上传SSH-key(详细简单),生成ssh密钥,ssh免密登录

Git配置SSH服务&#xff0c;上传SSH-key(详细简单)&#xff0c;生成ssh密钥&#xff0c;ssh免密登录 文章目录Git配置SSH服务&#xff0c;上传SSH-key(详细简单)&#xff0c;生成ssh密钥&#xff0c;ssh免密登录1&#xff1a;准备工作1.1&#xff1a;检查用户信息1.2&#xff1…

ibatis 自动生成map,bean,dao

1.下载 AbatorForEclipse1.1.0 地址&#xff1a;http://download.csdn.net/detail/fym548/9426877 点击Archive按钮选择下载的&#xff0c;然后重启MyEclipse 新建一个项目&#xff0c;右键新增 会生成一个 abatorConfig.xml 文件 <?xml version"1.0" encoding&q…

JavaScript bind,call,apply原理,手写bind,call,apply实现

JavaScript bind,call,apply原理&#xff0c;手写bind,call,apply实现 文章目录JavaScript bind,call,apply原理&#xff0c;手写bind,call,apply实现1&#xff1a;前言2&#xff1a;实现call&#xff08;实现在对象中调用函数&#xff09;3&#xff1a;实现apply&#xff08;实…

ViewPager中t常见tab例子2

2019独角兽企业重金招聘Python工程师标准>>> 效果图示例&#xff1a; 1、res/layout中activity_main.xml布局 代码 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" xmlns:tools"http://schemas.android.com/tools&qu…

webpack 编写插件,webpack 自定义插件

webpack 编写插件&#xff0c;webpack 自定义插件 文章目录webpack 编写插件&#xff0c;webpack 自定义插件1&#xff1a;安装 webpack2&#xff1a;创建装载机与主文件 index.js3&#xff1a;创建自定义插件4&#xff1a;使用插件5&#xff1a;做一些有趣的事情&#xff0c;另…

javascript Map实现原理,es6 Map数据结构底层实现

&#x1f34f; javascript Map实现原理&#xff0c;es6 Map数据结构底层实现 文章目录&#x1f34f; javascript Map实现原理&#xff0c;es6 Map数据结构底层实现&#x1f34e; 1&#xff1a;前言&#x1f350; 2&#xff1a;hash表&#x1f349; 3&#xff1a;实现 get 功能&…