Web API接口 FileReader学习笔记

Posted Dragon_GL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web API接口 FileReader学习笔记相关的知识,希望对你有一定的参考价值。

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

一、介绍

FileReader接口的方法

FileReader接口有4个方法,其中3个用来读取文件,另一个用来中断读取。无论读取成功或失败,方法并不会返回读取结果,这一结果存储在result属性中。

FileReader接口事件

FileReader接口包含了一套完整的事件模型,用于捕获读取文件时的状态;

属性

状态常量


二、使用

下面是几个实例,第一个演示了三种不同读取图片文件的方法,第二个实例其实是第一个实例中将文件读取为data url的翻版;最后一个实例,是对不支持FileReader对象的浏览器的兼容性扩展方法,即针对IE10以下的浏览器,我们通过使用滤镜来兼容旧版本的IE;

实例-1:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div>
    <label for="">请选择一个图片文件</label>
    <input type="file" id="file" />
    <input type="button" value="读取图片" onclick="readAsDataURL()" />
    <input type="button" value="读取二进制数据" onclick="readAsBinaryString()" />
    <input type="button" value="读取文本文件" onclick="readAsText()" />
</div>
<div id="result" name="result"></div>

<script type="text/javascript">
    var result = document.getElementById("result");
    var file = document.getElementById("file");

    //判断浏览器是否支持FileReader接口
    if(typeof FileReader == 'undefined')
        result.InnerHTML="<p>你的浏览器不支持FileReader接口!</p>";
        // alert('你的浏览器不支持FileReader接口!')
        // 并把选择控件设置成不可操作
        file.setAttribute("disabled", "disabled");
    

    // 将文件读取为DataURL
    function readAsDataURL()
        // 检验是否为图像文件
        var file = document.getElementById("file").files[0];
        if(!/image\\/\\w+/.test(file.type))
            alert("看清楚,这个需要图片!");
            return false;
        

        var reader = new FileReader();      // 实例化一个FileReader接口
        reader.readAsDataURL(file);     // 调用FileReader接口的readAsDataURl方法,将文件以Data URL形式读入页面
        reader.onload = function(e)      // 绑定onload事件,当读取完成时触发
            var result=document.getElementById("result");
            //显示文件
            result.innerHTML='<img src="' + this.result +'" alt="" />';
        
    

    // 将文件读取为二进制编码
    function readAsBinaryString()
        var file = document.getElementById("file").files[0];

        var reader = new FileReader();
        reader.readAsBinaryString(file);        // 将文件以二进制形式读入页面
        reader.onload = function(e)
            var result = document.getElementById("result");
            result.innerHTML = this.result;     // 显示选中的文件
        
    

    // 将文件读取为文本
    function readAsText()
        var file = document.getElementById("file").files[0];

        var reader = new FileReader();
        reader.readAsText(file);        // 将文件以文本形式读入页面
        reader.onload = function(e)
            var result = document.getElementById("result");
            result.innerHTML=this.result;   // 显示文件
        
    
</script>

</body>
</html>

运行截图:


实例-2:
在线演示-demo

<!doctype html>
<html>
<head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
    <title>Image preview example</title>
    <script type="text/javascript">
            oFReader = new FileReader(), rFilter = /^(?:image\\/bmp|image\\/cis\\-cod|image\\/gif|image\\/ief|image\\/jpeg|image\\/jpeg|image\\/jpeg|image\\/pipeg|image\\/png|image\\/svg\\+xml|image\\/tiff|image\\/x\\-cmu\\-raster|image\\/x\\-cmx|image\\/x\\-icon|image\\/x\\-portable\\-anymap|image\\/x\\-portable\\-bitmap|image\\/x\\-portable\\-graymap|image\\/x\\-portable\\-pixmap|image\\/x\\-rgb|image\\/x\\-xbitmap|image\\/x\\-xpixmap|image\\/x\\-xwindowdump)$/i;

            oFReader.onload = function (oFREvent) 
                document.getElementById("uploadPreview").src = oFREvent.target.result;
            ;

            function loadImageFile() 
                if (document.getElementById("uploadImage").files.length === 0)  return; 
                var oFile = document.getElementById("uploadImage").files[0];
                if (!rFilter.test(oFile.type))  alert("You must select a valid image file!"); return; 
                oFReader.readAsDataURL(oFile);
            
    </script>
</head>

<body onload="loadImageFile();">
<form name="uploadForm">
    <table>
        <tbody>
        <tr>
            <td><img id="uploadPreview" style="width: 100px; height: 100px;" src="data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Csvg%20width%3D%22153%22%20height%3D%22153%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%0A%20%3Cg%3E%0A%20%20%3Ctitle%3ENo%20image%3C/title%3E%0A%20%20%3Crect%20id%3D%22externRect%22%20height%3D%22150%22%20width%3D%22150%22%20y%3D%221.5%22%20x%3D%221.500024%22%20stroke-width%3D%223%22%20stroke%3D%22%23666666%22%20fill%3D%22%23e1e1e1%22/%3E%0A%20%20%3Ctext%20transform%3D%22matrix%286.66667%2C%200%2C%200%2C%206.66667%2C%20-960.5%2C%20-1099.33%29%22%20xml%3Aspace%3D%22preserve%22%20text-anchor%3D%22middle%22%20font-family%3D%22Fantasy%22%20font-size%3D%2214%22%20id%3D%22questionMark%22%20y%3D%22181.249569%22%20x%3D%22155.549819%22%20stroke-width%3D%220%22%20stroke%3D%22%23666666%22%20fill%3D%22%23000000%22%3E%3F%3C/text%3E%0A%20%3C/g%3E%0A%3C/svg%3E" alt="Image preview" /></td>
            <td><input id="uploadImage" type="file" name="myPhoto" onchange="loadImageFile();" /></td>
        </tr>
        </tbody>
    </table>

    <p><input type="submit" value="Send" /></p>
</form>
</body>
</html>

运行截图:

注: IE10以下的版本不支持FileReader()构造函数, 不过可以利用滤镜来兼容旧版本的IE

实例-3: 兼容IE的图片本地预览.
在线演示——Demo

<!doctype html>
<html>
<head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
    <title>Image preview example</title>
    <style type="text/css">
        #imagePreview 
            width: 160px;
            height: 120px;
            float: left;
            filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);
        
    </style>
</head>

<body>
    <div id="imagePreview"></div>

    <form name="uploadForm">
        <p>
            <input id="imageInput" type="file" name="myPhoto" onchange="loadImageFile();" /><br />
            <input type="submit" value="Send" />
        </p>
    </form>

    <script type="text/javascript">
        var loadImageFile = (function () 
            if (window.FileReader) 
                var oPreviewImg = null, oFReader = new window.FileReader(),
                    rFilter = /^(?:image\\/bmp|image\\/cis\\-cod|image\\/gif|image\\/ief|image\\/jpeg|image\\/jpeg|image\\/jpeg|image\\/pipeg|image\\/png|image\\/svg\\+xml|image\\/tiff|image\\/x\\-cmu\\-raster|image\\/x\\-cmx|image\\/x\\-icon|image\\/x\\-portable\\-anymap|image\\/x\\-portable\\-bitmap|image\\/x\\-portable\\-graymap|image\\/x\\-portable\\-pixmap|image\\/x\\-rgb|image\\/x\\-xbitmap|image\\/x\\-xpixmap|image\\/x\\-xwindowdump)$/i;

                oFReader.onload = function (oFREvent) 
                    if (!oPreviewImg) 
                        var newPreview = document.getElementById("imagePreview");
                        oPreviewImg = new Image();
                        oPreviewImg.style.width = (newPreview.offsetWidth).toString() + "px";
                        oPreviewImg.style.height = (newPreview.offsetHeight).toString() + "px";
                        newPreview.appendChild(oPreviewImg);
                    
                    oPreviewImg.src = oFREvent.target.result;
                ;

                return function () 
                    var aFiles = document.getElementById("imageInput").files;
                    if (aFiles.length === 0)  return; 
                    if (!rFilter.test(aFiles[0].type))  alert("You must select a valid image file!"); return; 
                    oFReader.readAsDataURL(aFiles[0]);
                

            
            if (navigator.appName === "Microsoft Internet Explorer") 
                return function () 
                    document.getElementById("imagePreview").filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = document.getElementById("imageInput").value;

                
            
        )();
    </script>
</body>
</html>

运行截图:

参考阅读:

以上是关于Web API接口 FileReader学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

4.HTML5新特性:拖拽API与本地数据库

[原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)

使用FileReader接口读取文件内容

H5学习系列之文件读取API--本文转自http://blog.csdn.net/jackfrued/article/details/8967667

JMeter学习笔记15-如何用JMeter做接口测试

Flask 学习笔记-第十五章-应用编程接口