首页 > 其他分享 >如何获取input框type=file选中的文件对象(FileReader)

如何获取input框type=file选中的文件对象(FileReader)

时间:2023-01-30 17:00:38浏览次数:51  
标签:文件 FileReader image 获取 事件 file input


最近突发奇想想做一个现在常用的图像上传然后从中截取头像保存的案例,所以做了一些准备工作,比如input框选择文件触发的哪些事件,这一节就保存一下我们如何获取input的type=file的input框的文件数据。

如果想获取通过input选择的文件的数据,我们就需要使用到js封装好的FileReader对象。

获取对象:

首先我们需要通过FileReader构造函数实例化对象。

var reader = new FileReader();

然后通过调用

​​​FileReader.readAsDataURL()​​指定获取的数据对象(获取input的比如:input.files[0]),并且在数据读取完成后触发​​FileReader.onload​​事件,我们可以给onload赋值一个function来获取获得的相关数据。如:

FileReader.οnlοad=function (oFREvent) {
console.log(oFREvent.target.result);
};

你就会发现打印出来的全是文件转化成的base64格式文件数据,前面有一个文件格式开头的代码,比如图片格式的都会带一个data:image/ ,来表示是图片数据,如果需要判断是否是图片类型的数据,我们就需要获取文件的类型使用。

ps:如果在input上面加一个multiple属性,输入框就可以选择多个文件。兼容性:html5,ie10+。

首先获取到文件对象,可以通过:input.files来获取到文件对象组,但是我们现在貌似只能选择一项文件,所以通过input.files[0]就获取到了文件的对象。文件对象里面包括文件大小(size),文件的名字(name)和文件类型(type)。如果上传的是一张jpg的图形,那它的type就是image/jpeg。

所以,我们可以通过使用正则判断type的值来获取是否上传的是图片来处理。如果需要规定使用的图片类型,可以使用下面的这条正则:

/^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i

如果没有要求,只要是图片就行的话就用下面:

/image\/\w+/

来进行判断一下即可

/image\/\w+/.test(file.type)//如果是图片的话就返回true


下面附上mdn介绍的相关方法:

事件处理程序


​FileReader.onabort​

​abort​​事件的处理程序。每次读取操作中止时触发此事件。

​FileReader.onerror​

​error​​事件的处理程序。每次读取操作遇到错误时触发此事件。

​FileReader.onload​

​load​​事件的处理程序。每次读取操作成功完成时触发此事件。

​FileReader.onloadstart​

​loadstart​​事件的处理程序。每次阅读开始时触发此事件。

​FileReader.onloadend​

​loadend​​事件的处理程序。每次阅读操作完成(成功或失败)时触发此事件。

​FileReader.onprogress​

​progress​​事件的处理程序。阅读

​Blob​​内容时触发此事件。

​FileReader.abort()​​​​readyState​​会是

​DONE​​。

​FileReader.readAsArrayBuffer()​

开始读取指定的内容 ​​Blob​​,一旦完成,该

​result​​属性包含一个

​ArrayBuffer​​表示该文件的数据。

​FileReader.readAsBinaryString()​​ 

开始读取指定的内容 ​​Blob​​,一旦完成,该

​result​​属性将以文本形式包含原始二进制数据作为字符串。

​FileReader.readAsDataURL()​

开始阅读指定的内容 ​​Blob​​,一旦完成,该

​result​​属性包含

​data:​​表示文件数据的URL。

​FileReader.readAsText()​

开始读取指定的内容 ​​Blob​​,一旦完成,该

​result​​属性将文件的内容作为文本字符串包含。








标签:文件,FileReader,image,获取,事件,file,input
From: https://blog.51cto.com/u_15948039/6027355

相关文章

  • xml Configuration File的Spring Config没有(2021版本的idea)
    1.查看是否下载了spring2.在pom文件中引入spring依赖3.更新maven4.此时还没有显示的话,点击setting查看maven的路径,建议不要使用系统默认的路径因为这样的话,下载的十分......
  • 简述你对 input()函数的理解?
    在 Python3  中,input()获取用户输入,不论用户输入的是什么,获取到的都是字符串类型的。在Python中有raw_input()和input(),raw_input()和Python3中的input()作......
  • Linux profile、bashrc、bash_profile
    一、profile文件1、profile文件的作用profile(/etc/profile),用于设置系统级的环境变量和启动程序,在这个文件下配置会对所有用户生效。当用户登录(login)时,文件会被执行......
  • IDEA加载大文件时报错:The file size exceeds configured limit
    1,问题描述1Thefilesizeexceedsconfiguredlimit2,解决方案:配置一下idea.properties文件3,添加如下配置1idea.max.intellisense.filesize=500004,重启idea,完......
  • 浅谈Linux下file的应用实例
    file的官方解释为:file - determine file type也就是说可以识别文件类型的意思,也可用来辨别一些文件的编码格式。下面看几个比较使用的例子。实例一:默认file后......
  • jenkins流水线(jenkinsfile)详解
    置顶我认不到你已于 2022-08-1216:33:20 修改8936收藏60分类专栏:jenkins文章标签:j......
  • Object storage vs. file storage vs. block storage
    Objectstorage,alsoknownasobject-basedstorage,isastrategythatmanagesandmanipulatesdatastorageasdistinctunits,calledobjects.Theseobjectsar......
  • win32 SendInput
    SendInput代替了mouse_event以及keybd_eventprototypeUINTWINAPISendInput(_In_UINTnInputs,_In_LPINPUTpInputs,_In_intcbSize);LPINPUTtypedefs......
  • FreeFileSync v5.2
    这玩意更新太快,连5.1都过去了,貌似更新一把,但需要的右键文件复制功能却没有...下载:​​http://nchc.dl.sourceforge.net/project/freefilesync/freefilesync/v5.2/FreeFileSy......
  • FreeFileSync v5.0
    下载:​​​http://nchc.dl.sourceforge.net/project/freefilesync/freefilesync/v5.0/FreeFileSync_v5.0_setup.exe​​ ......