handlers.js

来自「asp的bbs程序」· JavaScript 代码 · 共 655 行 · 第 1/2 页

JS
655
字号

var _Upload = {
	Opened : false,
	TipInfo : null,
	Debug : false,
	Length : 0,
	Files : {},
	// 重复的文件列表
	RepeatFiles : {},
	
	// 错误相关
	FirstError : null,
	ErrorCount : 0,
	
	// 文件个数
	Count : 0,
	// 文件大小
	Sizes : 0,
	
	// 类型
	Type : '',
	//Role : '',
	DirectoryID : '',
	Path : '',
	QueryString : '',
	DiskSettingOpenDisk : true,
	FileSizeLimit : '',
	FilesLimit : [],
	
	DocumentTitle : '',
	
	// 检查是否名称重复地址
	CheckFileNameUrl : '',//'http://192.168.0.20/work/ActionScript/swfupload/test/check-url.pl',
	// 重命名请求地址
	RenameUrl : '',//'http://192.168.0.20/work/ActionScript/swfupload/test/rename-url.pl',
	// 上传地址
	UploadUrl : '',//'http://192.168.0.20/work/ActionScript/swfupload/test/upload.php',
	
	// after select one
	// return
	//   -1 : 文件重复
	//    0 : 超过允许的大小
	//    1 : 正常
	SelectedOne : function () {return 1},
	// after select all
	SelectedAll : function () {return true},
	// 选择上传文件对话框关闭
	DialogClosed : function () {},
	// after render
	Render : function () {},
	// after upload one
	UploadedOne : function () {return null},
	// after upload all
	UploadedAll : function () {},
	// close uploader
	CloseUploader : function () {},
	
	ShowDebug : function (content) {
		if (this.Debug) alert(content);
	}
};
/* **********************
   Event Handlers
   These are my custom event handlers to make my
   web application behave the way I went when SWFUpload
   completes different tasks.  These aren't part of the SWFUpload
   package.  They are part of my application.  Without these none
   of the actions SWFUpload makes will show up in my application.
   ********************** */
function fileQueued(file) {
	if (!_Upload.SwfUpload) _Upload.SwfUpload = this;
	
	var ok = _Upload.SelectedOne(file.name);
	if (ok != 1) {
		if (ok == -1)
			_Upload.RepeatFiles[file.id] = file.name;
		this.cancelUpload(file.id);
		return;
	}
	
	// info
	_Upload.Files[file.id] = {
		id: file.id,
		// file name String
		filename: file.name,
		filesize: file.size,
		iscover: false,
		isrename: false
	};
	_Upload.Count++;
}

function fileQueueError(file, errorCode, message) {
	var self = this;
	//try {
		if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
			alert("You have attempted to queue too many files.\n" + (message === 0 ? "You have reached the upload limit." : "You may select " + (message > 1 ? "up to " + message + " files." : "one file.")));
			return;
		}

		switch (errorCode) {
		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
			//progress.setStatus("File is too big.");
			_Upload.FilesLimit[_Upload.FilesLimit.length] = file.name;
			delete _Upload.Files[file.id];
			
			if (_Upload.Count == 0) displayLimitedFiles();
			
			this.debug("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
			// 空文件另处理
			var uploadURL = _Upload.UploadUrl + '?type=' + _Upload.Type + '&filename=' + encodeURIComponent(file.name) + _Upload.DirectoryID + _Upload.Path + _Upload.QueryString + '&isemptyfile=true';
			var ajax = new oAjax();
			ajax.url = uploadURL;
			ajax.callback = function (content) {};
			ajax.send();
			
			//Widget.Alert('提示', file.name + '文件大小不能为空。');
			//progress.setStatus("Cannot upload Zero Byte files.");
			this.debug("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
			Widget.Alert('提示', file.name + '文件类型无效。');
			//progress.setStatus("Invalid File Type.");
			this.debug("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		default:
			if (file !== null) {
				//progress.setStatus("Unhandled Error");
			}
			this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		}
	//} catch (ex) {
	//	this.debug(ex);
	//}
}

// 关闭选择框
function fileDialogComplete(numFilesSelected, numFilesQueued) {
	if (document.title == '#')
		document.title = _Upload.DocumentTitle;
	
	if (_Upload.Count == 0) _Upload.FilesLimit = [];
	_Upload.DialogClosed();
	
	if (numFilesSelected == 0) {
		clearUpload();
		return;
	}
	
	formatDirectoryID(_Upload);
	
	var queryString = '';
	for (var item in _Upload.Files) {
		if (queryString != '') queryString += '|';
		queryString += item + ':' + _Upload.Files[item].filename;
	}
	if (queryString == '') return;
	
	// 判断文件是否重名,并提示用户覆盖或重命名
	var ajax = new oAjax();
	ajax.action = 'post';
	ajax.error = 0;
	ajax.url = _Upload.CheckFileNameUrl + '?rnd=' + Math.random() + '&type=' + _Upload.Type + _Upload.DirectoryID + _Upload.Path + _Upload.QueryString;
	ajax.content = 'list=' + encodeURIComponent(queryString);
	ajax.callback = function (content) {
		// 提示用户是否覆盖或重命名或取消,
		// 收集需重命名的文件,传回服务器获取新文件名
		// 取消的文件则不上传
		_Upload.ShowDebug('返回需要重命名的文件id:' + content);
		showAlert(content);
	};
	_Upload.ShowDebug('发送所有文件id/name:' + queryString);
	ajax.send();
}

/**********************************************/
// [判断文件是否重名]的返回
// content: [swfid, fileid, filesize, icon]
function showAlert (content) {
	// 出错处理
	if (content.indexOf('error:') == 0) {
		Widget.Alert('提示', formatErrorInfo(content));
		clearUpload();
		return;
	}

	if (content == '') {
		if (getFileCountAndSizes()) return;
		startUpload();
		return;
	}
	var ids = content.split('|');
	var current = 0;
	function _showAlert (current) {
		var repeatItem = ids[current].split('*');
		var file = _Upload.Files[repeatItem[0]];
		var enabledDelete = true;
		
		var filename = file.filename;
        var index = filename.lastIndexOf('.');
        filename = [filename.substring(0, index), filename.substr(index + 1)];
		
		var fileid = repeatItem[1];
		var filesize = repeatItem[2];
		var icon = repeatItem[3];
		
		if(_Upload.DiskSettingOpenDisk) {
			Widget.Alert(
				'文件已存在',
				[
				 _Upload.Type == 'post'
					? '您网络硬盘的“我的附件”目录已经存在文件:“' + file.filename + '”。请选择操作:<br />'
					: file.filename + '在网络硬盘中已经存在<br />请选择操作<br />',
				_Upload.Type == 'post' ? '[<a href="javascript:;" id="insert_' + file.id + '">使用网络硬盘中的同名文件插入为附件,不再上传</a>]<br />' : '',
				'[<a href="javascript:;" id="rename_', file.id, '">上传并自动重命名</a>]<br />',
				'[<a href="javascript:;" id="cover_', file.id, '">上传并覆盖原文件</a>]<br />',
				'[<a href="javascript:;" id="cancel_', file.id, '">取消该文件的上传</a>]'].join(''),
				function () {
					if (enabledDelete) {
						delete file;
						delete _Upload.Files[repeatItem[0]];
					}
					_next();
				}
			);
			
		}
		else{
			Widget.Alert(
				'温馨提示',
				['您以前曾上传过同名的文件 “', file.filename, '”。请选择操作:<br />',
				'[<a href="javascript:;" id="insert_' + file.id + '">使用以前上传的同名文件插入为附件,不再上传</a>]<br />',
				'[<a href="javascript:;" id="rename_', file.id, '">请继续上传</a>]<br />',
				'[<a href="javascript:;" id="cancel_', file.id, '">取消该附件的插入</a>]'].join(''),
				function () {
					if (enabledDelete) {
						delete file;
						delete _Upload.Files[repeatItem[0]];
					}
					_next();
				}
			);
		}
		
		_Upload.DiskSettingOpenDisk && 
		($('cover_' + file.id).onclick = function () {
			enabledDelete = false;
			file.iscover = true;
			Widget.InfoClose();
			return false;
		});
		
		$('rename_' + file.id).onclick = function () {
			enabledDelete = false;
			file.isrename = true;
			Widget.InfoClose();
			return false;
		};
		if (_Upload.Type == 'post') {
			$('insert_' + file.id).onclick = function () {
				InsertOne(p, fileid, filename, filesize, '\\我的附件', icon);
				Widget.InfoClose();
				return false;
			};
		}
		
		$('cancel_' + file.id).onclick = function () {
			Widget.InfoClose();
			return false;
		};
		
		$('popup_info_close').style.display = 'none';
		$('popup_info_confirm').style.display = 'none';
	}
	function _next () {
		if (++current == ids.length) {
			renameRequest();
			return;
		}
		_showAlert(current);
	}
	_showAlert(current);
}

// 提交需要重命名的文件id及名称
function renameRequest () {
	if (getFileCountAndSizes()) return;
	
	// 提交需要重命名的文件名列表
	var ids = '';
	for (var item in _Upload.Files) {
		item = _Upload.Files[item];
		if (ids) ids += '|';
		if (item.isrename) ids += '*';
		ids += item.id + ':' + item.filename;
	}
	// 无文件可上传
	if (_Upload.Count == 0) return;
	
	// 返回需要重命名的文件id及文件名
	var ajax = new oAjax();
	ajax.action = 'post';
	ajax.error = 0;
	ajax.url = _Upload.RenameUrl + '?rnd=' + Math.random() + '&type=' + _Upload.Type + _Upload.DirectoryID + _Upload.Path + _Upload.QueryString + '&action=rename';
	ajax.content = 'list=' + encodeURIComponent(ids);
	ajax.callback = function (content) {
		if (ids) _Upload.ShowDebug('获取新文件名:' + content);
		toRename(content);
	};
	ajax.send();
	
	_Upload.ShowDebug('renameRequest: ' + ajax.url);
}

// 返回重命名的文件
function toRename (content) {
	// 出错处理
	if (content.indexOf('error:') == 0) {
		Widget.Alert('提示', formatErrorInfo(content));
		clearUpload();
		return;
	}
	// 处理重命名的文件
	else if (content != '') {
		var ids = content.split('|');

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?