JS拖拽上传

示例代码:

<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="utf-8" />
		<title>拖入上传</title>
		<style type="text/css">
			body {text-align:center}
			#box {margin:0 auto;width:500px;height:300px; border:1px dashed red; text-align:center;overflow:auto}
			#box ul {padding:0;margin:0}
			#box li {padding:2px;margin:5px;float:left;width:100px;height:200px;overflow:hidden;border:1px solid #CCC}
			#box li img {width:100px}
		</style>
	</head>
	<body>
		<h2>Chrome / FireFox 测试可用</h2>
		<div id="box">
			拖入上传
		</div>
		<input type="button" value="上传" onclick="du.upload()">
		<input type="button" value="清空" onclick="du.clear()">

		<script type="text/javascript">

		    /**
			 * @param HtmlElement el 显示上传文件列表的HTML元素
			 * @param string field 文件上传域的名称
			 * @param string url 文件上传提交的服务地址
			 */
			var DropUpload = function(el, field, url){
				var _ = this;
				_.files = {};

				var con = document.createElement('div');
				var sel = document.createElement('input');
				sel.type = 'file';
				sel.multiple = true;
				con.appendChild(sel);
				sel.onchange = function(){
					_.addFile(this.files);
					_.showList();
				}

				el.parentNode.insertBefore(con, el);

				// 禁止默认事件
				el.ondragenter = function(e) {e.preventDefault();}
				el.ondragleave = function(e) {e.preventDefault();}
				el.ondragover = function(e) {e.preventDefault();}

				// 拖拉事件处理
				el.ondrop = function(e){
					e.stopPropagation(); // 解决firefox,会打开新页问题
					e.preventDefault();

					_.addFile(e.dataTransfer.files);
					_.showList();
				}

				this.addFile = function(files){
					var key, file;
					for(var i=0;i<files.length;i++){
						file = files[i];
						key = file.name+file.size+file.type; // 防止重复
						_.files[key] = file;
					}
				}

				this.showList = function(){
					var ul = document.createElement('ul');
					var li, img;
					for(var key in _.files){
						li = document.createElement('li');
						img = document.createElement('img');
						img.src = window.URL.createObjectURL(_.files[key]);

						li.appendChild(img);
						ul.appendChild(li);
					}
					
					if(el.firstChild){
						el.replaceChild(ul, el.firstChild);
					}else{
						el.appendChild(ul);
					}
				}

				this.upload = function(){
					if(_.isEmpty(_.files)){
						var upfiles = [];
						var formData = new FormData();
						for(var key in _.files){
							upfiles.push(_.files[key]);
							formData.append(field, _.files[key]);
						}

						formData.append('upfield_name', field); // 文件上传域的名称

						//console.log(formData.getAll(field));

						var xml = new XMLHttpRequest();
						xml.open("post", url);
						//xml.setRequestHeader('Method', 'Common.Upload.File');
						xml.send(formData);

						xml.onreadystatechange = function() {
							console.log(xml.readyState);
							if(xml.readyState === 4){
								
								alert(xml.responseText);//显示当前页面的代码,不是{“message”, 1}
								_.clear();
								
							}
						}
					}else{
						alert('请选择文件');
					}
				}

				this.clear = function(){
					_.files = {};
					if(el.firstChild){
						el.removeChild(el.firstChild);
					}
				}

				this.isEmpty = function(obj){
					if(typeof obj.length === 'undefined'){
						for(var a in obj){
							return true;
						}
						return false;
					}else{
						return obj.length === 0;
					}
				}
			}

			var du = new DropUpload(document.getElementById('box'), 'upfile[]', 'http://dev.ops/service?method=Common.Upload.File');
		</script>
	</body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值