zoukankan      html  css  js  c++  java
  • 第四篇:前端读取文件 | FileReader 对象及其属性

    这篇文章是这个分类下的第四篇随笔了,之前可能对文件上传还不是很清晰,写到这篇,也就明白套路了。

    ps:这就是写博客的好处。

    第一步:定义一个input标签type="file"

    觉得 <input/> 样式难看又难改的,请看一下这个分类下的第三篇随笔

    <input type="file" onChange={(ev) => this.getFiles(ev.target.files)} />
    <span id="textInner"></span>

    第二步:定义一个 getFiles 的方法,读取上传的文件。

      getFiles = (files) => {
        const textInner = document.getElementById("textInner"); // 获取一个标签,把读取的内容插进去
        if (files.length) {
          var file = files[0];
          var reader = new FileReader(); // new一个FileReader实例
          console.log(reader, file)
          if (/text+/.test(file.type)) { // 判断文件类型,是不是text类型
            reader.onload = function () {
              textInner.innerText = this.result
            }
            reader.readAsText(file);
          } else if (/image+/.test(file.type)) { // 判断文件是不是imgage类型
            reader.onload = function () {
              textInner.innerHTML = '<img src="' + this.result + '"/>'
            }
            reader.readAsDataURL(file);
          }
        }
      }

    到这里,读取文件就结束了,下面来了解一下 html5 的 FileReader 对象及其属性

    FileReader接口的方法:

    属性 参数 介绍
    readAsBinaryString file 将文件读取为二进制编码
    readAsText file,[encoding] 将文件读取为文本,其中第二个参数是文本的编码方式,默认值为 UTF-8
    readAsDataURL file 将文件读取为DataURL
    abort 中断读取操作(无论读取成功或失败,方法并不会返回读取结果,这一结果存储在result属性中)

    相关事件:

    onabort                               中断
    onerror                               出错
    onloadstart                       开始
    onprogress                         正在读取
    onload                                成功读取
    onloadend                          读取完成,无论成功失败

    文件一旦开始读取,无论成功或失败,实例的 result 属性都会被填充。如果读取失败,则 result 的值为 null ,否则即是读取的结果。

    如果读取文件过大的话fileReader允许分段读取文件;

    var blob_file;
    if(file.webkitSlice) {  //chrome
            blob_file= file.webkitSlice(start, end + 1, 'text/plain;charset=UTF-8');
    } else if(file.mozSlice) { //Firefox
            blob_file= file.mozSlice(start, end + 1, 'text/plain;charset=UTF-8');
    }

    顺便唠叨一下base64编码的优缺点:

    优点:

      1.减少了http请求。

      2.没有跨域的问题。

      3.直接放在路径里不需要清理缓存。

    缺点:

      1.IE6/7不支持(不过这个问题不大);

      2.base64本质上是将图片以二进制的字母展示,字符量过大无形中增加了css/html文件的大小;


    申明:此文章只供本人学习用,不做任何商业目的,部分内容来自互联网。

  • 相关阅读:
    RBAC-基于角色的访问控制
    django缓存机制
    drf JWT认证
    drf自动生成接口文档
    drf多表断表操作
    drf过滤排序分页异常处理
    drf认证权限频率
    drf路由组件
    drf视图组件
    drf请求与响应
  • 原文地址:https://www.cnblogs.com/MrZhujl/p/13500919.html
Copyright © 2011-2022 走看看