JS前端文件读取FileReader操作方法总结

 更新时间:2024年08月07日 09:39:25   作者:yqdidy  
FileReader 包含了一套完整的事件模型,用于捕获读取文件时的状态,下面这篇文章主要给大家介绍了关于JS前端文件读取FileReader操作方法的相关资料,需要的朋友可以参考下

FileReader

FileReader 是一个对象,允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

构造函数:

let reader = new FileReader(); // 没有参数

主要方法

readAsArrayBuffer(blob)

将数据读取为二进制格式的 ArrayBuffer。当读取操作完成时,readyState 变成 DONE(已完成),并触发 loadend 事件,同时 result 属性中将包含一个 ArrayBuffer 对象以表示所读取文件的数据。

reader.readAsArrayBuffer(blob)

readAsText(blob, [encoding])

将数据读取为给定编码(默认为 utf-8 编码)的文本字符串。

instanceOfFileReader.readAsText(blob[, encoding]);

readAsDataURL(blob)

读取二进制数据,并将其编码为 base64 的 data url。

reader.readAsDataURL(blob);

读取方法都是异步的,也就是说只有当执行完成后才能够查看到结果,如果直接查看是无结果的,并返回 undefined。必须要挂载 实例下的 onload 或 onloadend 的方法才能处理转化后的结果

FileReader的三个属性:

  • error: 返回读取时的错误信息
  • readyState: 返回操作的当前状态
  • result: 返回读取文件的结果

读取文件的示例:

参考 https://www.jb51.net/javascript/3249569x8.htm

<input type="file" onchange="readFile(this)">

<script>
function readFile(input) {
  let file = input.files[0];

  let fileReader= new FileReader();

  fileReader.readAsText(file);
  // 或者 fileReader.readAsArrayBuffer(file)
  
  /**
   * 该方法在读取时调用
   */
  fileReader.onloadstart = () => {
      console.log("开始读取")
      console.log(fileReader.readyState)//调用函数,但还没有结束,返回1
  }
  /**
   * 该方法在读取成功时调用
   */
  fileReader.onload = () => {
      console.log("读取成功")
      console.log(fileReader.result)
      console.log(fileReader.readyState)//调用完成,返回2
  }
  /**
   * 该方法在读取结束时调用
   */
  fileReader.onloadend = () => {
      console.log("读取结束")
  }
  /**
   * 读取过程中触发
   */
  fileReader.onprogress = (e) => {
      console.log("读取中")
      //获取已经加载的数据量
      console.log("loaded==>" + e.loaded)
  }
  /**
   * 该方法在调用abort函数时触发
   */
  fileReader.onabort = () => {
      console.log("操作终止")
  }
  //当读取出现失败时触发
  fileReader.onerror = () => {
      console.log("出现错误")
      console.log(fileReader.error)
  }
}
</script>

read 方法的选择tips:

  • readAsArrayBuffer —— 用于二进制文件,执行低级别的二进制操作。对于诸如切片(slicing)之类的高级别的操作,File 是继承自 Blob 的,所以可以直接调用它们,而无需读取。
  • readAsText —— 用于文本文件,当我们想要获取字符串时。
  • readAsDataURL —— 用于在 src 中使用此数据,并将其用于img 或其他标签时。

    还有一种用于此的读取文件的替代方案:URL.createObjectURL(file)

示例:根据用户传入的图片文件,来生成一个对应的临时url,并将临时url作为src传给img标签

<input type="file" id="file">
<img  id="img">

let file = document.getElementById("file")
let img= document.getElementById("img")
file.addEventListener("change", (e) => {
    let fileList=e.target.files
    //先获取一份文件
    //这里获取的才是File对象
    let file = fileList[0]
    //因为file也是Blob对象,所以直接传入即可
    img.src=URL.createObjectURL(file)
})

主要事件

读取过程中,有以下事件:

  • loadstart —— 开始加载。
  • progress —— 在读取过程中出现,当FileReader读取数据时,进度事件会定期触发。
  • load —— 读取完成时触发,没有 error。
  • abort —— 在中止读取时会触发 abort 事件:例如程序调用 abort()。。
  • error —— 出现 error时触发。
  • loadend —— 读取完成,无论成功还是失败。

读取完成后,可以通过以下方式访问读取结果:

  • reader.result 是结果(如果成功)
  • reader.error 是 error(如果失败)。

检测浏览器对 FileReader 的支持:

if(window.FileReader) {
  var fr = new FileReader();
  // add your code here
}else {
  alert("Not supported by your browser!");
}

React + antd Upload 组件示例

场景: 表单文件上传,读取后以base64格式与表单一起传给后端。

<Upload
  maxCount={1}
  accept=".jpg,.jpeg,.png"
  beforeUpload={(file) => {
    console.log('文件类型', file.type, file);
    // 限制文件类型
    const allowTypes = [
      'image/png',
      'image/jpeg',
      'image/jpg',
    ];
    const isAllowType = allowTypes.includes(file.type);
		// 校验文件大小和类型
    if (!isAllowType || file.size / 1024 / 1024 > 4) {
      message.error('文件格式大小错误');
      return Upload.LIST_IGNORE;
    }
    const reader = new FileReader();
    //将上传的文件读取成base64
    reader.readAsDataURL(file);
    reader.onloadend = function () {
    	console.log('文件Base64内容',reader.result, file);
    };
    // 阻止上传,为了最后和表单一起提交
    return false;
  }}
>
  <Button icon={<UploadOutlined />} type="primary">
    文件上传
  </Button>
</Upload>

总结 

到此这篇关于JS前端文件读取FileReader操作方法总结的文章就介绍到这了,更多相关JS前端文件读取FileReader内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript将字符转换为ASCII码的实现方法

    JavaScript将字符转换为ASCII码的实现方法

    在Web前端开发中,字符编码是处理文本数据时不可或缺的一部分,ASCII是一种广泛使用的字符编码标准,它为每个字符分配了一个唯一的数字表示,解如何将字符转换为ASCII码,对于解析、生成和操作字符串具有重要意义,本文将详细介绍这一过程,并提供多个实用的代码示例
    2024-12-12
  • 使用JS中的exec()方法构造正则表达式验证

    使用JS中的exec()方法构造正则表达式验证

    这篇文章主要介绍了使用JS中的exec()方法构造正则表达式验证的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • JavaScript实现LI列表数据绑定的方法

    JavaScript实现LI列表数据绑定的方法

    这篇文章主要介绍了JavaScript实现LI列表数据绑定的方法,可实现绑定Li列表项对应数值项的功能,涉及javascript鼠标onmousemove、onmouseout及onclick等事件的相关使用技巧,需要的朋友可以参考下
    2015-08-08
  • 更优雅的微信小程序骨架屏实现详解

    更优雅的微信小程序骨架屏实现详解

    这篇文章主要介绍了更优雅的微信小程序骨架屏实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • js 赋值包含单引号双引号问题的解决方法

    js 赋值包含单引号双引号问题的解决方法

    这篇文章主要介绍了js赋值包含单引号双引号问题的解决方法,需要的朋友可以参考下
    2014-02-02
  • js 调用父窗口的具体实现代码

    js 调用父窗口的具体实现代码

    想要实现如题所示:父窗体需要顶一个show()方法,具体实现代码如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-07-07
  • javascript 浏览器检测代码精简版

    javascript 浏览器检测代码精简版

    javascript检测浏览器精简版,需要的朋友可以参考下。
    2010-03-03
  • Javascript点击按钮随机改变数字与其颜色

    Javascript点击按钮随机改变数字与其颜色

    这篇文章主要介绍了Javascript点击按钮随机改变数字和其字体的颜色,实现后的效果很不错,具有一定的参考价值,有需要的可以参考借鉴,下面来一起看看。
    2016-09-09
  • nodejs入门详解(多篇文章结合)

    nodejs入门详解(多篇文章结合)

    Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始。比较独特的是,Node.js会假设你是在POSIX环境下运行它Linux 或 Mac OS X
    2012-03-03
  • javascript常用功能汇总

    javascript常用功能汇总

    本文给大家总结了12个javascript常用的基本功能,十分的实用,这里推荐给大家,需要的朋友可以参考下
    2015-07-07

最新评论