专业营销网站,wordpress文章页模板,如何识别html5网站,天猫商城官网登录前言#xff1a;FileReader是一种异步文件读取机制#xff0c;结合input:file可以很方便的读取本地文件。 input:file 在介绍FileReader之前#xff0c;先简单介绍input的file类型。
input typefile idfile input的file类型会渲染为一个按…前言FileReader是一种异步文件读取机制结合input:file可以很方便的读取本地文件。 input:file 在介绍FileReader之前先简单介绍input的file类型。
input typefile idfile input的file类型会渲染为一个按钮和一段文字。点击按钮可打开文件选择窗口文字表示对文件的描述大部分情况下为文件名file类型的input会有files属性保存着文件的相关信息。
document.querySelector(#file).addEventListener(change,(fileChoosed) { console.log(fileChoosed, fileChoosed.target.files) }) 点击按钮上传一个文件后在控制台打印上传的文件信息如下
可以发现文件信息是一个json对象由传入的file对象组成。每个file对象即每个上传文件包含以下属性
lastModified数值表示最近一次修改时间的毫秒数 lastModifiedDate对象表示最近一次修改时间的Date对象 name本地文件系统中的文件名 size文件的字节大小 type字符串文件的MIME类型
webkitRelativePath此处为空当在input上加上webkitdirectory属性时用户可选择文件夹此时webkitRelativePath表示文件夹中文件的相对路径。
input typefile idfile webkitdirectory 1 FileReader 以上file对象只获取到了对文件的描述信息但没有获得文件中的数据。我们可以通过html5提供的FileReader读取到文件中的数据。
首先创建一个FileReader实例
const reader new FileReader(); 1 FileReader提供了如下方法
readAsArrayBuffer(file) 按字节读取文件内容结果用ArrayBuffer对象表示 readAsBinaryString(file) 按字节读取文件内容结果为文件的二进制串 readAsDataURL(file) 读取文件内容结果用data:url的字符串形式表示 readAsText(file,encoding) 按字符读取文件内容结果用字符串形式表示 abort() 终止文件读取操作
readAsDataURL和readAsText较为常用这里只对这两者进行说明。
readAsDataURL会将文件内容进行base64编码后输出
document.querySelector(#file).addEventListener(change,(fileChoosed) { const reader new FileReader(); reader.readAsDataURL(fileChoosed.target.files[0]);//发起异步请求 reader.onload function(readRes){ console.log(加载完成, readRes.target.result) } }) 控制台为当前所传文件的base64编码表示。由于媒体文件的src属性可以通过采用网络地址或base64的方式显示因此我们可以利用readAsDataURL实现对图片的预览。 如下只需将读取的结果赋给图片的src属性即可预览图片
input typefile idfile / img src idimgPreview document.querySelector(#file).addEventListener(change,(fileChoosed) { const reader new FileReader(); reader.readAsDataURL(fileChoosed.target.files[0]);//发起异步请求 reader.onload function(readRes){ document.querySelector(#imgPreview).src readRes.target.result } }) readAsText可按指定编码方式读取文件但读取文件的单位是字符故对于文本文件只要按规定的编码方式读取即可而对于媒体文件图片、音频、视频其内部组成并不是按字符排列故采用readAsText读取会产生乱码。
FileReader事件
onloadstart 当读取操作开始时调用 onprogress 在读取数据过程中周期性调用 onabort 当读取操作被中止时调用 onerror 当读取操作发生错误时调用 onload 当读取操作成功完成时调用 onloadend 当读取操作完成时调用无论成功失败或取消
注释
每过50ms左右就会触发一次progress事件对于较大的文件可以利用progress实现进度条 由于种种原因无法读取文件时会触发error事件。触发error事件时相关信息保存在FileReader对象的error属性中这个属性将保存一个对象此对象只有一个属性code即错误码。1表示未找到文件2表示安全性错误3表示读取中断4表示文件不可读5表示编码错误。 示例
input typefile idfile / document.querySelector(#file).addEventListener(change,(fileChoosed) { const reader new FileReader(); reader.readAsText(fileChoosed.target.files[0],utf-8);//发起异步请求 reader.onloadstart function(readRes){ // 文件大于500kb则取消加载 if(readRes.total 1024*500) { reader.abort() } else { console.log(开始加载) } } reader.onabort function (readRes) { console.log(加载已取消) } reader.onprogress function(readRes){ console.log(加载中, ${(readRes.loaded / readRes.total).toFixed(2)*100}/100) } reader.onload function(readRes){ console.log(加载成功) } reader.onloadend function(readRes){ console.log(加载结束) } })