javascript 使用Html5 File Api进行文件读取

javascript 使用Html File Api进行文件读取,注意“读取”是只读不写,不可以主动获取浏览器所在主机的文件列表。

Html5 中 FileApi主要有 FileUpload, File,FileList,FileError,Blob,FileReader,DataTransfer。

这里主要测试File.因此有必要给一个 test target

<form action="javascript:void(0)" method="post" enctype="mutipart/form-data">
	<input type="file" name="upfile" id="upfile" accept="image/*" multiple="multiple" />
</form>

一. FileUpload是本质是file input 的封装,也是 html4.01 和 xhtml 1.0 的api 这里不在多讲

二. File 是文件对象html5的对象,在html5中,每一个被加入到file input中的文件都是一个对象,注意,这个对象一般无法手动生成(安全性考虑)。

var upfile = document.querySelector(‘#upfile‘);

upfile.onchange = function(evt)
{
  var e = evt || window.event;
  if(upfile.files.length>0)
  {
      alert((upfile.files[0] instanceOf File));
   }
}

File的公开Api有(文件路径无法看见吧)

lastModified
lastModifiedDate
name
type

三.FileList是一个文件列表 List,这个api很少

var upfile = document.querySelector(‘#upfile‘);

upfile.onchange = function(evt)
{
  var e = evt || window.event;
  if(upfile.files)  // upfile.files,一般来说这个对象也是由系统提供的,不可以自己生成
  {
      alert(upfile.files);
   }
}

主要api属性

length
item(index)

四.FileError这个类可以自己生成,主要用来提示文件操作中的错误,以下基本为常量,可直接使用【类名.属性】

ABORT_ERR: 3
ENCODING_ERR: 5
INVALID_MODIFICATION_ERR: 9
INVALID_STATE_ERR: 7
NOT_FOUND_ERR: 1
NOT_READABLE_ERR: 4
NO_MODIFICATION_ALLOWED_ERR: 6
PATH_EXISTS_ERR: 12
QUOTA_EXCEEDED_ERR: 10
SECURITY_ERR: 2
SYNTAX_ERR: 8
TYPE_MISMATCH_ERR: 11

五.Blob是二进制数据,在某些时候,为了让数据库能够存储各类数据,手写需要把数据转为Blob数据才行,在H5中有如下例子

var htmlParts = ["<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"];  
var myBlob = new Blob(htmlParts, { "type" : "text\/xml" });  //2个参数都是可选,第一个是数组,第二个是 mine-type

//下面是一个利用Blob对象,生成可下载文件的例子。  
var blob = new Blob(["Hello World"]);  
var a = document.createElement("a");
a.href = window.URL.createObjectURL(blob);
a.download = "hello-world.txt"; 
a.textContent = "Download Hello World!";  
body.appendChild(a);

//也可以和FormData配合使用来上传文件
var formData = new FormData();

// Files formData.append(field, file, filename); 
// Blobs formData.append(field, blob, filename);

//当然也可以使用ajax直接发送数据
xhr.send(blob); //目前未见到如何使用,希望读者自行检索网络相关信息

六.FileReader文件读物器,用于读取客户端文件到,注意,文件读取完毕后并不会载入缓存

var upfile = document.querySelector(‘#upfile‘);
var fileReader = new FileReader();
fileReader.onload = function(evt)
{  
    if(FileReader.DONE==fileReader.readyState)
    {
         var img =  document.createElement(‘img‘);
         img.src = this.result; //是Base64的data url数据
         document.body.appendChild(img);
         console.log(fileReader);
     }
}
fileReader.readAsDataURL(upfile.files[0]);

相关api

error: null
onabort: null
onerror: null
onload: null
onloadend: null
onloadstart: null
onprogress: null
readyState: 
result:
DONE: 2
EMPTY: 0
LOADING: 1
abort: 
function abort() 
function readAsBinaryString: 
function readAsBinaryString(File Object) 
function readAsDataURL(File Object)
function readAsDataURL(File Object)
function readAsText(File Object);

七.DataTransfer 与DataTransferItemList数据传输对象,这类API主要应用于页面数据的交互,如拖拽上传,拖拽选择等方面

注意:这个对象时事件由对象来生成,所以一般和拖拽搭配使用

<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
#div1, #div2
{float:left; width:100px; height:35px; margin:10px;padding:10px;border:1px solid #aaaaaa;}
</style>
<script type="text/javascript">
function allowDrop(ev)
{
  ev.preventDefault();
}

function drag(ev)
{
   ev.dataTransfer.setData("Text",ev.target.id);
}

function drop(ev)
{
    ev.preventDefault();
    var data=ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
  <img src="http://www.w3school.com.cn/i/w3school_logo_black.gif" draggable="true" ondragstart="drag(event)" id="drag1" />
</div>
<div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

</body>
</html>

或者拖拽外部文件进行数据复制和传输

<!doctype  html>
<html>
<head>
    <meta charset="utf-8" />
    <title>www.meiweimimi.com/fqa/</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <meta http-equiv="imagetoolbar" content="no"/>
    <meta name="apple-mobile-web-app-capable" content="yes"/>
    <meta http-equiv="X-UA-Compatible" content="IE=7">
</head>
<body>

<div id="drag" style="font-size:20px;padding:25px;border:1px dashed #666;text-align:center;color:#bbb;margin-bottom:10px">
将文件拖到此处
</div>

<script type="text/javascript" >

	function dropHandler(e) 
	{
    	  e.stopPropagation();
    	  e.preventDefault();

    	var files = e.dataTransfer.files;
    	 for(var i = 0, len = files.length; i < len; i++)
    	 {
        	var f = files[i];
        	console.log(f);
    	 }
   
 	}

	function dragOverHandler(e) 
	{
    	  e.stopPropagation();
    	  e.preventDefault();
    	  e.dataTransfer.dragEffect = ‘copy‘; //设置当拖拽到指定区域时,让文件可被复制
	}

	function dragStartHandler(e)
	{

	}

	var drag = document.getElementById(‘drag‘);
	drag.addEventListener(‘drop‘, dropHandler, false);
	drag.addEventListener(‘dragover‘, dragOverHandler, false);
	drag.addEventListener(‘dragover‘, dragStartHandler, false);

</script>

</body>
</html>

这些DataTransfer的是主要api

其中 setDragImage是拖拽时要显示的效果图,evt.dataTransfer.setDragImage(imageObject,x,y);

if (event.dataTransfer.setDragImage) {                       
         var rainbow = document.getElementsByTagName(‘img‘)[0];
         event.dataTransfer.setDragImage (rainbow, 0, 0);
  }

try doing it

时间: 2024-08-13 00:48:36

javascript 使用Html5 File Api进行文件读取的相关文章

HTML5 file api读取文件的MD5码工具

1.工具的用途:用HTML5 file api读取文件的MD5码.MD5码在文件的唯一性识别上有很重要的应用,业内常用MD5进行文件识别.文件秒传.文件安全性检查等: 2.适用性:IE.Chrome皆兼容: 3.缺陷:当上传大文件时,需要较长的时间才能扫描出MD5码: 4.关于引用:其中引用了js文件(spark-md5.js) <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo

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

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

HTML5 File API — 让前端操作文件变的可能

前言 在 HTML5 File API 出现之前,前端对于文件的操作是非常有局限性的,大多需要配合后端实现.出于安全角度考虑,从本地上传文件时,代码不可能获取文件在用户本地的地址,所以纯前端不可能完成一些类似图片预览的功能.但是 File API 的出现,让这一切变成了可能. 跟着楼主由浅入深,了解下强大的 File API 吧. FileList FileList 对象针对表单的 file 控件.当用户通过 file 控件选取文件后,这个控件的 files 属性值就是 FileList 对象.

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

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

HTML5 File API — 拖拽显示

1.HTML5拖拽 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 如果是html中的元素,要进行拖动,需要设置draggable为true. 下面的代码显示了img在两个div里任意拖动. 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <style type="text/css"> 5 #div1, #div2 6 {float:left; width:100px; height:35px;

HTML5 file API加canvas实现图片前端JS压缩并上传 (转载)

一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致上传失败风险. 最最重要的体验改进点:省略了图片的再加工成本.很多网站的图片上传功能都会对图片的大小进行限制,尤其是头像上传,限制5M或者2M以内是非常常见的.然后现在的数码设备拍摄功能都非常出众,一张原始图片超过2M几乎是标配,此时如果用户想把手机或相机中的某个得意图片

HTML5 File API +JavaSevlet 实现文件上传实时更新进度

1. [代码]java1.8+Tomcat8.0 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 7

HTML5 File API解读

1,概述 Web应用应该具备处理广泛用户输入问题的能力,例如在Web富应用中,用户希望上传文件到服务器.File API定义了访问文件的基本操作途径,包括文件.文件列表集.错误处理等,同时,File API还定义了描述文件异步处理进程中的一些元数据.接下来,我们一起看看File的应用. 2,FileList接口 接口描述: 1 interface FileList { 2 getter File? item(unsigned long index); 3 readonly attribute u

API内部文件读取

直接上代码吧 尝试将项目复制后建一个新的项目,结果总是有问题,不过可以把原项目转换为新项目,方法如下: 1.项目右键在android tools 有个 rename application package选项,这是改包名的,改完这个就是两个不同的应用 2.要想两个工程共存在Eclipse下的话,就还要选中项目 按F2 就可以改 项目的名字. 主要解决在上一个文档中,路径data/data/com.swust.intern这个不能写错的问题,所以直接使用谷歌提供的API获取环境变量,防止读错. g