JavaScript 中的FileReader对象(实现上传图片预览)

1FileReader对象简介

1.检测浏览器对FileReader的支持

if(window.FileReader) {

var fr = new FileReader();

// add your code here

}

else {

alert("Not supported by your browser!");

}

调用FileReader对象的方法

FileReader 的实例拥有 4 个方法,其中 3 个用以读取文件,另一个用来中断读取。下面的表格列出了这些方法以及他们的参数和功能,

需要注意的是 ,无论读取成功或失败,方法并不会返回读取结果,这一结果存储在 result属性中。


方法名


参数


描述


abort


none


中断读取


readAsBinaryString


file


将文件读取为二进制码


readAsDataURL


file


将文件读取为 DataURL


readAsText


file, [encoding]


将文件读取为文本

readAsText该方法有两个参数,其中第二个参数是文本的编码方式,默认值为 UTF-8。这个方法非常容易理解,将文件以文本方式读取,读取的结果即是这个文本文件中的内容。

readAsBinaryString该方法将文件读取为二进制字符串,通常我们将它传送到后端,后端可以通过这段字符串存储文件。

readAsDataURL这是例子程序中用到的方法,该方法将文件读取为一段以 data: 开头的字符串,这段字符串的实质就是 Data URL,Data URL是一种将小文件直接嵌入文档的方案。这里的小文件通常是指图像与 html 等格式的文件。(其中base64的方式就是由此来获得的。。)

2. FileReader处理事件简介

FileReader 包含了一套完整的事件模型,用于捕获读取文件时的状态,下面这个表格归纳了这些事件。


事件


描述


onabort


中断时触发


onerror


出错时触发


onload


文件读取成功完成时触发


onloadend


读取完成触发,无论成功或失败


onloadstart


读取开始时触发


onprogress


读取中

文件一旦开始读取,无论成功或失败,实例的 result 属性都会被填充。如果读取失败,则 result 的值为 null ,否则即是读取的结果,绝大多数的程序都会在成功读取文件的时候,抓取这个值。

fr.onload = function() {

this.result;

};

例子1:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>FileReader</title>

</head>

<body>

<p>

<label>请选择一个文件:</label>

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

<input
type="button" value="读取图像" onclick="readAsDataURL()" />

<input
type="button" value="读取二进制数据" onclick="readAsBinaryString()" />

<input
type="button" value="读取文本文件" onclick="readAsText()" />

</p>

<div id="result" name="result"></div>

</body>

</html>

<script type="text/javascript">

var result=document.getElementById("result");

var file=document.getElementById("file");

//判断浏览器是否支持FileReader接口

if(typeof FileReader == ‘undefined‘){

result.InnerHTML="<p>你的浏览器不支持FileReader接口!</p>";

//使选择控件不可操作

file.setAttribute("disabled","disabled");

}

function readAsDataURL(){

//检验是否为图像文件

var file = document.getElementById("file").files[0];

if(!/image\/\w+/.test(file.type)){

alert("看清楚,这个需要图片!");

return false;

}

var reader = new FileReader();

//将文件以Data URL形式读入页面

reader.readAsDataURL(file);

reader.onload=function(e){

var
result=document.getElementById("result");

//显示文件

result.innerHTML=‘<img
src="‘ + this.result +‘"
/>‘;

}

}

function readAsBinaryString(){

var file = document.getElementById("file").files[0];

var reader = new FileReader();

//将文件以二进制形式读入页面

reader.readAsBinaryString(file);

reader.onload=function(f){

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(f){

var result=document.getElementById("result");

//显示文件

result.innerHTML=this.result;

}

}

</script>

3 、使用jsFileReader对象实现上传图片时的图片预览功能

<!DOCTYPE html>

<html>

<head>

<meta
 name="viewport"  content="width=device-width,initial-scale=1,
user-scalable=no">

<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />

<meta name="format-detection"
content="telephone=no">

<title>test</title>

<script>

    //选择图片时预览功能

    function imageshow(source){

var file =
source.files[0];

var imageid = source.id;

if (window.FileReader) {

var fr = new FileReader();

fr.onloadend = function(e)
{

document.getElementById("portrait"+imageid).src =
e.target.result;

};

fr.readAsDataURL(file);

}

document.getElementById("image"+imageid).style.display="none";

document.getElementById("show"+imageid).style.display="block";

      }

</script>

</head>

<body>

<div >

<div
id="image1" >

        <p>上传截图</p>

<input
type="file" name="screenshot1" id="1"
onchange="imageshow(this)"/>

</div>

    <div
id="show1" style="display:none;">

      <img  src=""
id="portrait1" width="100" height="70">

    </div>

    <div
id="image2">

<p>上传截图</p>

<input
type="file" name="screenshot2" id="2"
onchange="imageshow(this)"/>

</div>

    <div id="show2"
style="display:none;">

      <img  src=""
id="portrait2" width="100" height="70">

   </div>

<div
id="image3">

<p>上传截图</p>

<input
type="file" name="screenshot3" id="3"
onchange="imageshow(this)"/>

</div>

  <div id="show3"
style="display:none;">

      <img  src="" id="portrait3"
width="100" height="70" >

    </div>

</div>

</body>

</html>

参考原文:http://www.cnblogs.com/faith3/p/6371477.html

时间: 2024-12-26 01:47:03

JavaScript 中的FileReader对象(实现上传图片预览)的相关文章

使用FileReader实现前端图片预览

在FileReader出现之前,前端的图片预览是这样实现的:把本地图片上传到服务器,服务器把图片地址返回,并把它替换到图片元素的src属性. 这种方法的缺点是:必须要先把图片上传到服务器.那么问题来了,如果上传的图片很大,而网速又很慢,这就需要等待很久预览图片才会显示出来了,而且,如果用户预览图片后发现不太满意,想重新选择一张图片,这时候还要把已经上传到服务器上的图片给删除掉. 自从有了HTML5的FileReader对象以后,预览图片变得简单多了,不再需要后台的配合,并且JS操作本地文件已经成

JavaScript实现简单的前端上传图片预览

JavaScript实现简单的前端上传图片预览 <div class="file_upload"> <div id="portrait"></div> <input type="file" name="" id="" onchange="showPerview(this)"> </div> <script type=&qu

在JavaScript中重写jQuery对象的方法

jQuery是一个很好的类库,它给我们解决了很多的客户端编程,任何东西都不是万能的,当它不能满足我们的需求时我们需要对它进行重写,同时也不要影响其原有的功能或者修改其原有的功能:我现在的web应用程序大多数时候的数据交互都是通过Ajax来完成的,这样就可以将一些隐藏字段的数据保存在HTML标签的属性中,使HTML标签的代码量减少,如:ID,Timestamp等等,这些不需要用户输入但又不得不提交的字段,通过表单提交的做法是 <input name="ID" value="

JavaScript中的String对象

String对象提供的方法用于处理字符串及字符. 常用的一些方法: charAt(index):返回字符串中index处的字符. indexOf(searchValue,[fromIndex]):该方法在字符串中寻找第一次出现的searchValue.如果给定了fromIndex,则从字符串内该位置开始搜索,当searchValue找到后,返回该串第一个字符的位置. lastIndexOf(searchValue,[fromIndex]):从字符串的尾部向前搜索searchValue,并报告找到

JavaScript中创建字典对象(dictionary)实例

这篇文章主要介绍了JavaScript中创建字典对象(dictionary)实例,本文直接给出了实现的源码,并给出了使用示例,需要的朋友可以参考下 对于JavaScript来说,其自身的Array对象仅仅是个数组,无法提供通过关键字来获取保存的数据,jQuery源码中提供了一种非常好的方式来解决这个问题,先看一下源码: 复制代码代码如下: function createCache() { var keys = []; function cache(key, value) {  // Use (k

JavaScript中的Math对象

Math对象中提供的计算功能执行起来比你在代码中写的js要快得多,这是它的一个很好的优点. 属性: 属性 说明 Math.E 即常量e的值 Math.LN10 ln10 Math.LN2 ln2 Math.LOG2E 2为底e的对数 Math.LOG10E 10为底e的对数 Math.PI π Math.SQRT1_2 1/2的平方根 Math.SQRT2  2的平方根 方法: Math.min():求最小值 Math.max():求最大值 Math.max(1,2,3,4,5) // 5 Ma

JavaScript中的事件对象

JavaScript中的事件对象 JavaScript中的事件对象是非常重要的,恐怕是我们在项目中使用的最多的了.在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含这所有与事件有关的信息.下面将会讲到DOM中的事件对象.IE中的事件对象以及跨浏览器的事件对象三个部分. 对于事件处理程序,大家可以看我的博文<JavaScript中的五种事件处理程序>. 第一部分:DOM事件对象 兼容DOM的浏览器会将一个event对象传入到事件处理程序中,无论是HMTL特性.DOM0级还是

javascript中的Array对象的slice()、call()、apply()详解

来51cto已经很多年,就是没怎么写文字,今天来一篇介绍JS的,文章篇幅不是很大,大部分内容是我参考了别人的博客后经过自己理解,自己整理的.方便自己以后回顾知识.文中涉及到javascript中的Array对象的slice().call().apply(); slice()方法,在我之前做的项目中,有两种数据类型下用到过.第一种是string类型的,还有一种是Array对象: string对象的slice(): 定义和用法 slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部

JavaScript中通过arguments对象实现对象的重载

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> /* *1.js 中不存在函数的重载 2.js函数定义时候的形参个数,和执行时候时,传递的实参的个数可以不一样. 3.js执行时候,会将真实的参数,封