html拖拽上传

 

if(window.FileReader){
	var list = document.querySelector('#list'),
		container = document.querySelector('#container');
	//判断是否为图片
	function isImage(type){
		switch(type){
			case 'image/jpeg':
			case 'image/png':
			case 'image/gif':
			case 'image/bmp':
			case 'image/jpg':
				return true;
			default:
				return false;
		}
	}

	//处理拖放文件列表
	function handleFileSelect(evt){
		//html5 drop evt.target指向拖拽容器
		evt.stopPropagation();
		evt.preventDefault();

		var files = evt.dataTransfer.files;

		for(var i = 0, f;f = files[i]; i++){
			//得到选择的file对象
			var t = f.type ? f.type : 'n/a',
				reader = new FileReader(),
				looks = function(f, img){
					list.innerHTML += '<li><strong>'+f.name+'</strong>('+ t +
					')-' +  f.size + 'bytes<p>' + img + '</p></li>'
					container.innerHTML = img;
				},
				isImg = isImage(t),
				img;
			//处理得到的图片
			if(isImg){
				reader.onload = (function(theFile){
					return function(e){
						//重点 e.target 指向 Filereader对象 
						img = '<img class="preview" src="' + e.target.result + '" title="' + theFile.name + '"/>';
						looks(theFile, img);
					}
				})(f)
				reader.readAsDataURL(f);

					   
			} else {
				img = '"o((>w<))o",你传进来的不是图片!!';
				looks(f, img);
			}

		}
	}

	// 处理插入拖出效果
		function handleDragEnter(evt){ this.setAttribute('style', 'border-style:dashed;'); }
		function handleDragLeave(evt){ this.setAttribute('style', ''); }

		// 处理文件拖入事件,防止浏览器默认事件带来的重定向
		function handleDragOver(evt) {
			evt.stopPropagation();
			evt.preventDefault();
		}

		container.addEventListener('dragenter', handleDragEnter, false);
		container.addEventListener('dragover', handleDragOver, false);
		container.addEventListener('drop', handleFileSelect, false);
		container.addEventListener('dragleave', handleDragLeave, false);
}



//input file 获取file对象
var inputElement = document.getElementById("input");  
	inputElement.addEventListener("change", handleFiles, false);
	
	function handleFiles(){
		var fileList = this.files;
		for( var i = 0 ; i < fileList.length ; i++ ){
			console.log(fileList[i]);
		}
	}

  

实现上传的主要几个关键方法和对象:

 

html5 drag drop

取得file对象 var files = evt.dataTransfer.files;

FileList对象与file对象

FileList对象表示用户选择的文件列表。在HTML5中,通过在file控件中添加multiple属性,可以使用控件内一次放置多个文件。控件内的每一个用户选择的文件都是一个file对象,而FileList对象则为这些file对象的列表,代表用户选择的所有文件。file对象具有两个属性:name属性表示文件夹名(不包含路径);lastModifiedDate属性表示文件的最后修改日期。

file对象属性

name 文件名称

size 文件大小

type 文件类型

fileReader对象

FileReader 的实例拥有 4 个方法,其中 3 个用以读取文件,另一个用来中断读取。下面的表格列出了这些方法以及他们的参数和功能,需要注意的是 ,无论读取成功或失败,方法并不会返回读取结果,这一结果存储在 result属性中。

  • FileReader.readAsBinaryString(fileBlob) -  result 属性会包含一个文件的二进制的格式
  • FileReader.readAsText(fileBlob, opt_encoding) -  result 属性将会包含一个文件的文本格式,默认解码参数是 “utf-8”。
  • FileReader.readAsDataURL(file) -  result 将会包含一个文件的 DataURL 格式(图片通常用这种方式)

 

 

 

 

 

posted @ 2013-04-01 17:21  孙海勋  阅读(441)  评论(0编辑  收藏  举报