• 前端FileReader读取文件信息


    FileReader

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

    FileReader类型实现的是一种异步文件获取机制。

    FileReader有一下几种方法

    • FileReader.abort()
      中止读取操作。在返回时,readyState属性为DONE。
    • FileReader.readAsArrayBuffer()
      开始读取指定的 Blob中的内容, 一旦完成, result 属性中保存的将是被读取文件的 ArrayBuffer 数据对象.
    • FileReader.readAsBinaryString()
      开始读取指定的Blob中的内容。一旦完成,result属性中将包含所读取文件的原始二进制数据。
    • FileReader.readAsDataURL()
      开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个data: URL格式的Base64字符串以表示所读取文件的内容。
    • FileReader.readAsText()
      开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个字符串以表示所读取的文件内容。

    FileReader()返回一个新构造的FileReader。

    想要创建一个FileReader对象,很简单,如下:

    const reader = new FileReader();
    

    事件处理

    事件 发生时机
    FileReader.onabort 处理abort,该事件在读取操作被中断时触发
    FileReader.onerror 处理error,该事件在读取操作发生错误时触发。
    FileReader.onload 该事件在读取操作完成时触发
    FileReader.onloadstart 该事件在读取操作开始时触发
    FileReader.onloadend 该事件在读取操作结束时(要么成功,要么失败)触发。
    FileReader.onprogress 该事件在读取Blob时触发。

    其中每过50ms左右,就会触发一次progress事件,可以获取和xhr的progress相同的参数:lengthComputable/loaded和total
    由于种种原因无法读取文件会触发error事件

    执行了error事件就不会执行load事件

    读取文本及图片

    通常我们通过input="file"来上传文件

     <input type="file" onchange="onFile(event)" />
     
    

    下图时文件file内容:
    屏幕截图 2021-08-02 204039.png

    我们可以获取到文件名、修改时间、大小和文件类型等信息,文件内容也是包含在里面的,不过需要FileReader的读取文件方法才能获取,对于纯文本,我们使用readAsText方法,如下:

      const content = document.getElementsByTagName("input");
      const contentBox = document.getElementsByClassName("contents")[0]
      let files,
          type,
          urlData,
          html
      function onFile(e) {
          console.log(e);
          files = e.target.files
          console.log(files, files[0].type, 'files');
          //FileReader读取文件内容
          var reader = new FileReader();
          if (/image/.test(files[0].type)) {
              reader.readAsDataURL(files[0])
              type = 'image'
          } else {
    
              reader.readAsText(files[0]);
              type = 'text'
          }
          reader.onerror = function () {
              console.log('error');
          }
          reader.onload = function (e) {
              // urlData就是对应的文件内容
              urlData = reader.result;
              
              switch (type) {
                  case 'image':
                      html = `<img src = '${urlData}'  / >`
                      break;
                  case 'text':
                      html = `<p>${urlData}</p>`
              }
              contentBox.innerHTML = html
    
          };
      }
    

    读取图片

    屏幕截图 2021-08-03 105158.png

    可以看到如果是图片,可以将图片文件转换为base64编码,然后哦展示出来

    读取文本

    屏幕截图 2021-08-03 105417.png

    可以看到如果是文本,则以字符串形式读取文本内容

    onprogress

    reader.onprogress = function(e){
          if(e.lengthComputable){
              progress = e.loaded / e.total
          }
          console.log(e, progress);
      }
    

    调用onprogress可以获取当前文件上传信息,如下图:

    屏幕截图 2021-08-03 111038.png

    一般会用于获取上传百分比。

    码字不易,希望大佬指点!

  • 相关阅读:
    iOS TTF文件改变字体
    iOS CoreAnimation 核心动画
    iOS no visible @interface for 'UIButton' declares the selector errors
    iOS 如何通过CocoaPods添加第三方框架
    iOS AVAudioPlayer播放音乐
    iOS 一些常用代码的总结
    iOS 基础
    qworker 实例
    delphi RTTI 反射技术
    delphi IOUtils单元 处理文件路径相关
  • 原文地址:https://www.cnblogs.com/wsjaizlp/p/15093562.html
Copyright © 2020-2023  润新知