Html5 上传文件

1. 目前常用版本的浏览器除了IE9之外,基本支持Html5的文件上传所需的Javascript对象, window.File/FileReader/Blob/FormData。据说IE10支持,但我没有测试过。

Html5 File API地址: http://www.w3.org/TR/FileAPI/ 

2. Html5 除了支持文件多选, 还支持拖拽上传, Chrome浏览器还支持文件夹上传(属性:webkitdirectory),这个特性不错,不知将来能否加入标准。

选中文件,触发事件,开始上传:

	// file selection

	function FileSelectHandler(e) {

		var event = e || window.event;

		// cancel event and hover styling

		FileDragHover(event);

		// fetch FileList object

		var files = event.target.files || event.dataTransfer.files;

		// process all File objects

		for (var i = 0, file; i <files.length; i++) {

			file = files[i]

			UploadFile(file);

		}

	}

     

	function UploadFile(file){

		var xhr = new XMLHttpRequest();

		if(xhr.upload){

			xhr.upload.addEventListener("progress", showUploadProgress, false);

			//start upload

			var uploadURL = "/test/uploadFile";

			xhr.open("post", uploadURL, true);

			var formData = new FormData();

			formData.append("uploadFile", file);

			xhr.send(formData);

		}

	}

上面的上传,如果是大文件的话,那么PC的CPU利用率会瞬间上去, 主要是读取文件,可能会导致浏览器假死。

那么,一个折中的办法:

 一次上传文件的一部分,比如一次上传1M。 使用File的 slice/webkitSlice/mozSlice方法,一次读取1M到内存然后上传。

问题: 这样的话就会出现很多的短连接, 比如一个10M的文件要建立10次Http连接,但是短连接多了会有什么问题或者好处呢?

(1)失败重试式的断点上传。

(2)CPU不会一直在高位,因为建立HTTP连接,耗时但是不耗CPU使用率。

(3)。。。。。。

 

另外, 使用 WebSocket也可以上传文件,目前Tomcat7.03已经支持WebSocket了"WebSocketServlet"。

 

未完待续。。。。,暂时发布一下。

你可能感兴趣的:(html5)