zoukankan      html  css  js  c++  java
  • FileReader:读取本地图片文件并显示

     

    本文通过实例讲解如何使用支持FileReader浏览器的用户将能够通过一个file input选择一个图片文件,并不经过上传而直接将图片显示在页面中。

    要想在页面上显示本地图片,以前我们通常的做法是将选择的图片文件上传至后端服务器,后端对其进行存储,再将图片的URL返回到前端,前端通过这个URL来显示图片。而HTML5的FileReader接口支持本地预览,FileReader接口主要是将文件读入内存,并提供相应的方法,来读取文件中的数据,当然就能显示本地图片不需上传了。目前高级浏览器实现了FileReader接口,所以像IE6这些老东西直接滚粗。

    在此之前,我们有文章:HTML5应用之文件拖拽上传,看完这篇文章后,你可以尝试制作一个拖拽和显示图片、编辑图片、最后上传的功能。

    HTML

    第一步创建html,我们在页面中放置一个文件选择的input#file_input和一个显示结果的div#result。

    <p
       <label>请选择一个图像文件:</label> 
       <input type="file" id="file_input" /> 
    </p>  
    <div id="result"></div> 

    Javascript

    通过getElementById获取节点,判断浏览器的兼容性,对于不支持FileReader接口的浏览器将给出一个提示并禁用input,否则监听input的change事件。

    var result = document.getElementById("result"); 
    var input = document.getElementById("file_input"); 
     
    if(typeof FileReader==='undefined')
        result.innerHTML = "抱歉,你的浏览器不支持 FileReader"; 
        input.setAttribute('disabled','disabled'); 
    }else
        input.addEventListener('change',readFile,false); 

    然后,当file_input的change事件触发时,调用函数readFile()。在readFile中,我们首先获取file对象,然后通过file的type属性来检测文件类型,我们当然只允许选择图像类型的文件,然后我们new一个FileReader实例,并调用readAsDataURL方法来读取选中的图像文件,最后在onload事件中,获取到成功读取的文件内容,并以插入一个img节点的方式显示选中的图片。

    function readFile()
        var file = this.files[0]; 
        if(!/image/w+/.test(file.type))
            alert("文件必须为图片!"); 
            return false; 
        
        var reader = new FileReader(); 
        reader.readAsDataURL(file); 
        reader.onload = function(e)
            result.innerHTML = '<img src="'+this.result+'" alt=""/>' 
        

    怎么样,可以看来我们并没有和后台交互就能将本地图片显示在页面中,最后我们来了解下FileReader的方法和事件。

    FileReader的方法和事件

    参数/事件 描述
    方法
    abort 中断读取
    readAsText(file, [encoding]) 将文件读取为文本
    该方法有两个参数,其中第二个参数是文本的编码方式,默认值为 UTF-8。这个方法非常容易理解,将文件以文本方式读取,读取的结果即是这个文本文件中的内容。
    readAsBinaryString(file) 将文件读取二进制码
    通常我们将它传送到后端,后端可以通过这段字符串存储文件
    readAsDataURL(file) 将文件读取为DataURL
    将文件读取为一串Data URL字符串,将小文件以一种特殊格式的URL地址直接读入页面。小文件指图像与html等格式的文件。
    事件
    onabort 数据读取中断时触发
    onerror 数据读取出错时触发
    onloadstart 数据读取开始时触发
    onload 数据读取成功完成时触发
    onloadend 数据读取完成时触发,无论成功失败
    声明:本文来源于helloweba.com 原文链接:http://www.helloweba.com/view-blog-224.html
  • 相关阅读:
    【洛谷】P1303 A*B Problem(高精度乘法模板)
    快速幂
    【洛谷】P1601 A+B Problem 高精(高精度加法模板)
    进制转换
    【洛谷】P1551 亲戚(并查集模板)
    求最大公约数的两种方法
    快速排序
    异或交换两个数
    数字字符串互相转换的三种方法
    Hello world(我来啦)
  • 原文地址:https://www.cnblogs.com/henry-xu/p/6484650.html
Copyright © 2011-2022 走看看