文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

HTML5的File API有哪些对象

2024-04-02 19:55

关注

本文小编为大家详细介绍“HTML5的File API有哪些对象”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML5的File API有哪些对象”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

File API包含如下对象。

 FileList接口。

它包含一组File对象,所以我们一般通过它来获取文件。有两种方式可以得到FileList对象:第一种是通过<input type="file">标签,

例如var fileList =document.getElementById('input-file').files可以获取选择的所有文件对象;

而Drag & Drop API的dataTransfer也包含一个FileList对象,在后面的例子中你将会看到如何通过这种方式来读取文件。

 Blob接口。

Blob(Binary Large Object)指二进制大对象,代表文件原始的二进制数据。

Blog接口的size属性表示二进制流的大小,type属性表示文件类型,而slice函数用来分割Blob对象。

 File接口。

它继承自Blob接口,描述FileList里的一个文件,包含了文件的只读信息。它的name属性表示文件名,lastModifiedDate属性表示文件的上次修改时间。

 FileReader接口。

它提供了方法来读取文件,还提供了获取读取数据的事件模型。

 FileError和FileException。

它们定义了File API使用中的错误和异常。

1. 以前的同类解决方案

在以前,JavaScript是不允许访问本地文件的。要实现文件上传这样的功能,必须借助于浏览器的特定插件,例如IE里的ActiveX或者Flash。

2. File API的优点

File API提供了多种Web应用对本地文件的操作,并通过沙箱机制保证了操作的安全性。使用File API,我们的Web应用不需要再考虑所有浏览器的兼容性,代码的编写和维护变得更加容易。

3. 检测浏览器是否支持File API

判断当前浏览器是否支持File API的代码如下:

if(typeof window.FileReader === 'undefined'){

//此浏览器不支持File API

}

4. 读取文件函数

File API读取文件主要包括以下函数:

 readAsBinaryString(blob)。该函数接受一个Blob对象作为参数,通过二进制字符串形式读取文件内容。

 readAsText(blob)。该函数接受一个Blob对象作为参数,通过文本方式读取文件内容,默认采用UTF-8的编码方式。

 readAsDataURL(blob)。该函数接受一个Blob对象作为参数,通过加密的Data URL方式读取文件内容。Data URL协议由RFC2397定义,具体可以参考http://www.ietf.org/rfc/rfc2397.txt。如果要直接在页面里显示图片,一般采用readAsDataURL读取图片内容,后面的示例采用了这种方式。

 readAsArrayBuffer(blob)。该函数接受一个Blob对象作为参数,并以ArrayBuffer对象的形式读取文件内容。

上面函数的参数也可以是File对象,因为File继承自Blob接口。

5. 一个简单实例

结合前面介绍过的拖放API,我们实现一个图片拖放并展示的简单示例,详细功能是从Windows文件系统中拖放一幅图片文件到浏览器页面里,页面将会把这幅图片的边缘加上白色虚化效果并显示出来。

在这个示例里,我们将用到HTML5的File API和Drag & Drop API,以及css3的Mask特性。

这个实例的HTML和CSS代码如代码如下:

<div id="box"></div>

#box{

border: 2px gray dotted;

width: 171px;

height: 158px;

line-height: 158px;

text-align: center;

mask-image: url(mask.png);

-webkit-mask-image: url(mask.png);

mask-clip: content;

-webkit-mask-clip: content;

}

#box.hover{

border: 2px olive solid;

}

#box.drop{

border: 2px blue solid;

}

这个实例的JavaScript代码如下所示:

var box = document.getElementById('box');

//检测是否支持File API

if(typeof window.FileReader === 'undefined'){

alert('此浏览器不支持File API ');

}

box.ondragover = function(event){ //将鼠标拖曳到容器上时

this.innerHTML = '可以拖曳到此处';

this.className = 'hover';

event.dataTransfer.dropEffect = "copy";

return false;

};

box.ondragleave = function(){ //移出时

this.innerHTML = '';

this.className = '';

return false;

}

box.ondragend = function(){ //拖曳结束时

this.className = '';

return false;

};

box.ondrop = function(event){ //拖曳进行中

this.innerHTML = '';

this.className = 'drop';

var file = event.dataTransfer.files[0]; //通过Drag & Drop API的dataTransfer获取

//文件对象

var reader = new FileReader();

reader.onload = function (event){ //读取成功后

box.style.background = 'url(' + event.target.result + ') no-repeat center';

//将读取到的图像内容设置为容器的背景

};

reader.onerror = function(event){ //读取失败的操作

alert(event.target.error.code);

}

reader.readAsDataURL(file); //用DataURL的方式读取文件

event.preventDefault();

};

拖放前的框、拖放中的框、拖放后的框效果如下图所示:

拖放时的实际效果表现为,当拖曳图片到框内时,边框变为橄榄色实线,框内文字显示“可以拖曳到此处”;再把图片拖曳出框外时,边框还原为最初的灰色虚线框,框内文字消失;将图片放置到框里后,边框变为蓝色实线框,图片的边缘呈现白色虚化效果。你可以将多幅图片拖曳到框内来查看它们经过边缘白色虚化处理后的效果图,非常方便实用。

可能犯的4个错误

(1) onerror事件参数处理错误

onerror事件接受的参数是event事件,而不是error对象,要获得错误信息,可以使用event.target.error.code,它有如下几种类型。

 NOT_FOUND_ERR(值为1,文件未找到的错误)

 SECURITY_ERR(值为2,安全权限的错误)

 ABORT_ERR(值为3,读取操作放弃的错误)

 NOT_READABLE_ERR(值为4,不可读的错误)

 ENCODING_ERR(值为5,编码错误)

(2) 在本地Web页面中调用File API

在本地Web页面中调用File API是无法读取到文件内容的,HTML5的安全机制对此进行了控制。在本地页面调用File API时,在FileReader的onerror事件中可以捕获到的错误码为2,对应上面提到的SECURITY_ERR,表示是文件安全权限导致的错误。

如果要自己动手编写File API的示例,必须记得将页面放在用Apache或者IIS等搭建的Web服务器上。

(3) 没有阻止浏览器默认行为

dragover和dragend事件都必须使用event.preventDefault或者return false的方式(熟悉JavaScript的朋友应该很了解这两者之间的差异)来阻止浏览器的默认行为。如果不采用这样的方式,拖放后浏览器将会打开并显示所拖曳的图片。

(4) 使用非WebKit内核浏览器打开示例页面

CSS3的Mask效果目前只能在WebKit内核浏览器中正常显示,其他现代浏览器可以支持图片拖放的相关功能,但是无法看到图片边缘的白色虚化效果。

读到这里,这篇“HTML5的File API有哪些对象”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯