HTML5 文件拖放API讲解

本章向大家讲解一下HTML 5中文件API与拖放API的使用方法。HTML5的文件API,可以在浏览器中直接显示客户端文件的信息或文件中的内容,而通过拖放API,可以直接将位于客户端中的文件拖动到浏览器中,也可以单独拖动页面中的元素或者元素中的内容。

HTML5拖拽文件预览效果图:

在线演示

以前,我们使用file控件,单击上传按钮后选择计算机中的文件。在HTML5中,我们可以先将计算机中的文件直接拖动到浏览器中进行预览,确定文件是我们所需要的,然后单击上传按钮将该文件上传到服务器端。

我们使用Firefox浏览器提供的file对象的gctAsBinary方法与XMLHttpRequest对象的sendAsBinary方法,进行文件上传。由于条件有限,本例中只讲解文件从客户端计算机中拖放到浏览器中进行预览的功能。

并不是所有文件都能够被预览,在此我们只讲解图片文件和文本文件的预览。如果用户拖动的是文本文件,则拖动完毕后文件预览区显示文本文件的内容。

另外,如果我们将比较大的图像文件或文本文件拖放到文件预览区中,会导致图像文件的尺寸或文本文件的显示范围超出文件预览区的尺寸。针对这种情况,为文件预览区所使用的div元素指定resize样式,这样用户可以通过拖动文件预览区的右下角来放大文件预览

区,使其能够完全显示其中的图片或内容。

本例中用到的HTML 5知识点,文件API与拖放API

1.文件API

HTML5提供了一个操作文件的API,通过这个API,使从Web页面上访问本地文件系统的相关处理变得十分简单。文件API中主要使用file对象与FileReader接口。在HTML 5中,file对象代表客户端计算机中的一个文件,该对象具有两个属性,name属性表示文件名(不包括路径)lastModifiedDate属性表示文件的最后修改日期。

在HTML 5中,可以使用FileReader接口把文件读入内存,并且读取文件中数据。 FileReader接口拥有4个方法,其申3个用于读取文件,另一个用于将读取过程中断。

下表中列出了这4个方法以及它们的参数和功能。需要注意的是:无论读取成功或失败,结果并不会返回读取结果,这一结果存储在result属性中。

leReader接口的方法:

┏━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━┓

┃            方法名             ┃              参数          ┃                    描述                  ┃

┣━━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━━━━━┫

┃readAsBinaryString      ┃     file                       ┃    将文件读取为二进制码      ┃

┣━━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━━━━━┫

┃    rcadAsTcxt              ┃file, [encoding]         ┃    将文件读取为文本              ┃

┣━━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━━━━━┫

┃readAsDataURL           ┃    file                        ┃    将文件读取为DataURL       ┃

┣━━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━━━━━┫

┃    abort                       ┃    ( none)                ┃    中断读取操作                    ┃

┗━━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━━━━━┛

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

rcadAsText:此方法有两个参数,其中第二个参数是文本的编码方式,默认值UTF-8。将文件以文本方式读取,读取的结果就是是这个文本。

readAsDataURL:此方法将文件读取为一串Data URL字符串。(此方法通常将图像与 HTML等格式的文件以一种特殊格式的URL地址形式直接读入页面)。

除了以上方法之外,FileReader接口还包含用于捕获读取文件时的状态的事件,如下表。

FileReader接口的事件:

┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┓

┃          事件           ┃                               描述                                ┃

┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    onabon            ┃    数据读取中断时触发                                   ┃

┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    onerror            ┃    数据读取出错时触发                                   ┃

┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    onloadstart       ┃    数据读取开始时触发                                  ┃

┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    onprogress       ┃    数据读取中                                                ┃

┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    onload              ┃    数据读取成功完成时触发                           ┃

┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    onloadend        ┃    数据读取完成时触发,无论成功或失败       ┃

┗━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━┛

2.拖放API

HTML 5提供了支持拖放操作的API,在HTML 5之前我们已经可以使用mousedown、mousemove和mouseup来实现拖放操作,但是这些事件只支持在浏览器内部的拖放,而HTML 5可以支持浏览器与其他应用程序之间的数据的互相拖动。

HTML5中实现文件拖放的步骤

1)将要拖放的对象元素的draggable属性设为true(draggable=¨true¨),这样才能对该元素进行拖放。另外,默认允许拖放img元素与a元素(必须指定href)

2)编写与拖放有关的事件处理代码。拖放相关的事件如下表。

拖放的相关事件:

┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┓

┃    事件             ┃    产生事件的元素                        ┃                               描述                                ┃

┣━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    dragstart      ┃    披拖放的元素                            ┃                         开始拖放操作                        ┃

┣━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    drag              ┃    被拖放的元素                           ┃                          拖放过程中                          ┃

┣━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    dragcnter      ┃    拖放过程中鼠标经过的元素       ┃   被拖放的元素开始进入本元素的范圈内      ┃

┣━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    dragover      ┃    拖放过程中鼠标经过的元素       ┃    被拖放的元素正在本元素范圈内移动          ┃

┣━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    dragleave     ┃    拖放过程中鼠标经过的元素       ┃    被拖放的元素离开本元素的范围                 ┃

┣━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    drop             ┃    拖放的目标元素                        ┃    有其他元素棱拖放到了本元素中                 ┃

┣━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━┫

┃    dragend        ┃    拖放的对象元素                        ┃    拖放操作结束                                             ┃

┗━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━┛

另外,拖放API中还有一个DataTransfer对象,该对象用来保存拖放时所要携带的数据。我们可以使用该对象的files[0]属性来引用被拖动到文件预览区域中的文件。var   file   -   ev . dataTransfer. files [O];

本文代码下载:html5drag_html5star.html

时间: 2024-12-26 06:33:02

HTML5 文件拖放API讲解的相关文章

[转载] HTML5 文件操作API——HTML5系列

简介 我常常想,如果网络应用能够读取和写入文件与目录,将会非常方便.从离线转移到在线后,应用变得更加复杂,而文件系统方面的API的缺乏也一直阻碍着网络前进.存储二进制数据或与其进行交互不应局限于桌面.令人欣慰的是,由于FileSystemAPI的出现,这一现状终于得到了改变.有了FileSystemAPI,网络应用就可以创建.读取.导航用户本地文件系统中的沙盒部分以及向其中写入数据. API 被分为以下不同的主题: 读取和处理文件:File/Blob.FileList.FileReader 创建

HTML5 文件操作API

简介 我常常想,如果网络应用能够读取和写入文件与目录,将会非常方便.从离线转移到在线后,应用变得更加复杂,而文件系统方面的API的缺乏也一直阻碍着网络前进.存储二进制数据或与其进行交互不应局限于桌面.令人欣慰的是,由于FileSystemAPI的出现,这一现状终于得到了改变.有了FileSystemAPI,网络应用就可以创建.读取.导航用户本地文件系统中的沙盒部分以及向其中写入数据. API 被分为以下不同的主题: 读取和处理文件:File/Blob.FileList.FileReader 创建

(3)HTML5 文件操作API

读取目录内容 要读取目录的内容,可先创建 DirectoryReader,然后调用 readEntries() 方法. 我们不能保证所有目录条目都能在仅调用一次 readEntries() 的情况下同时返回. 也就是说,您需要一直调用 DirectoryReader.readEntries(),直到系统不再返回结果为止.以下代码对此作了说明: <ul id="filelist"></ul> function toArray(list) { return Arra

HTML5文件操作API

fiileList对象: file对象的集合 document.getElementById("fileDemo").files取到的就是fileList对象 Blob对象: 原始数据对象,有两个属性 size和type file对象 继承于Blob对象,指向具体的文件除了继承到的size和type属性,另外 还有name和lastModifiedData属性 #获取file对象 var file_obj=document.getElementById("fileDemo&q

HTML5 File API初探 支持文件拖放上传功能

新一代Web开发标准HTML 5可以带来远远超出其本身作为一种标记语言的能力,除我们之前介绍的HTML 5可完美支持视频音频元素外,还提供一些强大的脚本工具,负责监督HTML5发展进程的W3C组织,刚刚出版了一份有关文档操作API的规格草案,HTML5 File API 接口功能. 该HTML5 File API的设计初衷,是改善基于浏览器的Web应用程序处理文件上传的方式,使文件直接拖放上传成为可能.草案定义了新的输入选项 ﹤input type=”file”﹥ 来处理文件上传. 更为惊喜的是

html5的新特性——拖放API

在HTML5之前只能使用鼠标事件模拟出"拖放"效果:HTML5专门为拖放提供了7个事件句柄.  被拖动的源对象可以触发的事件: (1)ondragstart:源对象开始被拖动 (2)ondrag:源对象被拖动过程中(鼠标可能在移动也可能未移动) (3)ondragend:源对象被拖动结束 拖动源对象可以进入到上方的目标对象可以触发的事件: (1)ondragenter:目标对象被源对象拖动着进入 (2)ondragover:目标对象被源对象拖动着悬停在上方   注意:必须组织drago

HTML 5 File API:文件拖放上传功能

即将到来的 html5 规范有几个特性,以致使 HTML 远远超出其本身作为一种标记语言的能力,并为 Web 开发者提供了一些强大的脚本工具.负责监督 HTML5 发展进程的 W3C 组织,刚刚出版了一份强有力的规格草案 – HTML5 File API 接口功能. 该 API 的设计初衷,是改善基于浏览器的 Web 应用程序处理文件上传的方式,使文件直接拖放上传成为可能.草案定义了新的输入选项 <input type=”file”> 来处理文件上传. 更为惊喜的是,该 API 为开发者提供了

Html5 本地文件读取 API 研究使用过程中的意外发现 - MDN

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 补充: 终于可以读出肉的眼能看懂的人类文字了!!! 经在 safari 7.0.4(9537.76.4) 测试,即使关闭 WebGL 支持,Fil

如何使用HTML5实现文件拖放 :

把文件从桌面拖拽到浏览器是Web应用程序集成的最终目标之一.本教程共四篇文章(本文是第一篇),主要介绍了: 1.实现将文件拖放到页面元素上 2.在JavaScript中分析被拖放的文件 3.在客户端上加载和解析文件 4.使用XMLHttpRequest2将文件异步上传到服务器 5.上传时,显示图形进度条 6.使用进程增强( progressive enhancement)以确保文件上传表单在所有浏览器正常工作 7.纯JavaScript代码,不使用其它库. 咻,开始吧! 糟糕的浏览器支持 在开始