/*
文件上传插件 Uploader
options参数:
fileType:文件类型(0所有,1图片,2音频,3文档,4其他,5视频)
*/
(function(){
var main = function(Passport){
Passport.require('/Scripts/Plugins/Uploader/uploader.css');
if(window.webkitURL){
window.URL = window.webkitURL;
}
var isWin8 = ((navigator.platform === "Win32") || (navigator.platform === "Windows")) && (navigator.userAgent.indexOf("Windows NT 6.2") > -1 || navigator.userAgent.indexOf("Windows 8") > -1);
var supportHtml5 = window.FileReader && window.Blob && window.Worker && window.URL;
var getFileType = function(type){
var result = {};
switch(type){
case 1:
result.types = "*.png;*.gif;*.bmp;*.jpg;*.jpeg;";
result.desc = "图片文件";
result.accept = "image/png,image/gif,image/bmp,image/jpg,image/jpeg";
break;
case 2:
result.types = "*.amr;*.mp3;*.wav;*.wma;*.mid";
result.desc = "音频文件";
result.accept = "audio/wav,audio/mpeg,audio/wav,audio/x-ms-wma,audio/mid";
break;
case 3:
result.types = "*.txt;*.rtf;*.doc;*.docx;*.ppt;*.pptx;*.xls;*.xlsx;*.pdf;";
result.desc = "文档文件";
result.accept = "text/plain,application/rtf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/x-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation,application/pdf"
break;
case 5:
result.types = "*.mpg;*.mpeg;*.3gp;*.mp4;*.avi;*.wmv;*.mov;*.flv;*.rmvb;*.rm;*.ogg;*.asf;";
result.desc = "视频文件";
result.accept = "audio/mpeg,video/3gpp,video/mp4,video/x-msvideo,video/x-ms-wmv,video/quicktime,video/x-flv,application/vnd.rn-realmedia,video/x-ms-asf";
break;
default:
result.types = "*.*";
result.desc = "所有文件";
break;
}
return result;
}
var formatTime = function(t){
var time = '';
if (t >= 24 * 3600) {
time += parseInt(t / (24 * 3600)) + '天 ';
t %= 24 * 3600;
}
if (t >= 3600) {
time += (t / 3600 >= 10 ? "" : "0")+ parseInt(t / 3600) + ':';
t %= 3600;
}else{
time += "00:"
}
if (t >= 60) {
time += (t / 60 >= 10 ? "" : "0")+ parseInt(t / 60) + ':';
t %= 60;
}else{
time += "00:"
}
time += t>=10 ? t : ("0"+t);
return time;
}
var getFileSize = function(size){
if(size<1024){
return size.toFixed(2) + " B";
}else if(size<1024*1024){
return (size/1024).toFixed(2) + " KB";
}else if(size<1024*1024*1024){
return (size/1024/1024).toFixed(2) + " MB";
}else if(size<1024*1024*1024*1024){
return (size/1024/1024/1024).toFixed(2) + " GB";
}else{
return (size/1024/1024/1024/1024).toFixed(2) + " TB";
}
}
/*Html5 Uploader*/
var html5Uploader = supportHtml5 && function(options){
var localMd5Url, vertifyWorker, curWorker, curFileId;
if(supportHtml5){
window._pt_uploader_jsonp_cb = function(d){
localMd5Url = window.URL.createObjectURL(new Blob([d]));
}
Passport.require("/Scripts/Plugins/Uploader/md5.js?r="+ Math.random(), function(){
delete window._pt_uploader_jsonp_cb;
});
}
options = $.extend({
cutVertifyLength: 0,
maxVertifyLength: 0,
params: {},
fileType: 0
}, options);
return {
addFileParam: function(file, name, value){
var fileId = typeof(file) == "object" ? file.id : file;
if(!options.params.files){
options.params.files = {};
}
if(!options.params.files[fileId]){
options.params.files[fileId] = {};
}
options.params.files[fileId][name] = value;
},
getFile: options.getFile,
startVertify: function(fileId){
var file = options.getFile ? options.getFile(fileId) : fileId;
var uploader = this;
curFileId = file.id;
if(file.size==0){
options.fileQueueError && options.fileQueueError(file, -120/*ZERO_BYTE_FILE*/);
options.continueUpload && options.continueUpload();
return;
}
var fileType = getFileType(options.fileType);
if(fileType.types!="*.*" && (!file.name || fileType.types.indexOf(file.name.substr(file.name.lastIndexOf('.'))+";")<0)){
options.fileQueueError && options.fileQueueError(file, -130/*INVALID_FILETYPE*/);
options.continueUpload && options.continueUpload();
return;
}
var total = file.size;
var loaded = 0;
var readTimes = 0;
var reader = new FileReader();
var buffer = [];
var readFile = function(start){
var size = file.size;
if(options.maxVertifyLength && file.size>options.maxVertifyLength){
size = options.cutVertifyLength && options.maxVertifyLength>2*options.cutVertifyLength ? options.cutVertifyLength : options.maxVertifyLength/2;
total = size * 2;
}
var blob;
if (file.webkitSlice) {
blob = file.webkitSlice(start, start+size);
} else{
blob = file.slice(start, start+size);
}
reader.readAsBinaryString(blob);
}
reader.onprogress = function(e){
options.vertifyProgress && options.vertifyProgress(file, loaded + e.loaded, total);
}
reader.onload = function(e){
loaded += e.loaded;
}
reader.onloadend = function(e) {
if(this.readyState == 2) {
if(total>loaded){
if(reader.result){
buffer.push(reader.result);
readFile(file.size - options.cutVertifyLength);
}else{
if(readTimes>1){
options.fileQueueError && options.fileQueueError(file, -120/*ZERO_BYTE_FILE*/);
curWorker = null;
options.continueUpload && options.continueUpload();
return;
}else{
readFile(0);
readTimes++;
}
}
}else{
var exec = function(){
if(localMd5Url){
if(!vertifyWorker){
vertifyWorker = new Worker(localMd5Url);
}
vertifyWorker.onmessage = function(evt){
file.md5 = evt.data;
options.vertifyComplete && options.vertifyComplete(file);
}
vertifyWorker.onerror = function (evt) {
options.uploadError && options.uploadError(file, -810/*VERTIFY_FAILED*/);
curFileId = null;
options.continueUpload && options.continueUpload();
};
var binary = reader.result
if(buffer.length>0){
buffer.push(reader.result);
binary = buffer.join('');
}
vertifyWorker.postMessage(binary);
}else{
setTimeout(exec,200);
}
}
exec();
}
}
}
curWorker = reader;
readFile(0);
},
startUpload: function(fileId){
file = options.getFile ? options.getFile(fileId) : fileId;
var uploader = this;
var xhr = new XMLHttpRequest();
var lastProgressTicks,lastProgressBytes;
xhr.upload.addEventListener("progress", function (e) {
if (e.lengthComputable) {
var ticks = (new Date()).getTime();
var interval,speed;
if(lastProgressTicks){
interval = (ticks-lastProgressTicks)/1000;
speed = (e.loaded-lastProgressBytes)/interval;
}
lastProgressTicks = ticks;
lastProgressBytes = e.loaded+0;
var leaveseconds = speed>0 ? Math.ceil((e.total - e.loaded) / speed) : -1;
options.uploadProgress && options.uploadProgress(file, e.loaded+0, e.total+0, speed, leaveseconds);
}
}, false);
// File uploaded
xhr.addEventListener("load", function (e) {
if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
options.uploadSuccess && options.uploadSuccess(file, xhr.responseText, xhr);
file.filestatus = -4/*COMPLETE*/;
}else if(xhr.responseText){
var data = $.parseJSON(xhr.responseText);
options.uploadError && options.uploadError(file, -820/*UNKNOWN_ERROR*/, data.Msg);
file.filestatus = -1/*Error*/;
}else{
options.uploadError && options.uploadError(file, -820/*UNKNOWN_ERROR*/);
file.filestatus = -1/*Error*/;
}
curFileId = null;
options.uploadComplete && options.uploadComplete(file);
}, false);
xhr.addEventListener("abort", function (e) {
options.uploadError && options.uploadError(file, -280/*FILE_CANCELLED*/);
curFileId = null;
file.filestatus = -5/*CANCELLED*/;
options.uploadComplete && options.uploadComplete(file);
}, false);
xhr.addEventListener("error", function (e) {
options.uploadError && options.uploadError(file, -200/*HTTP_ERROR*/);
curFileId = null;
options.continueUpload && options.continueUpload();
}, false);
var formData = new FormData();
var data = {};
for(var key in options.params){
if(key == "files"){
for(var name in options.params.files[file.id]){
formData.append(name, options.params.files[file.id][name]);
data[name] = options.params.files[file.id][name];
}
delete options.params.files[file.id];
}else{
formData.append(key, options.params[key]);
data[key] = options.params[key];
}
}
formData.append("Filedata", file);
curWorker = xhr;
xhr.open("post", options.uploadUrl, true);
xhr.send(formData);
},
cancelUpload: function(file){
var fileId = typeof(file) == "object" ? file.id : file;
if(!fileId || fileId == curFileId){
if(curWorker && curWorker.abort){
curWorker.abort();
curWorker = null;
}
if(fileId){
options.continueUpload && options.continueUpload();
}else{
if(localMd5Url && window.URL){
window.URL.revokeObjectURL(localMd5Url);
localMd5Url = null;
}
if(vertifyWorker && vertifyWorker.terminate){
vertifyWorker.terminate();
vertifyWorker = null;
}
}
}
}
};
}
var createFileId = function(){
var rnd = Math.random();
return new Date().getTime() + Math.floor(9999-rnd*1000);
};
Passport(['/Plugins/Dialog', '/Scripts/Plugins/Uploader/swfupload.js'], function(){
var Uploader = Passport.Uploader = {
baseDir: Passport.baseUrl + "/Scripts/Plugins/Uploader/",
softId: "1005",
apiUrl: Passport.baseUrl + "/api/upload",
uploadUrl: "http://cloudstorage.im2x.com/uploader/upload2",
//limitSize: 1024,
btnWidth: 82,
btnHeight: 30,
codeLevelLength: 4,
maxVertifyLength: 10*1024 *1024,
cutVertifyLength: 1024 *1024,
rootFolderCode: '0001',
isSecret: true,
useHtml5Feature: !isWin8 && supportHtml5,
formatTime: formatTime,
formatFileSize: getFileSize,
cancel: function(file){
this.processor && this.processor.cancelUpload(file && file.id ? file.id : file);
},
upload: function(files, options){
var self = this;
options = options || {}
if(files && files.length>0 && html5Uploader){
var file_index = 0;
var upload = function(index, filestatus){
if(files.length>index){
var file = files[index];
file.id = createFileId();
self.processor.startVertify(file);
}else{
options.complete && options.complete(filestatus);
}
}
self.processor = new html5Uploader({
maxVertifyLength : self.maxVertifyLength,
cutVertifyLength: self.cutVertifyLength,
uploadUrl: self.uploadUrl,
params: {
"softId": self.softId,
"width": self._iconWidth,
"height": self._iconHeight,
"isSecret": self.isSecret
},
fileQueueError: function(file, code, msg){
options.error && options.error(file, code);
},
uploadError: function(file, code, msg){
options.error && options.error(file, code);
},
vertifyProgress: function(file, loaded, total){
options.progress && options.progress("vertify", file, {
loaded: loaded,
total: total
});
},
vertifyComplete: function(file){
var uploader = this;
options.success && options.success("vertify", file);
self._vertifyComplete(file, function(obj){
$.extend(file, {
sign: obj.Sign
});
if(obj.FileModel && obj.FileModel.FileKey){
self.processor.cancelUpload(file.id, false);
var result = $.extend({}, file, {
key: obj.FileModel.FileKey,
size: obj.FileModel.Size,
url: obj.FileModel.FileUrl,
typeId: obj.FileModel.Type,
thumbImage: obj.FileModel.ThumbImgUrl,
extension: obj.FileModel.FileExInfo,
filestatus: -4/*COMPLETE*/
});
options.success && options.success("upload", result);
uploader.continueUpload();
}else{
self.processor.addFileParam(file.id, "fileName", file.name);
self.processor.addFileParam(file.id, "fileLength", file.size);
self.processor.addFileParam(file.id, "fileMd5", file.md5+"_"+file.size);
self.processor.addFileParam(file.id, "sign", obj.Sign);
self.processor.startUpload(file);
}
});
},
uploadProgress: function(file, loaded, total, speed, leaveseconds){
options.progress && options.progress("upload", file, {
loaded: loaded,
total: total,
speed: speed,
leaveseconds: leaveseconds
});
},
uploadSuccess: function(file, data){
var d = $.parseJSON(data);
if(d){
var result = $.extend({}, file, {
key: d.FileKey,
url: d.FileUrl,
size: d.Size,
typeId: d.Type,
thumbImage: d.ThumbImgUrl,
extension: d.FileExInfo
});
}
options.success && options.success("upload", result);
},
uploadComplete: function(file){
this.continueUpload(file && file.filestatus);
},
continueUpload: function(filestatus){
file_index++;
upload(file_index, filestatus);
}
});
upload(file_index);
}
},
showDialog: function(callback, options){
var self = this;
options = $.extend({
fileType: 0,
simpleMode: false,
beforeHide: function(){
self.processor && self.processor.cancelUpload();
}
},options);
var blankImage = self.baseDir +'images/blank.gif';
var folders = [
];
var fileState = {
Error:-1,
Normal: 0,
Vertify:1,
Upload:2,
Complete:3,
Cancel:4
}
var getFolderPath = function(code){
var arr = [];
for(var i in folders){
if(folders[i].code.length <= code.length && code.indexOf(folders[i].code)==0){
arr.push(folders[i].name +'\\');
if(folders[i].code.length == code.length){
break;
}
}
}
return arr.join('');
}
var refreshFolders = function(mode, code){
var arr = [];
var path = "";
var curCode = code;
if(folders.length>0){
if(code){
path = getFolderPath(code);
}else{
path = folders[0].name+"\\";
curCode = folders[0].code;
}
}
code = code || self.rootFolderCode;
for(var i in folders){
if(folders[i].code.length>code.length + self.codeLevelLength){
break;
}
if(folders[i].code.length == code.length + self.codeLevelLength){
arr.push('
'+ folders[i].name +'');
}
}
var html = arr.join('');
var bindEvent = function(dropdown){
dropdown.find("li i").mousedown(function(){
if($(this).hasClass("pt-expand")){
$(this).removeClass("pt-expand").addClass("pt-collapse");
}else if($(this).hasClass("pt-collapse")){
$(this).removeClass("pt-collapse").addClass("pt-expand");
}
return false;
})
dropdown.find("a").mousedown(function(e){
var code = $(this).attr("data-code");
var exp = $(this).parents(".pt-folders").prev(".pt-explorer");
if(code == exp.attr("data-code")) return;
exp.attr("data-code", code).find("b").text(getFolderPath(code));
if(exp.parents(".pt-select").length>0){
refreshFiles(code);
}
e.preventDefault();
}).click(function(){
return false;
});
}
if(mode!="upload"){
var explorer = container.find(".pt-upload .pt-explorer").attr("data-code", curCode);
if(curCode){
var f = explorer.find("b").text(path).end()
.next(".pt-folders").children("ul").append(html).end();
bindEvent(f);
}
}
if(mode!="select"){
var explorer = container.find(".pt-select .pt-explorer").attr("data-code", curCode);
if(curCode){
var f = explorer.find("b").text(path).end()
.next(".pt-folders").children("ul").append(html).end();
bindEvent(f);
if(curCode.length>2*self.codeLevelLength){
explorer.find("span").removeClass("pt-disabled");
}else{
explorer.find("span").addClass("pt-disabled");
}
}
}
}
var refreshFiles = function(code, sort){
if(!code){
code = container.find(".pt-select .pt-explorer").attr("data-code");
}
var files = container.find(".pt-select .pt-files>ul").empty();
if(code){
var size = {width:self._iconWidth, height:self._iconHeight};
if(container.find(".pt-select .pt-files").hasClass("pt-iconmode")){
size.width = 82;
size.height = 73;
}
Passport.postBack({
url: self.apiUrl,
type: "GET",
dataType: "jsonp",
data: $.param({
"pcode": code,
"fileType": options.fileType,
"imgW": size.width,
"imgH": size.height,
"orderType": sort || 2
}),
success: function(data){
if(data && data.length>0){
var arr = [];
for(var i in data){
var ext = "";
if(data[i].FileKey.indexOf(".")>0){
ext = data[i].FileKey.substring(data[i].FileKey.lastIndexOf(".")+1).toLowerCase();
}
var imgUrl = blankImage;
if(data[i].Type == 1){
imgUrl = data[i].ThumbImgUrl;
}
arr.push($('\
\
'+ data[i].CreatedTime +'\
'+ getFileSize(data[i].Size) +'\
\
\

\
'+ data[i].Name +'
\
\
').click(function(e){
if(e.target.tagName == 'A' || e.target.tagName == 'INPUT') return;
if(!$(this).find("input").attr("checked")){
$(this).find("input").attr("checked", true);
}
}).data("data-file", {
key: data[i].FileKey,
name: data[i].Name,
size: data[i].Size,
url: data[i].FileUrl,
type: data[i].Name && data[i].Name.substr(data[i].Name.lastIndexOf('.')),
typeId: data[i].Type,
thumbImage: data[i].ThumbImgUrl,
extension: data[i].FileExInfo
}));
}
$.each(arr, function(){
files.append(this);
});
}
}
});
}
}
var getFileInfo = function(file){
var fileId = typeof(file) == "object" ? file.id : file;
var fileItem = container.find(".pt-upload .pt-files li[data-id='"+ fileId +"']");
if(fileItem.length>0){
return fileItem.data("data-file");
}
return null;
}
var setFileInfo = function(file, name, value){
var fileItem = container.find(".pt-upload .pt-files li[data-id='"+ file.id +"']");
if(fileItem.length>0){
var datafile = fileItem.data("data-file");
if(name){
var obj = {};
if(typeof name == "string"){
obj[name] = value;
}else{
obj = name;
}
if(datafile){
$.extend(datafile, file, obj);
}else{
fileItem.data("data-file", $.extend(file, obj));
}
}else{
fileItem.data("data-file", file);
}
}
}
var updateFileItem = function(state, file, tag){
var files = container.find(".pt-upload .pt-files");
var fileItem = files.find("li[data-id='"+ file.id +"']");
if(fileItem.length==0){
if(files.children("ul").length==0){
files.children(".pt-desc").hide();
files.append('');
}
var ext = "";
if(file.name.indexOf(".")>=0){
ext = file.name.substring(file.name.lastIndexOf(".")+1).toLowerCase();
}
var imgUrl = blankImage;
var imgExts = ".jpeg.jpg.bmp.gif.png";
if(imgExts.indexOf('.'+ext)>=0){
imgUrl = file.name;
}
fileItem = $('\
\
\
\
\
'+ file.name +'\
\
\
\
\
取消\
\
\
');
files.children("ul").append(fileItem);
fileItem.find(".pt-filecancel>a").click(function(){
var item = $(this).parents("li.pt-file");
var fileId = item.attr("data-id");
item.removeAttr("data-id").fadeOut(function(){
$(this).remove();
if(files.children("ul").children().length==0){
files.children("ul").remove();
files.children(".pt-desc").show();
}
});
if(container.find(".pt-upload .pt-files li.pt-filewait").length==0){
dialog.panel.find(".pt-foot>a.pt-button").removeClass("pt-disabled");
}
self.processor.cancelUpload(fileId, false);
return false;
})
}
switch(state){
case fileState.Error:
fileItem.removeClass("pt-filevertify pt-fileupload").find(".pt-filestate").html(''+ (tag || "上传失败。") +'');
break;
case fileState.Vertify:
var progress = '';
if(tag){
var percent = parseInt(tag.bytes * 100/tag.total);
if(percent>=100) percent= 99;
progress = '('+ percent + '%)';
}
fileItem.removeClass("pt-filewait").addClass("pt-filevertify").find(".pt-filestate").html('正在检测文件...'+ progress +'');
break;
case fileState.Upload:
if(fileItem.hasClass("pt-filevertify")){
fileItem.removeClass("pt-filevertify").addClass("pt-fileupload").find(".pt-filestate").html('已上传:速度:剩余时间:');
}else if(tag){
fileItem.find("b.pt-filesize").text(getFileSize(tag.bytes));
if(tag.speed>=0){
fileItem.find("b.pt-filespeed").text(getFileSize(tag.speed) +'/s');
}
if(tag.leaveSeconds>=0){
fileItem.find("b.pt-filetime").text(formatTime(tag.leaveSeconds));
}
var percent = parseInt(tag.bytes * 100/tag.total);
if(percent>=100) percent= 99;
fileItem.find(".pt-fileprogress>span").css("width",percent+'%');
fileItem.find(".pt-filecancel>span").text(percent+'%');
}
break;
case fileState.Complete:
fileItem.removeClass("pt-filevertify pt-fileupload").addClass("pt-filecomplete").find(".pt-filestate").html(!options.simpleMode ? '上传成功!文件已保存至“'+ tag +'”。' : "上传成功!");
var iconlink = fileItem.find("a.pt-fileicon").attr({"target":"_blank", "href": file.url});
if(file.typeId == 1 && file.thumbImage){
iconlink.removeClass("pt-file-unknownimg")
.children("img").attr("src", file.thumbImage);
}
fileItem.children("label").html('');
fileItem.click(function(e){
if(e.target.tagName == 'A' || e.target.tagName == 'INPUT') return;
if(!$(this).find("input").attr("checked")){
$(this).find("input").attr("checked", true);
}
})
break;
case fileState.Cancel:
fileItem.removeClass("pt-filevertify pt-fileupload pt-filecomplete").find(".pt-filestate").html('已取消');
break;
default:
fileItem.addClass("pt-filewait")
.find(".pt-filestate").html('等待上传');
break;
}
}
var container = $('\
\
\
\
\
\
\
\
\
'+ (!options.simpleMode ? '
请点击按钮添加需要上传的文件
' : '') + '\
'+ (self.useHtml5Feature && supportHtml5 ? '
(试试将电脑里的文件拖拽到这里)' : '') + '\
\
\
\
\
');
var dialog = Passport.Dialog.show(container, ["完成"], function(){
if(callback){
var files = [];
container.find(".pt-tabpages").children(".pt-active").find(".pt-files input:checked").each(function(){
var file = $(this).parents("li[data-id]").data("data-file");
files.push({
key: file.key,
name: file.name,
size: file.size,
url: file.url,
md5: file.md5,
type: file.typeId,
thumbImage: file.thumbImage,
extension: file.extension
});
})
return callback(files);
}
}, options);
if(!options.simpleMode){
refreshFolders();
refreshFiles();
container.find(".pt-tabbar>span").click(function(){
if(!$(this).hasClass("pt-active")){
$(this).siblings(".pt-active").removeClass();
$(this).addClass("pt-active");
var pages = $(this).parent(".pt-tabbar").next().children();
container.find(".pt-folders").stop().hide();
var index = $(this).index();
if(index == 0){
container.find(".pt-select").fadeOut("fast", function(){
if($.browser && $.browser.msie && parseInt($.browser.version)<8){
container.find(".pt-upload").addClass("pt-active").show();
}else{
container.find(".pt-upload").addClass("pt-active").css("visibility","visible");
}
$(this).removeClass("pt-active");
}); ;
}else{
if($.browser && $.browser.msie && parseInt($.browser.version)<8){
container.find(".pt-upload").removeClass("pt-active").hide();
}else{
container.find(".pt-upload").removeClass("pt-active").css("visibility","hidden");
}
container.find(".pt-select").addClass("pt-active").fadeIn("fast");
}
}
})
container.find(".pt-explorer").click(function(){
var explorer = $(this);
if(!explorer.hasClass("pt-disabled")){
var padleft = (explorer.children("span[data-block]").width()||-1) + 1;
var folders = explorer.next(".pt-folders").css({
width:explorer.width() - padleft,
left:explorer.offset().left-explorer.parent().offset().left + padleft,
top:explorer.offset().top-explorer.parent().offset().top+explorer.height()+2
});
if(folders.is(":hidden")){
folders.slideDown("fast");
}
container.parents("body").bind("mousedown", function(e){
folders.slideUp("fast");
})
}
return false;
})
container.find(".pt-select a.pt-sortbtn").click(function(e){
if(!$(this).hasClass("pt-active")){
if($(this).children("i").hasClass("pt-iconmode")){
$(this).parent(".pt-toolbar").next(".pt-files").addClass("pt-iconmode");
}else{
$(this).parent(".pt-toolbar").next(".pt-files").removeClass("pt-iconmode");
}
$(this).siblings("a.pt-active").removeClass("pt-active");
$(this).addClass("pt-active");
refreshFiles(null, $(this).attr("data-sort"));
}
e.preventDefault();
})
container.find(".pt-select .pt-explorer span").click(function(){
return false;
})
}
self.fileQueued = function(file){
if(container.find(".pt-upload li[data-id='"+ file.id +"']").length==0){
if(!Passport.userInfo.id || !Passport.isLogin){
updateFileItem(fileState.Error, file, "用户未登录或登录已超时");
return;
}
if(container.find("li.pt-fileupload,li.pt-filevertify").length>0){
updateFileItem(fileState.Normal, file);
setFileInfo(file);
}else{
updateFileItem(fileState.Vertify, file);
container.find(".pt-upload .pt-explorer").addClass("pt-disabled")
.next(".pt-folders").stop().hide();
dialog.panel.find(".pt-foot>a.pt-button").addClass("pt-disabled");
setFileInfo(file);
self.processor.startVertify(file.id);
}
}
}
self.fileQueueError = function(file, code, err){
var msg = "";
switch (code) {
case -100/*QUEUE_LIMIT_EXCEEDED*/:
msg = "\u4e0a\u4f20\u6587\u4ef6\u6570\u91cf\u8d85\u8fc7\u603b\u9650\u5b9a\u4e2a\u6570\uff01\n" + (err === 0 ? "": "\u8fd8\u53ef\u4ee5\u9009\u62e9 " + (err > 1 ? err + " \u4e2a\u6587\u4ef6.": "1\u4e2a\u6587\u4ef6."));
break;
case -110/*FILE_EXCEEDS_SIZE_LIMIT*/:
msg = '\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\uFF0C\u8BF7\u63A7\u5236\u572820M\u4EE5\u5185\u3002 ';
break;
case -120/*ZERO_BYTE_FILE*/:
msg = "\u65e0\u6cd5\u4e0a\u4f20\u7a7a\u6587\u4ef6\u6216\u6587\u4ef6\u5939";
break;
case -130/*INVALID_FILETYPE*/:
msg = "\u60a8\u9009\u62e9\u7684\u6587\u4ef6\u7c7b\u578b\u6709\u8bef\uff01";
break;
default:
file !== null && (msg = "\u53d1\u751f\u672a\u77e5\u9519\u8bef\uff01")
}
file && msg && updateFileItem(fileState.Error, file, msg);
}
self.vertifyProgress = function(file, bytes, total){
updateFileItem(fileState.Vertify, file, {bytes:bytes,total:total});
}
self.uploadStart = function(file){
updateFileItem(fileState.Vertify, file);
}
self.uploadProgress = function(file, bytes, total, speed, leaveSeconds){
updateFileItem(fileState.Upload, file, {bytes:bytes,total:total, speed: speed, leaveSeconds:leaveSeconds });
}
self.uploadError = function(file, code, err){
var msg = "";
switch (code) {
case -280/*FILE_CANCELLED*/:
msg = "\u5df2\u53d6\u6d88\u6587\u4ef6\u4e0a\u4f20";
return;
case -200/*HTTP_ERROR*/:
msg = "\u7f51\u7edc\u6709\u95ee\u9898\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5\u4e0a\u4f20";
break;
case -220/*IO_ERROR*/:
msg = "\u6587\u4ef6\u8bfb\u53d6\u6709\u95ee\u9898";
break;
case -260/*SPECIFIED_FILE_ID_NOT_FOUND*/:
msg = "\u6b64\u6587\u4ef6\u4e0d\u5728\u4e0a\u4f20\u961f\u5217\uff0c\u8bf7\u91cd\u65b0\u4e0a\u4f20";
break;
case -290/*UPLOAD_STOPPED*/:
msg = "\u4e0a\u4f20\u4e2d\u6b62";
break;
default:
msg = err || "\u5bf9\u4e0d\u8d77\uff0c\u4e0a\u4f20\u5931\u8d25\uff01"
}
updateFileItem(fileState.Error, file, msg);
}
self.vertifyComplete = function(file){
self._vertifyComplete(file, function(obj){
setFileInfo(file, "sign", obj.Sign);
if(obj.FileModel && obj.FileModel.FileKey){
self.processor.cancelUpload(file.id, false);
setFileInfo(file, {
key: obj.FileModel.FileKey,
size: obj.FileModel.Size,
url: obj.FileModel.FileUrl,
typeId: obj.FileModel.Type,
thumbImage: obj.FileModel.ThumbImgUrl,
extension: obj.FileModel.FileExInfo,
filestatus: -4/*COMPLETE*/
});
self.uploadComplete(file);
}else{
self.processor.addFileParam(file.id, "fileName", file.name);
self.processor.addFileParam(file.id, "fileLength", file.size);
self.processor.addFileParam(file.id, "fileMd5", file.md5+"_"+file.size);
self.processor.addFileParam(file.id, "sign", obj.Sign);
self.processor.startUpload(file.id);
}
})
}
self.uploadSuccess = function(file, data, rps){
var d = $.parseJSON(data);
if(d){
setFileInfo(file, {
key: d.FileKey,
url: d.FileUrl,
size: d.Size,
typeId: d.Type,
thumbImage: d.ThumbImgUrl,
extension: d.FileExInfo
});
}
}
self.continueUpload = function(){
var explorer = container.find(".pt-upload .pt-explorer");
if(container.find(".pt-upload li.pt-filevertify[data-id],.pt-upload li.pt-fileupload[data-id]").length>0) {
return;
}
if(container.find(".pt-upload .pt-files li.pt-filewait").length>0){
var nextFile = self.processor.getFile();
if(nextFile){
updateFileItem(fileState.Vertify, nextFile);
self.processor.startVertify(nextFile.id);
}
}else{
explorer.removeClass("pt-disabled");
dialog.panel.find(".pt-foot>a.pt-button").removeClass("pt-disabled");
}
}
self.uploadComplete = function(f){
file = getFileInfo(f);
if(file && file.filestatus){
var explorer = container.find(".pt-upload .pt-explorer");
var folder_code = explorer.attr("data-code");
var continueUpload = function(){
if(!options.simpleMode && folder_code == container.find(".pt-select .pt-explorer").attr("data-code")){
refreshFiles(folder_code);
}
self.continueUpload();
}
switch(file.filestatus){
case -4/*COMPLETE*/:
if(file.key){
if(!options.simpleMode){
Passport.postBack({
url: self.apiUrl,
type: "GET",
dataType: "jsonp",
data: $.param({
"softId": self.softId,
"folderCode": folder_code,
"fileKey": file.key,
"fileName": file.name,
"fileLength": file.size,
"fileType": file.typeId,
"fileExInfo": file.extension
}),
success: function(){
updateFileItem(fileState.Complete, file, explorer.find("b").text());
continueUpload();
}
});
}else{
updateFileItem(fileState.Complete, file, explorer.find("b").text());
continueUpload();
}
}else{
throw new Error("未获取到file.key");
}
break;
case -5/*CANCELLED*/:
updateFileItem(fileState.Cancel, file);
continueUpload();
break;
default:
continueUpload();
break;
}
}
}
var allowFileType = getFileType(options.fileType)
if(html5Uploader && self.useHtml5Feature){
var file_input = $('');
if(allowFileType.accept){
file_input.attr("accept", allowFileType.accept);
}
file_input.appendTo('span.pt-browser>a');
var appendFiles = function(files){
for(var i=0; i<=files.length-1; i++){
var file = files[i];
file.id = createFileId();
self.fileQueued(file);
}
}
file_input.bind("change", function(e){
if(this.files.length>0){
appendFiles(this.files);
file_input.val("");
}
});
var elemfiles = container.find(".pt-upload .pt-files");
self.processor = new html5Uploader({
maxVertifyLength : self.maxVertifyLength,
cutVertifyLength: self.cutVertifyLength,
uploadUrl: self.uploadUrl,
params: {
"softId": self.softId,
"width": self._iconWidth,
"height": self._iconHeight,
"isSecret": self.isSecret
},
getFile: function(fileId){
if(fileId){
return getFileInfo(fileId);
}else{
if(elemfiles.find('li.pt-filewait').length>0){
return elemfiles.find('li.pt-filewait').eq(0).data("data-file");
}else{
return elemfiles.find("li.pt-filevertify,li.pt-fileupload").eq(0).data("data-file");
}
}
return null;
},
fileQueueError: self.fileQueueError,
uploadError: self.uploadError,
vertifyProgress: self.vertifyProgress,
vertifyComplete: self.vertifyComplete,
uploadProgress: self.uploadProgress,
uploadSuccess: self.uploadSuccess,
uploadComplete: self.uploadComplete,
continueUpload: self.continueUpload
});
dialog.panel.bind({
"dragover": function(e){
if($(e.target).is('.pt-upload .pt-files') || $(e.target).parents(".pt-upload .pt-files").length>0){
e.preventDefault();
elemfiles.addClass("pt-files-dragging");
}else{
return false;
}
},
"drop": function(e){
if($(e.target).is('.pt-upload .pt-files') || $(e.target).parents(".pt-upload .pt-files").length>0){
appendFiles(event.dataTransfer.files);
elemfiles.removeClass("pt-files-dragging");
}
return false;
},
"dragleave": function(e){
if($(e.target).is('.pt-upload .pt-files') || $(e.target).parents(".pt-upload .pt-files").length>0){
elemfiles.removeClass("pt-files-dragging");
}else{
return false;
}
}
});
}else{
var swfVersion = Passport.getSwfVersion();
if(swfVersion && parseFloat(swfVersion)<10){
Passport.Dialog.alert('Flash版本要求在10.0以上。点击这里安装');
return;
}
self.processor = new SWFUpload({
upload_url: self.uploadUrl,
post_params: {
"softId": self.softId,
"width": self._iconWidth,
"height": self._iconHeight,
"isSecret": self.isSecret
},
flash_url: self.baseDir + "swfupload.swf",
assume_success_timeout: 0,
file_types: allowFileType.filetypes,
file_types_description: allowFileType.desc,
//file_size_limit: self.limitSize + "KB",
file_upload_limit: 0,
file_queue_limit: 0,
max_vertify_length: self.maxVertifyLength,
cut_vertify_length: self.cutVertifyLength,
button_placeholder: container.find("span.pt-browser>a").get(0),
button_image_url: self.baseDir + "images/uploader.png",
button_width: self.btnWidth,
button_height: self.btnHeight,
button_window_mode: "transparent",
button_text: "",
debug:false,
button_cursor: SWFUpload.CURSOR.HAND,
file_queued_handler : self.fileQueued,
file_queue_error_handler : self.fileQueueError,
//file_dialog_start_handler : self.fileDialogStart,
//file_dialog_complete_handler : self.fileDialogComplete,
vertify_progress_handler : self.vertifyProgress,
vertify_complete_handler : self.vertifyComplete,
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
});
}
},
_iconWidth: 30,
_iconHeight: 28,
_vertifyComplete : function(file, callback){
var self = this;
Passport.postBack({
url: self.apiUrl,
type: "GET",
dataType: "jsonp",
data: $.param({
"softId": self.softId,
"fileName": file.name,
"fileLength": file.size,
"fileMd5": file.md5 + "_"+ file.size,
"width": self._iconWidth,
"height": self._iconHeight,
"isSecret": self.isSecret
}),
success: function(obj){
callback && callback(obj);
}
});
}
};
});
}
if (window.Passport) {
main(window.Passport);
}else if(typeof define === 'function'){
define(function (require, exports) {
var Passport = require("Passport");
window.Passport = Passport;
return main(Passport);
});
}
})();