zoukankan      html  css  js  c++  java
  • FileReader

    原文:https://blog.csdn.net/mapbar_front/article/details/78632928 

    FileReader是前端进行文件处理的一个重要的Api,特别是在对图片的处理上,如果你想知道图片的处理原理,你就永远不可能绕过它。

    文件处理是一系列的流程,每一步我们都需要知道,自己能做什么,自己做了什么。

    第一步,获取文件
    前端中,获取文件必须使用input标签。

    <input id='file' type='file' />

    处理这个文件,必须要用代码的方式,体现出来,让你能用代码操作它。这里主要是使用input标签的onchange事件。

    var file = document.getELementById('file');
    file.onchange = function(e){
        var files = e.target.files;
        //这个files就是获取的file文件的一个数组。之后你可以使用任何方式来操作它。
    }

    关于file的小知识:前端在读取到files数组之后,可以对得到的文件一些属性进行读取。这些属性分别是:name、size、type、lastModifiedDate。

    一个特别重要的点就是判断图片的大小,根据文件的大小进行后续操作。

    var file = files[0];//比如这个file是图片
    if(file.size > 5000){
        //处理压缩操作
    }

    第二步,读取文件
    1、读取文件,主要使用的是FileReader类。它提供了几个方法。

    readAsText(file, encoding); 
    以纯文本形式读取文件,读取到的文本保存在result属性中。第二个参数代表编码格式。

    readAsDataUrl(file); 
    读取文件并且将文件以数据URI的形式保存在result属性中。

    readAsBinaryString(file); 
    读取文件并且把文件以字符串保存在result属性中。

    readAsArrayBuffer(file); 
    读取文件并且将一个包含文件内容的ArrayBuffer保存咋result属性中。

    2、文件读取的过程是异步操作,在这个过程中提供了三个事件。progress、error、load事件。

    progress-每隔50ms左右,会触发一次progress事件。

    error-在无法读取到文件信息的条件下触发。

    load-在成功加载后就会触发。

    第三步,相关源码
    html: 
    分别用input标签获取文件,span获取文件的进度条,div来查看获取的数据源。

    <input id="file" type="file" οnchange="fileChange" />
    进度:<span id="progress"></span>
    <div id="box">
    
    </div>

    js代码:

    //获取页面元素对象
    var file = document.getElementById('file');
    var output = document.getElementById('box');
    var progress = document.getElementById('progress');
    //onchange事件
    file.onchange = function (e) {
        console.log(e);
        var files = e.target.files;
        var file0 = files[0];
        console.log(file0.size,file0.name,file0.type);
        //fileReader对象
        var fileReader = new FileReader();
        var type = 'default';
        //判断文件类型
        if(/image/.test(file0.type)){
            fileReader.readAsDataURL(file0);
            type = 'image';
        } else {
            fileReader.readAsText(file0,'utf-8');
            type = 'text';
        }
        //文件加载出错
        fileReader.onerror = function () {
            output.innerHTML = 'Could not read file, error code is ' + fileReader.error.code;
        };
        //加载成功后
       fileReader.onload = function () {
            console.log('onload')
            var html = '';
            switch (type) {
                case 'image':
                   html = '<img src="' + fileReader.result +'">';
                   break;
                case 'text':
                    html = fileReader.result;
                    break;
            }
            output.innerHTML = html;
        };
        //进度条进度
        fileReader.onprogress = function (event) {
            if(event.lengthComputable) {
                progress.innerHTML = event.loaded + '/' + event.total;
            }
        }
    }
  • 相关阅读:
    django ---解决跨域的问题
    python-isinstance函数
    python每日一学-os模块常用函数
    调用父类方法super
    fiddler小运用-断点
    劝告
    Django model字段
    Jenkins自动化部署前端
    解决react使用antd table组件固定表头后,表头和表体列不对齐以及配置fixed固定左右侧后行高度不对齐
    高德地图判断点的位置是否在浏览器可视区域内
  • 原文地址:https://www.cnblogs.com/TongGeGe/p/12540020.html
Copyright © 2011-2022 走看看