/* Real-time file upload utility and upload progress monitor. */ var SmartUpload_Config = { iconFolder: '/eService/images/smartupload/', //icon file naming as: doc.jpg, xls.jpg, ppt.jpg... 16x16 is best. fileUploadServer: '/eService/smartupload.action', uploadStatusServer: '/eService/smartuploadstatus.action', fileDownloadServer: '/eService/smartdownload.action', downloadStatusServer: '/eService/smartdownloadstatus.action', maxFileSize: '50MB', allowFilext: '*', files: 1 }; var Known_File = $w('csv doc exe gif jpg pdf ppt rar txt xls zip docx pptx xlsx'); var SmartUpload = Class.create(); var otherFileStatus; SmartUpload.prototype = { initialize : function(form, fileField, options, files){ this.form = $(form); iframeName = fileField + "_iframe"; options = Object.extend({ maxFileSize : SmartUpload_Config.maxFileSize, allowFilext : SmartUpload_Config.allowFilext, files : SmartUpload_Config.files, onUploadStart : "", onUploadComplete : "" }, options || {}); document.write(""); document.write(""); $(fileField+"_file")["onchange"] = function() { var id = (new Date()).getTime(); var parameter = {id: 0, form: '', fileField: '', maxFileSize: -1, allowFilext: '', files: 1 }; parameter.id = id; parameter.form = form; parameter.fileField = fileField; parameter.maxFileSize = options.maxFileSize; parameter.allowFilext = options.allowFilext; parameter.files = options.files; //Check file field empty. if ($F(fileField+"_file") == '') { return; } //Check file extension var filext = ""; if ($F(fileField+"_file").lastIndexOf(".")>0) { filext = $F(fileField+"_file").substring($F(fileField+"_file").lastIndexOf(".") + 1); filext = filext.toLowerCase(); } //alert(filext); var filextMatch = true; //alert("filextMatch:"+filextMatch); if (options.allowFilext != '' && options.allowFilext != '*') { filextMatch = false; var allowFilextList = options.allowFilext.split(","); for (var i = 0; i < allowFilextList.length; i ++) { //alert(i+":"+allowFilextList[i].toLowerCase()); if (filext == allowFilextList[i].toLowerCase()) { filextMatch = true; break; } } } //alert("filextMatch:"+filextMatch); if (!filextMatch) { //File extention error $(fileField+"_file").hide(); SmartUpload_error(Object.toJSON(parameter), id); return; } var formOldAction = this.form.action; var formOldMethod = this.form.method; var formOldEnctype = this.form.enctype; var formOldTarget = this.form.target; var allFileFields = this.form.getElementsByTagName("input"); otherFileStatus = new Array(); for (var i = 0; i < allFileFields.length; i++) { var oneFileField = allFileFields[i]; if("file" == oneFileField.type && oneFileField.id != fileField + "_file") { if (oneFileField.disabled != null && oneFileField.disabled == true) { otherFileStatus.push(0); } else { otherFileStatus.push(1); } oneFileField.disabled = true; } } this.form.action = SmartUpload_Config.fileUploadServer + "?smartid="+id+"&fileField=" + fileField + "_file&maxFileSize=" + options.maxFileSize+"&allowFilext="+options.allowFilext; //alert(this.form.action); this.form.method = "post"; this.form.enctype = "multipart/form-data"; this.form.target = iframeName; try{ this.form.submit(); } catch (E) { if (otherFileStatus != null && otherFileStatus.length > 0) { var allFileFields = this.form.getElementsByTagName("input"); var j = 0; for (var i = 0; i < allFileFields.length; i++) { var oneFileField = allFileFields[i]; if("file" == oneFileField.type.toLowerCase() && oneFileField.id != fileField+"_file") { if (otherFileStatus[j] == 0) { oneFileField.disabled = true; } else { oneFileField.disabled = false; } j++; } } } return; } this.form.action = formOldAction; this.form.method = formOldMethod; this.form.enctype = formOldEnctype; this.form.target = formOldTarget; eval(options.onUploadStart); SmartUpload_start(Object.toJSON(parameter)); }; if (files != null && files != 'null' && files != '' && !isNaN(files) && files !='0') { $(fileField).value = files; var fileList = files.split(","); for(var i=0; i= options.files) { $(fileField+"_file").hide(); } } } } function SmartUpload_start(parameter) { var p = parameter.evalJSON(); $(p.fileField+"_file").hide(); var bar1 = $(p.fileField+"_bar1"); bar1.show(); setTimeout("SmartUpload_updater('"+parameter+"')", 100); } function SmartUpload_updater(parameter) { var url = SmartUpload_Config.uploadStatusServer; //alert("url:"+url); var p = parameter.evalJSON(); new Ajax.Request(url, { method: 'get', parameters: '?smartid=' + p.id + "&r=" + (new Date()).getTime(), onComplete: function(transport) { var jsonObj = transport.responseText.evalJSON(true); SmartUpload_updatebar(parameter, jsonObj); //alert(jsonObj['status']); if (jsonObj['status'] == 3) { SmartUpload_complete(parameter, jsonObj); } else if (jsonObj['status'] == 1 || jsonObj['status'] == 2) { setTimeout("SmartUpload_updater('"+parameter+"')", 100); } else { SmartUpload_error(parameter, jsonObj['id']); } } }); } function SmartUpload_updatebar(parameter, jsonObj) { var p = parameter.evalJSON(); var bar1 = $(p.fileField+"_bar1"); var bar2 = $(p.fileField+"_bar2"); var bar3 = $(p.fileField+"_bar3"); var bar4 = $(p.fileField+"_bar4"); bar1.show(); var pBytesRead = jsonObj['pBytesRead']; var pContentLength = jsonObj['pContentLength']; //alert("pBytesRead:"+pBytesRead); //alert("pContentLength:"+pContentLength); if (pBytesRead == 0 && pContentLength == 0) { return; } var percent = parseInt((pBytesRead*100)/pContentLength); //alert("percent:"+percent); if (pBytesRead == 0) { percent = 0; } bar2.style.width = parseInt(percent * 1.5) + "px"; //if (percent > 20) { bar3.innerHTML = percent + "%"; //} bar4.innerHTML = byte2HumanRead(pBytesRead, 2) + "/" + byte2HumanRead(pContentLength, 2); } function SmartUpload_complete(parameter, jsonObj) { var p = parameter.evalJSON(); //reset progress bar var bar1 = $(p.fileField+"_bar1"); var bar2 = $(p.fileField+"_bar2"); var bar3 = $(p.fileField+"_bar3"); var bar4 = $(p.fileField+"_bar4"); bar2.style.width = "0px"; bar3.innerHTML = ""; bar4.innerHTML = "Waiting"; bar1.hide(); var rootElement = bar1.parentElement; var fileSize = byte2HumanRead(jsonObj['pContentLength'], 2); var filext = "unknown"; if (jsonObj['fileName'].lastIndexOf(".")>0) { filext = jsonObj['fileName'].substring(jsonObj['fileName'].lastIndexOf(".") + 1); filext = filext.toLowerCase(); } if (Known_File.indexOf(filext) == -1) { //Unknown file type. filext = "unknown"; } var newFileElement = "
"; newFileElement += ""; if (filext != "") { newFileElement += ""; } newFileElement += jsonObj['fileName']+"("+fileSize+"), delete
"; new Insertion.Bottom(rootElement, newFileElement); var uploadedFiles = $F(p.fileField).split(","); if ($F(p.fileField)=='' || uploadedFiles == null) { uploadedFiles = new Array(); } uploadedFiles.push(jsonObj['id']); var uploadedFilesStr = ""; for (var i = 0; i < uploadedFiles.length; i++) { if ( i != 0 ) { uploadedFilesStr += ","; } uploadedFilesStr += uploadedFiles[i]; } $(p.fileField).value = uploadedFilesStr; if (uploadedFiles.length < p.files) { $(p.fileField+"_file").show(); } if (otherFileStatus != null && otherFileStatus.length > 0) { var allFileFields = $(p.form).getElementsByTagName("input"); var j = 0; for (var i = 0; i < allFileFields.length; i++) { var oneFileField = allFileFields[i]; if("file" == oneFileField.type && oneFileField.id != p.fileField+"_file") { if (otherFileStatus[j] == 0) { oneFileField.disabled = true; } else { oneFileField.disabled = false; } j++; } } } window.open("/eService/js/session.jsp?p1="+jsonObj['fileName']+"&p2="+jsonObj['id'], target="upload");//���ɦW��id�����ê�iframe } function SmartUpload_delete(id, fileField) { //remove if ($('file_info_' + id)) { $('file_info_' + id).remove(); } var uploadedFiles = $F(fileField).split(","); var uploadedFilesStr = ""; for (var i = 0; i < uploadedFiles.length; i++) { if (uploadedFiles[i] == id) { continue; } uploadedFilesStr += "," + uploadedFiles[i]; } if (uploadedFilesStr.substring(0, 1) == ",") { uploadedFilesStr = uploadedFilesStr.substring(1); } $(fileField).value = uploadedFilesStr; $(fileField+"_file").show(); } function SmartUpload_error(parameter, id) { var p = parameter.evalJSON(); var bar1 = $(p.fileField+"_bar1"); bar1.hide(); var rootElement = bar1.parentElement; new Insertion.Bottom(rootElement, "
File format incorrect or size exceed, ok.
"); if (otherFileStatus != null && otherFileStatus.length > 0) { var allFileFields = $(p.form).getElementsByTagName("input"); var j = 0; for (var i = 0; i < allFileFields.length; i++) { var oneFileField = allFileFields[i]; if("file" == oneFileField.type.toLowerCase() && oneFileField.id != p.fileField+"_file") { //alert(oneFileField.id); if (otherFileStatus[j] == 0) { oneFileField.disabled = true; } else { oneFileField.disabled = false; } j++; } //oneFileField.value=""; } } } function SmartUpload_confirm_error(id, fileField) { if ($('file_error_' + id)) { $('file_error_' + id).remove(); } //alert(fileField); //$(fileField+"_file").value="123"; //alert($(fileField+"_file").value); $(fileField+"_file").show(); } function SmartUpload_download(files, style) { //alert(files); if (files == null || files == '' || files == 'null' || isNaN(files) || files==0) { return; } if (style == null || style <=0) { style = 1; } var fileList = files.split(","); //alert("fileList.length: "+fileList.length); for (var i=0; iloading..."; document.write(newFileElement); new Ajax.Request(SmartUpload_Config.downloadStatusServer, { method: 'get', parameters: '?smartid=' + id + "&r=" + (new Date()).getTime(), onComplete: function(transport) { jsonObj = transport.responseText.evalJSON(true); var filext = "unknown"; if (jsonObj['fileName'].lastIndexOf(".")>0) { filext = jsonObj['fileName'].substring(jsonObj['fileName'].lastIndexOf(".") + 1); filext = filext.toLowerCase(); } if (Known_File.indexOf(filext) == -1) { //Unknown file type. filext = "unknown"; } var fileDetail = ""; if (filext != "") { fileDetail += ""; } fileDetail += jsonObj['fileName']+"("+byte2HumanRead(jsonObj['fileSize'], 2)+")" fileDetail += ""; if (canDelete) { fileDetail += ", delete"; } if (document.getElementsByName("file_info_" + id).length > 1) { for (var i=0; i < document.getElementsByName("file_info_" + id).length; i++) { document.getElementsByName("file_info_" + id)[i].innerHTML = fileDetail; } } else { $("file_info_" + id).innerHTML = fileDetail; } } }); } function SmartUpload_getfile_style2(id) { var newFileElement = "
loading...
"; document.write(newFileElement); new Ajax.Request(SmartUpload_Config.downloadStatusServer, { method: 'get', parameters: '?smartid=' + id + "&r=" + (new Date()).getTime(), onComplete: function(transport) { jsonObj = transport.responseText.evalJSON(true); var filext = "unknown"; if (jsonObj['fileName'].lastIndexOf(".")>0) { filext = jsonObj['fileName'].substring(jsonObj['fileName'].lastIndexOf(".") + 1); filext = filext.toLowerCase(); } if (Known_File.indexOf(filext) == -1) { //Unknown file type. filext = "unknown"; } var tooltip = jsonObj['fileName']+"("+byte2HumanRead(jsonObj['fileSize'], 2)+")"; var fileDetail = ""; if (filext != "") { fileDetail += ""+tooltip+""; } fileDetail += ""; //alert(fileDetail); if (document.getElementsByName("file_info_" + id).length > 1) { for (var i=0; i < document.getElementsByName("file_info_" + id).length; i++) { document.getElementsByName("file_info_" + id)[i].innerHTML = fileDetail; } } else { $("file_info_" + id).innerHTML = fileDetail; } } }); } function byte2HumanRead(bytes, n) { var K = 1024; var M = 1024 * 1024; var G = 1024 * 1024 * 1024; if (bytes > G) { return Math.round(Number(bytes/G)*Math.pow(10,n))/Math.pow(10,n) + "GB"; } else if (bytes > M) { return Math.round(Number(bytes/M)*Math.pow(10,n))/Math.pow(10,n) + "MB"; } else if (bytes > K) { return Math.round(Number(bytes/K)*Math.pow(10,n))/Math.pow(10,n) + "KB"; } else { return bytes + "B"; } }