HTML5 FileReader API 测试(一)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

参考文章

html5之FileReader接口

http://zhangyaochun.iteye.com/blog/1487900

1、FileReader接口的作用

 

    用来把文件读入内存,并且读取文件中的数据。

 

2、支持情况

 

    FF3.6+Chrome6+

 

 

Js代码    收藏代码
  1. /*检测方式*/  
  2. if(typeof FileReader == 'undefined'){  
  3.      //不支持  
  4. }else{  
  5.     //支持  
  6. }  
 

3、FileReader接口的方法

 

 

  • readAsBinaryString(file)               ------ 将文件读取二进制码
          通常我们将它传送到后端,后端可以通过这段字符串存储文件
  • readAsText(file,[encoding])          ------ 将文件读取文本
          第二个参数是 文本的编码方式,默认UTF-8
  • readAsDataURL(file)                     ------ 将文件读取为DataURL
将文件读取为一串Data URL字符串,将小文件以一种特殊格式的URL地址直接读入页面。
小文件指图像与html等格式的文件
  • abort()                                         ------- 中断读取操作

 

 

4、FileReader接口的事件

 

 

  • onabort             ---------数据读取中断时触发
  • onerror              ---------数据读取出错时触发
  • onloadstart        --------数据读取开始时触发
  • onprocess          --------数据读取中
  • onload               --------数据读取成功完成时触发
  • onloadend         --------数据读取完成时触发,无论成功失败

 

 

http://lucifinilhades.iteye.com/blog/1197826

 

HTML5文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-cn" dir="ltr"><head><meta charset="UTF-8" /><title>HTML5 Filesystem API Demo</title><script type="text/javascript" src="../js/jquery-1.7.1.min.js"></script><script type="text/javascript" src="../js/fileReader.js"></script></head><body><header><h1>HTML5文件API示例</h1></header><section><form id="filelist_sample" name="filelist_sample"><label for="selectFiles">请选择文件(可多选):</label><input type="file" name="selectFiles" id="selectFiles" multiple="multiple"/>  <button type="button" id="showInfoBtn" name="showInfoBtn">显示文件信息</button><br/>  <button type="button" id="txtBtn" name="txtBtn">测试 readAsText</button>  <button type="button" id="binBtn" name="binBtn">测试 readAsBinaryString</button>  <button type="button" id="urlBtn" name="urlBtn">测试 readAsDataURL</button>  </form><div id="fileContent"></div><footer><table id="info"><caption>文件信息</caption><thead><tr><th>ID</th><th>文件名</th><th>文件类型</th><th>文件大小(KB)</th><th>最后修改日期</th></tr></thead><tfoot><tr><th>合计:</th><th><meter id="count" value="0" min="0" max="10">0</meter></th>  <th></th>  <th><meter id="sum" value="0" min="0" >0</meter></th>  <th><button type="button" id="clearBtn">清除信息</button></th>  </tr></tfoot></table></footer></section><footer><div id="console"></div></footer>  </body>
</html>

 

 

fileReader.js文件如下

//typeof Fileif(typeof FileReader == "undefined") {alert("您的浏览器未实现FileReader接口!");
}//给jQuery提供访问FileList对象的功能
jQuery.fn.files = function() {return this[0].files;
};//“显示文件信息”按钮的click事件代码
$(function() {$("#showInfoBtn").click(function(event) {$("#clearBtn").click();var fileObjs = $("#selectFiles").files();var sum = 0, count = 1;var tbody = $("<tbody>");for ( var index = 0; index < fileObjs.length; index++) {$("<tr>").append($("<td>").append("<meter>").val(count).text(count)).append($("<td>").text(fileObjs[index].name)).append($("<td>").text(fileObjs[index].type)).append($("<td>").append($("<meter>").val(fileObjs[index].size).text(fileObjs[index].size / 1024))).append($("<td>").text(fileObjs[index].lastModifiedDate)).appendTo(tbody);sum += fileObjs[index].size;count++;}$("td>meter, #sum").attr("max", 5 * 1024 * 1024);$("#info>thead").after(tbody);$("#count").attr("max", "10").val(fileObjs.length).text(fileObjs.length);$("#sum").val(sum).text(sum / 1024);});
});$(function() {$("#clearBtn").click(function(event) {$("#info>tbody, #fileContent, #console").empty();$("#count, #sum").val(0).text(0);});
});//三个按钮的click事件代码
$(function() {$("#txtBtn").click(function(event) {$("#selectFiles").readAsText(handler);//$("#selectFiles").readAsText($("#selectFiles").files(),"UTF-8");});$("#binBtn").click(function(event) {$("#selectFiles").readAsBinaryString(handler);});$("#urlBtn").click(function(event) {$("#selectFiles").readAsDataURL(handler);});
});//传入的事件处理器函数代码var createTag = function(txt) {$("#console").append($("<span>").text(txt).after("<br/>"));};var handler = {load : function(event) {createTag("this is FileReader's onload event.");$("<p>").append(event.target.result).appendTo("#fileContent");},loadStart : function(event) {createTag("this is FileReader's onloadstart event.");},loadEnd : function(event) {createTag("this is FileReader's onloadend event.");},abort : function(event) {createTag("this is FileReader's onabort event.");},error : function(event) {createTag("this is FileReader's onerror event.");},progress : function(event) {createTag("this is FileReader's onprogress event.");}};var getFileReader = function(handler) {var reader = new FileReader();//var reader = FileReader(handler);reader.onloadstart = handler.loadStart;reader.onprogress = handler.progress;reader.onload = handler.load;reader.onloadend = handler.loadEnd;reader.onabort = handler.abort;reader.onerror = handler.error;return reader;};jQuery.fn.readAsText = function(handler, encoding) {if (typeof encoding == "undefined") {encoding = "UTF-8";}var files = this.files();var reader = null;for ( var i = 0; i < files.length; i++) {//alert(files[i].name);reader = getFileReader(files[i]);if (!/text\/\w+/.test(files[i].type)) {reader.onload=createTag("Loading ..." + files[i].name);reader.loadEnd=createTag("Loading have  End!" + files[i].name);} else {reader.onload=createTag("Loading ..." + files[i].name);reader.readAsText(files[i], encoding);alert(reader.result);$("#fileContent").append($("<span>" + files[i].name + "<br>" + reader.result +"<br/>"));reader.loadEnd=createTag("Loading have  End!" + files[i].name);}}return this;
};jQuery.fn.addText= function(txt) {var createTag = function(txt) {$("#console").append($("<span>").text(txt).after("<br/>"));}
};jQuery.fn.readAsBinaryString = function(handler) {var files = this.files();var reader = null;for ( var i = 0; i < files.length; i++) {reader = getFileReader(handler);reader.readAsBinaryString(files[i]);}return this;
};jQuery.fn.readAsDataURL = function(handler) {var files = this.files();var reader = null;var imageHandler = function(event) {$("<img>").attr("src", event.target.result).appendTo("#fileContent");};for ( var i = 0; i < files.length; i++) {reader = getFileReader(handler);if (!/image\/\w+/.test(files[i].type)) {reader.readAsDataURL(files[i]);} else {reader.onload = imageHandler;reader.readAsDataURL(files[i]);}}return this;
};

在不同的浏览器测试效果不同,特别是 测试readAsText

 

 

火狐12.0测试效果最佳

 

Opera 12.00 beta 测试截图

 

Chrome 19测试截图

转载于:https://my.oschina.net/u/559991/blog/60310

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bootstrap模态框居中显示

Bootstrap默认的模态框不是居中显示的&#xff0c;需要稍微修改下源代码&#xff1a; 1、打开源码bootstrap.js&#xff0c;在里面找到如下代码&#xff1a; 2、在上述代码段落下面增加居中的代码即可&#xff1a; //使弹出框居中。。。var $modal_dialog $(this.$element[0]…

Bootstrap模态框显示时有阴影遮罩层

如下图所示&#xff1a; 有遮罩层在&#xff0c;无法进行任何操作&#xff0c;只需修改默认 z-index 属性即可&#xff1a; .modal-backdrop{z-index:0;}

JQuery Datatables 在Bootstrap tab中列名无法对齐的问题

如下图所示&#xff1a; 增加一句代码即可&#xff1a; $(a[data-toggle"tab"]).on(shown.bs.tab, function (e) {//当切换tab时&#xff0c;强制重新计算列宽$.fn.dataTable.tables({ visible: true, api: true }).columns.adjust();});

C# 值类型与引用类型(1)

1. 主要内容 类型的基本概念 值类型深入 引用类型深入 值类型与引用类型的比较及应用 2. 基本概念 C#中&#xff0c;变量是值还是引用仅取决于其数据类型。 C#的基本数据类型都以平台无关的方式来定义&#xff0c;C#的预定义类型并没有内置于语言中&#xff0c;而是内置于.NET …

Bootstrap-select使用说明

背景 Bootstrap-select 是一款基于JQuery的 下拉菜单 插件&#xff0c;支持搜索和多项选择功能&#xff0c;支持Booststrap。 点击这里进入Bootstrap-select中文官方网站 使用效果如下图所示&#xff1a; 常用属性 初始化&#xff1a; <select class"selectpicker…

前端插件——Bootstrap Dual Listbox 简介

背景 Bootstrap Dual Listbox是一款基于Bootstrap的双向select选择框控件&#xff0c;作为对multiple select的扩展&#xff0c;使用起来非常简单&#xff0c;功能也更强大。 参考文章一 参考文章二 使用效果如下图所示&#xff1a; 初始化HTML代码&#xff1a; <div cla…

Fork()概念

对于刚刚接触Unix/Linux操作系统&#xff0c;在Linux下编写多进程的人来说&#xff0c;fork是最难理解的概念之一&#xff1a;它执行一次却返回两个值。 首先我们来看下fork函数的原型&#xff1a; &#xff03;i nclude <sys/types.h> &#xff03;i nclude <unistd.…

Nsis打包exe

2019独角兽企业重金招聘Python工程师标准>>> 这里用nsis的eclipse插件来打包exe。插件地址&#xff1a;http://eclipsensis.sf.net/update 安装完毕之后创建一个java程序&#xff0c;导出一个可执行的jar文件&#xff0c;名字JavaApp.jar。现在开始准备打包制作安装…

借助波音公司打造优秀按单制造(MTO II)管理系统

博主推荐延展咨询资深顾问王晓东文章近些年随着市场竞争的加剧&#xff0c;制造业产业链越来越关注客户的需求&#xff0c;针对客户个性化需求的按单制造&#xff08;MTO II&#xff09;生产模式在我国企业不断得到应用。按单制造&#xff08;MTO II&#xff09;企业在组织生产…

MyEclipes 设置代码自动提示

一、Window ——> Preferences 二、Java ——> Editor ——> Content Assist 三、更改内容为 【.qwertyuiopasdfghjklzxcvbnm 】&#xff0c;完成。

jQuery-input输入框下拉提示层

效果图 代码部分 // JavaScript Document (function($){$.fn.extend({"changeTips":function(value){value $.extend({divTip:""},value)var $this $(this);var indexLi 0;//点击document隐藏下拉层$(document).click(function(event){if($(event.targe…

MyEclipes 2016 CI 6 安装

一、双击安装包&#xff0c;打开&#xff0c;点击“Next” 二、 同意&#xff0c;Next 三、选择安装路径&#xff0c;然后点击Next 四、选择32位或者是64位后&#xff0c;点击Next开始安装。 五、去掉立即运行这个勾&#xff0c;点击完成。 六、找到破解目录文件&#xff0c;全…

WPF:从WPF Diagram Designer Part 1学习控件模板、移动、改变大小和旋转

欢迎转载&#xff0c;转载请注明&#xff1a;转载自周金根 [ http://zhoujg.cnblogs.com/ ] 由于上周主要做了项目组产品架构、给公司新员工培训以及其他会议等事情&#xff0c;在OpenExpressApp对建模支持的初步计划中我列了一些建模任务还没有开展&#xff0c;其中参考部分在…

Ubuntu下安装Gerrit

2019独角兽企业重金招聘Python工程师标准>>> 目标 配置Gerrit使用mysql数据库&#xff08;原因&#xff1a;本人比较熟悉mysql&#xff09; 使用http授权模式&#xff0c;使用apache反向代理。 SMTP使用163的个人邮箱 软件版本 Ubuntu 12.04 Gerrit 2.4.1 Apache 2.…

招几个兄弟和我一起做项目

为什么80%的码农都做不了架构师&#xff1f;>>> 个人名义发表&#xff0c;有事情站内联系。不说太多&#xff0c;反正能学到东西。呵呵。 工作内容&#xff1a; 1 负责项目中相关模块从应用到Framework部分&#xff08;包括Java层和Native层&#xff09;的开发 2 负…

Android系统Recovery工作原理之使用update.zip升级过程分析(二)---u...

2019独角兽企业重金招聘Python工程师标准>>> Android系统Recovery工作原理之使用update.zip升级过程分析&#xff08;二&#xff09;---update.zip差分包问题的解决 在上一篇末尾提到的生成差分包时出现的问题&#xff0c;现已解决&#xff0c;由于最近比较忙&#…

Java编写一个WebService并在Tomcat上发布

本例采用Myeclipse 2016 CI 6&#xff0c;JDK1.8 。新建一个Web Service Project。 选择如下设置&#xff1a; 在src目录下建个包: 编写一个接口&#xff0c;其中一个方法返回ArrayList&#xff0c;另一个方法返回JSON&#xff1a; package Services; import java.sql.SQLExce…

Windows环境下搭建Tomcat

下载Tomcat&#xff0c;点击这里下载Tomcat 解压到指定目录: 配置环境变量&#xff1a;右键“我的电脑” ——属性——高级系统设置——环境变量 配置三个环境变量&#xff1a; 在系统变量里新建变量名&#xff1a;CATALINA_BASE&#xff0c;变量值&#xff1a;D:\apache-t…

c3p0连接池的配置和简单使用

背景 一般我们在项目中操作数据库时&#xff0c;都是每次需要操作数据库就建立一个连接&#xff0c;操作完成后释放连接。因为jdbc没有保持连接的能力&#xff0c;一旦超过一定时间没有使用&#xff08;大约几百毫秒&#xff09;&#xff0c;连接就会被自动释放掉。而每次新建连…