File Reader文件操作

Posted eyes++

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了File Reader文件操作相关的知识,希望对你有一定的参考价值。

    文件File对象
    该对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用File或Blob对象指定要读取的文件或数据。
    其中File对象可以是来自用户在一个<input/>元素上选择文件后返回的FileList对象,也可以是来自拖拽操作生成的DataTransfer对象,
    还可以是来自一个htmlCanvasElement上执行 mozGetAsFile()方法后返回的结果;
    Blob对象表示一个不可变、原始数据的类文件对象,它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream来用于数据操作,
    Blob表示的不一定是javascript原生格式的数据,File接口基于Blob,继承了Blob的功能并将其扩展使其支持用户系统上的文件。
    操作:
        创建一个FileReader对象
            var fReader = new FileReader();
        方法:
            abort()  终止该读取操作
            开始读取指定的Blob对象或File对象中的内容
            readAsDataURL()  URL格式的字符串表示的内容
            readAsArrayBuffer()  ArrayBuffer对象表示的内容
            readAsBinaryString()  原始二进制数据
            readAsText()  字符串以表示的内容
        属性:
            error : 在读取文件时发生的错误
            readyState : 表明FileReader对象的当前状态
            result : 读取到的文件内容
            onabort : 当读取操作被终止时调用
            onerror : 当读取操作发生错误时调用
            onload : 当读取操作成功完成时调用
            onloadend : 当读取操作完成时调用,不管是成功或者失败,该处理程序在onload或onerror之后调用
            onloadstart : 当读取操作将要开始之前调用
            onprogress : 在读取数据过程中周期性调用

以下是基本操作代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
  
    <input type="file" onchange="getInfo(this)">
    <script>
        function getInfo(node){
            console.log(node.files[0]);

            // 创建一个FileReader对象
            var fr = new FileReader();

            // 读取文件
            fr.readAsText(node.files[0]);

            // 监听读取成功
            fr.onload = function(e){
                console.log(e);
                // 用选择的格式表示该文件
                console.log(e.target.result);
            }
        }
    </script>
</body>
</html>

展示其中1.txt内容为:
展示下面做一个多图片文件读取显示案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="file" multiple id="myfile" onchange="loadfile()">
    <div id="content"></div>
    <script>
        var myfile = document.getElementById("myfile");
        var fReader = new FileReader();
        var con = document.getElementById('content');
        var n = 0;  // 文件个数
        var len;  // 文件的个数

        // 需要等前一个文件读完才能读下一个,因此不能直接for循环读取所有文件
        function loadfile(){
            // 文件提交的时候,设置读取文件的个数
            len = myfile.files.length;
            fReader.readAsDataURL(myfile.files[0]);
        }

        fReader.onload = function(e){
            // 以图片形式放到div中
            var str = '<img src="' + e.target.result + '">';
            con.innerHTML += str;
            n++;
            if(n < len){
                readfile(n);
            }
        }

        function readfile(n){
            fReader.readAsDataURL(myfile.files[n]);
        }
    </script>
</body>
</html>

展示 在我们的页面当中,经常会上传一些文件,同时在上传之前还需要立即展示以下文件内容,使用FileReader API来读取本地文件,可以保存在本地,可快速展示,例如:上传头像,提交完图片立刻显示,还可以做裁剪,或拖拽文件,预览文件内容。
拓展:window.URL.createObjectURL()方法可以返回一个文件对象的url

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="file" multiple id="myfile" onchange="loadfile()">
    <div id="content"></div>
    <script>
        var myfile = document.getElementById("myfile");
        var con = document.getElementById('content');

        function loadfile(){
            // 返回url数据结果
            var url = window.URL.createObjectURL(myfile.files[0]);
            // 放到页面上
            var str = '<img src="' + url + '">';
            con.innerHTML += str;
        }
    </script>
</body>
</html>

展示可见用这种方法图片返回的是url地址,之前读取文件的是返回base64编码,见下:
展示

以上是关于File Reader文件操作的主要内容,如果未能解决你的问题,请参考以下文章

JS - File Reader API 获取图像文件大小和尺寸

java IO文件读写例子(OutputStream,InputStream,Writer,Reader)

csv.reader 处理中文字符乱码

文件file对象转换为base64格式数据

使用FileWriter把文件写入 ,使用 File Reader把文件读出 到控制台

Java IO 字符流 Writer 和 Reader