jquery+swfupload打造文件批量上传

jquery+swfupload打造文件批量上传

swfupload组件功能强悍,比较灵活,界面可以自己设计,这里我用jquery把swfupload的设置和事件简单的封装了下,可以直接使用在项目中,只需将后端程序修改替换成合适的语言,我这个是asp版的。

不多说了,直接上代码:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>asp+jquery+swfupload批量上传组件</title>
<style type="text/css">
<!--
body, td, th {
	font-size: 12px;
	color: #333;
}
* {
	margin:0;
	padding:0;
}
.upLoadBox {
	position:absolute;
	width:460px;
	height:300px;
	left:50%;
	margin-left:-230px;
	top:50%;
	margin-top:-150px;
	border:1px solid #000;
	background-color:#FFF;
	z-index:9999;
}
.upLoadTitle {
	height:28px;
	line-height:28px;
	background-color:#333;
	color:#FFF;
	cursor:move
}
.upLoadTitle span {
	float:left;
	margin-left:10px;
}
#upLoadForm {
	padding:10px;
	border-bottom:1px solid #D5D5D5;
}
#upLoadForm span {
	float:right;
	color:#666
}
.colseUplaodBox {
	color:#FFF;
	float:right;
	margin-right:10px;
	text-decoration:none
}
.innerBox {
	width:460px;
	height:226px;
	overflow:auto
}
#wrapBox {
	position:fixed;
	width:100%;
	height:100%;
	left:0;
	top:0;
	bottom:auto;
	background-color:#000;
	filter:alpha(opacity=50);
	-moz-opacity: 0.5;
	opacity: 0.5;
	z-index:9998;
}
/* 上面的是除了IE6的主流浏览器通用的方法 */
*html #wrapBox {/*ie6 hack*/
	position:absolute;
	bottom:auto;
 top:expression(eval(document.documentElement.scrollTop));
	zoom:-1;
}
/* 修正IE6振动bug */
* html, * html body {
	background-image:url(about:blank);
	background-attachment:fixed;
	height:100%;
}
.fileList {
	width:96%;
	margin:5px auto;
	list-style:none;
	margin:0 auto;
	padding:0;
}
.fileList li {
	border-bottom:1px dashed #E3E3E3;
	padding:5px 0;
}
.fileList li p {
	width:100%;
	clear:both;
	overflow:hidden;
	zoom:-1;
	margin:5px auto;
}
.fileList li span {
	display:inline-block;
	float: left;
}
.fileList li s {
	text-decoration:none;
	color:#F00;
	margin:0 3px;
}
.progress {
	width:350px;
	border:1px solid #D5D5D5;
	height:12px;
	margin-right:10px;
}
.fileList li .delFile {
	color:#C00;
	margin-left:10px;
}
.fileList li .progress s {
	display:inline-block;
	background-color:#9C0;
	width:0%;
	height:12px;
	margin:0;
}
.welcome {
	height:50px;
	line-height:50px;
	text-align:center;
}
-->
</style>
<script type="text/javascript" src="../js/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="../swfupload/swfupload.js"></script>
<script type="text/javascript" src="../js/drag.js"></script>
<script type="text/javascript">

 var upLoadBox = {
	swfu: null,
	init: function(options) {
		var self = this;
		var defaults = {
			flash_url: "../swfupload/swfupload.swf",
			flash9_url: "../swfupload/swfupload_fp9.swf",
			upload_url: "upload.asp",                               //asp上传程序
			post_params: {
				"PHPSESSID": ""
			},
			file_size_limit: 0,
			file_types: "*.*",
			file_types_description: "All Files",
			file_upload_limit: 100,
			file_queue_limit: 0,
			debug: false,

			// Button settings
			button_image_url: "../swfupload/XPButtonNoText_61x22.png",
			button_width: "61",
			button_height: "22",
			button_placeholder_id: "spanButtonPlaceHolder",
			button_text: '浏览',
			button_text_left_padding: 15,
			button_text_top_padding: 0,

			// The event handler functions are defined
			swfupload_preload_handler: self.preLoad,
			swfupload_load_failed_handler: self.loadFailed,
			file_queued_handler: self.fileQueued,
			file_queue_error_handler: self.fileQueueError,
			file_dialog_complete_handler: self.fileDialogComplete,
			upload_start_handler: self.uploadStart,
			upload_progress_handler: self.uploadProgress,
			upload_error_handler: self.uploadError,
			upload_success_handler: self.uploadSuccess,
			upload_complete_handler: self.uploadComplete
			//queue_complete_handler : queueComplete	// Queue plugin event
		}

		var opts = $.extend({}, defaults, options);

		var fileSizeLimit = !opts.file_size_limit ? "单文件大小无限制" : "单文件大小不超过" + opts.file_size_limit + "M";

		var boxHtml = "<div id='wrapBox'></div>";
		boxHtml += "<div class='upLoadBox'>";
		boxHtml += "<div class='upLoadTitle'><span>上传文件</span> <a href='#' class='colseUplaodBox'>[关闭]</a></div>";
		boxHtml += "<form id='upLoadForm' action='index.asp' method='post' enctype='multipart/form-data'>";
		boxHtml += "<span id='spanButtonPlaceHolder'></span> <span>(" + fileSizeLimit + ")</span>";
		boxHtml += "</form>";
		boxHtml += "<div class='innerBox'>";
		boxHtml += "<p class='welcome'>欢迎使用批量上传组件</p>";
		boxHtml += "</div>";
		boxHtml += "</div>";

		$("body").append($(boxHtml));

		var upLoadBox = $("div.upLoadBox"),
			colseUplaodBox = upLoadBox.find("a.colseUplaodBox");

		//拖曳窗口
		upLoadBox.drag({
			handler: $('.upLoadTitle'),
			opacity: 0.8
		});

		//关闭窗口
		colseUplaodBox.click(function(event) {
			event.preventDefault();
			self.colseUploadBox();
		});

		//初始化swfupland组件
		self.swfu = new SWFUpload(options);
	},
	//关闭窗口
	colseUploadBox: function() {
		var upLoadBox = $("div.upLoadBox"),
			colseUplaodBox = upLoadBox.find("a.colseUplaodBox"),
			wrapBox = $("#wrapBox");
		upLoadBox.empty().remove();
		wrapBox.remove();
	},
	preLoad: function() {
		if (!this.support.loading) {
			alert("需要安装9.028以上的flashPlayer");
			return false;
		}
	},
	loadFailed: function() {
		function loadFailed() {
			alert("加载失败");
		}
	},
	fileQueued: function(file) {
		try {
			var innerBox = $("div.innerBox"),
				welcome = $("p.welcome");
			var fileList = "<ul class='fileList'>";
			fileList += "<li id='" + file.id + "'>";
			fileList += "<p class='fileName'>" + file.name + "</p>";
			fileList += "<p><span class='progress'><s></s></span><span class='jdNum'>0%</span> <a href='#' class='delFile'>删除</a></p>";
			fileList += "<p class='info'>等待上传...</p>";
			fileList += "</li>";
			fileList += "</ul>";

			welcome.remove();
			innerBox.append($(fileList));

			$("a.delFile").click(function(event) {
				event.preventDefault();
				var p = $(this).parent().parent(),
					fid = p.attr("id");

				upLoadBox.swfu.cancelUpload(fid, false);
				p.remove();
			});

		} catch (ex) {
			this.debug(ex);
		}
	},
	fileQueueError: function(file, errorCode, message) {
		var welcome = $("p.welcome");
		try {
			if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
				alert("你一次上传的文件超过设置");
				return;
			}

			switch (errorCode) {
			case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
				welcome.text("错误提示:文件太大,文件名: " + file.name + ", 文件大小: " + file.size + ", Message: " + message);
				this.debug("错误提示:文件太大,文件名: " + file.name + ", 文件大小: " + file.size + ", Message: " + message);
				break;
			case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
				welcome.text("错误提示:零字节文件,文件名:" + file.name + ", 文件大小: " + file.size + ", Message: " + message);
				this.debug("错误提示:零字节文件,文件名:" + file.name + ", 文件大小: " + file.size + ", Message: " + message);
				break;
			case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
				welcome.text("错误提示:无效的文件类型,文件名:" + file.name + ", 文件大小:" + file.size + ", Message: " + message);
				this.debug("错误提示:无效的文件类型,文件名:" + file.name + ", 文件大小:" + file.size + ", Message: " + message);
				break;
			default:
				if (file !== null) {
					welcome.text("未处理的错误");
				}
				this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
				break;
			}
		} catch (ex) {
			this.debug(ex);
		}
	},
	fileDialogComplete: function(numFilesSelected, numFilesQueued) {
		try {
			this.startUpload();
		} catch (ex) {
			this.debug(ex);
		}
	},
	uploadStart: function(file) {
		try {
			var stats = $("#" + file.id).find("p.info");
			stats.html("已上传<s class='yscSize'>0</s>Kb");
		} catch (ex) {}
		return true;
	},
	uploadProgress: function(file, bytesLoaded, bytesTotal) {
		try {
			var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);
			var fileList = $("#" + file.id),
				progress = fileList.find(".progress"),
				jdNum = fileList.find(".jdNum"),
				yscSize = fileList.find("s.yscSize");

			progress.find("s").css("width", percent + "%");
			jdNum.html(percent + "%");
			yscSize.text(bytesLoaded);

		} catch (ex) {
			this.debug(ex);
		}
	},
	uploadSuccess: function(file, serverData) {
		try {
			var stats = $("#" + file.id).find("p.info");
			stats.html("<s>上传成功</s>");

		} catch (ex) {
			this.debug(ex);
		}
	},
	uploadError: function(file, errorCode, message) {
		try {
			var stats = $("#" + file.id).find("p.info");

			switch (errorCode) {
			case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
				stats.text("上传错误: " + message);
				this.debug("错误提示:http错误,文件名:" + file.name + ", 信息: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
				stats.text("上传失败");
				this.debug("错误提示:上传失败,文件名称: " + file.name + ", 文件大小:" + file.size + ", 信息:" + message);
				break;
			case SWFUpload.UPLOAD_ERROR.IO_ERROR:
				stats.text("服务器错误");
				this.debug("错误提示:服务器错误, 文件名称: " + file.name + ", 信息: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
				progress.setStatus("安全性错误");
				this.debug("错误提示: 安全性错误, 文件名称: " + file.name + ", 信息: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
				progress.setStatus("上传超过限制。");
				this.debug("错误提示:上传超过限制,文件名称:  " + file.name + ", 文件大小: " + file.size + ", 信息:" + message);
				break;
			case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
				progress.setStatus("验证失败。上传跳过。");
				this.debug("错误提示: 验证失败,上传跳过。文件名称: " + file.name + ", 文件大小: " + file.size + ", 信息:" + message);
				break;
			case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
				break;
			case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
				stats.text("停止");
				break;
			default:
				stats.text("未知错误: " + errorCode);
				this.debug("错误提示: " + errorCode + ", 文件名称: " + file.name + ", 文件大小:" + file.size + ", 信息: " + message);
				break;
			}
		} catch (ex) {
			this.debug(ex);
		}
	},
	uploadComplete: function(file) {
		console.log(this);
		var self = this;
		if (file.filestatus != -5) {
			$.ajax({
				type: "POST",
				url: "uploadAjax.asp",
				data: file,
				success: function(ret) {
					if (ret != "" && self.getStats().files_queued !== 0) {
						self.startUpload();
					}
				}
			});

		} else {
			self.startUpload();
		}
	}
};

 window.onload = function() {
	       //swfupload 设置
			var settings = {
				flash_url : "../swfupload/swfupload.swf",
				flash9_url : "../swfupload/swfupload_fp9.swf",
				upload_url: "upload.asp",
				post_params: {"PHPSESSID" : "<%randomize:response.write replace(replace(replace(replace(now&rnd(),"-",""),":","")," ",""),".","")%>"},
				file_size_limit :0,
				file_types : "*.*",
				file_types_description : "All Files",
				file_upload_limit : 100,
				file_queue_limit : 0,
				debug:false,

				// Button settings
				button_image_url: "../swfupload/XPButtonNoText_61x22.png",
				button_width: "61",
				button_height: "22",
				button_placeholder_id: "spanButtonPlaceHolder",
				button_text: '浏览',
				button_text_left_padding: 15,
				button_text_top_padding: 0,

				// The event handler functions are defined in handlers.js
				swfupload_preload_handler : upLoadBox.preLoad,
				swfupload_load_failed_handler : upLoadBox.loadFailed,
				file_queued_handler : upLoadBox.fileQueued,
				file_queue_error_handler : upLoadBox.fileQueueError,
				file_dialog_complete_handler : upLoadBox.fileDialogComplete,
				upload_start_handler : upLoadBox.uploadStart,
				upload_progress_handler : upLoadBox.uploadProgress,
				upload_error_handler : upLoadBox.uploadError,
				upload_success_handler : upLoadBox.uploadSuccess,
				upload_complete_handler : upLoadBox.uploadComplete
				//queue_complete_handler : queueComplete	// Queue plugin event
			};

 	     $("#button").click(function(){
						           upLoadBox.init(settings);
											   });

  	     };

</script>
</head>
<body>
<label>
  <input type="button" name="button" id="button" value="上传文件" />
</label>
</body>
</html>

原文地址:http://www.muzilei.com/archives/342

你可能感兴趣的:(jquery,swfupload)