信呼OA版本v2.3.8
This commit is contained in:
345
web/res/js/jquery-rockupload.js
vendored
Normal file
345
web/res/js/jquery-rockupload.js
vendored
Normal file
@@ -0,0 +1,345 @@
|
||||
/**
|
||||
* 无刷新上传
|
||||
* createname:雨中磐石
|
||||
* homeurl:http://www.rockoa.com/
|
||||
* Copyright (c) 2016 rainrock (xh829.com)
|
||||
* Date:2016-01-01
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
maxupgloble = 0;
|
||||
function rockupload(opts){
|
||||
var me = this;
|
||||
var opts = js.apply({inputfile:'',initpdbool:false,initremove:true,uptype:'*',maxsize:5,onchange:function(){},onchangebefore:function(){},upurl:'',onprogress:function(){},urlparams:{},updir:'',onsuccess:function(){},quality:0.7,xu:0,fileallarr:[],autoup:true,oldids:'',
|
||||
onerror:function(){},fileidinput:'fileid',
|
||||
onabort:function(){},
|
||||
allsuccess:function(){}
|
||||
},opts);
|
||||
this._init=function(){
|
||||
for(var a in opts)this[a]=opts[a];
|
||||
//加载最大可上传大小
|
||||
if(maxupgloble==0)$.getJSON(js.apiurl('login','getmaxup'),function(res){
|
||||
try{
|
||||
if(res.code==200){
|
||||
var maxup = parseFloat(res.data.maxup);
|
||||
me.maxsize= maxup;
|
||||
maxupgloble = maxup;
|
||||
}}catch(e){}
|
||||
});
|
||||
if(maxupgloble>0)this.maxsize= maxupgloble;
|
||||
|
||||
if(!this.autoup)return;
|
||||
if(this.initremove){
|
||||
$('#'+this.inputfile+'').parent().remove();
|
||||
var s='<form style="display:none;height:0px;width:0px" name="form_'+this.inputfile+'"><input type="file" id="'+this.inputfile+'"></form>';
|
||||
$('body').append(s);
|
||||
}
|
||||
$('#'+this.inputfile+'').change(function(){
|
||||
me.change(this, 0);
|
||||
});
|
||||
};
|
||||
this.reset=function(){
|
||||
if(!this.autoup)return;
|
||||
var fids = 'form_'+this.inputfile+'';
|
||||
if(document[fids])document[fids].reset();
|
||||
};
|
||||
this.setparams=function(ars){
|
||||
this.oparams = js.apply({uptype:this.uptype}, ars);
|
||||
this.uptype=this.oparams.uptype;
|
||||
};
|
||||
this.setuptype=function(lx){
|
||||
this.uptype = lx;
|
||||
};
|
||||
this.setupurl=function(ul){
|
||||
this.upurl = ul;
|
||||
};
|
||||
this.click=function(ars){
|
||||
if(this.upbool)return;
|
||||
this.setparams(ars);
|
||||
get(this.inputfile).click();
|
||||
};
|
||||
this.clear=function(){
|
||||
this.fileallarr = [];
|
||||
this.filearr = {};
|
||||
this.xu = 0;
|
||||
$('#'+this.fileview+'').html('');
|
||||
};
|
||||
this.changenext=function(max){
|
||||
var nxd = this.allfilesnow+1;
|
||||
if(!max)max = 20;
|
||||
if(nxd>=this.allfileslen || nxd>=max){
|
||||
if(nxd>1)js.msg('success','共有'+nxd+'个文件全部上传完成');
|
||||
}else{
|
||||
this.change(this.allfilesobj, nxd);
|
||||
}
|
||||
}
|
||||
this.change=function(o1,nxd){
|
||||
if(!o1.files){
|
||||
js.msg('msg','当前浏览器不支持上传1');
|
||||
return;
|
||||
}
|
||||
if(!nxd)nxd=0;
|
||||
var f = o1.files[nxd];
|
||||
this.allfilesobj = o1;
|
||||
this.allfileslen = o1.files.length;
|
||||
this.allfilesnow = nxd;
|
||||
if(!f || f.name=='/')return;
|
||||
var a = {filename:f.name,filesize:f.size,filesizecn:js.formatsize(f.size)};
|
||||
if(a.filesize<=0){
|
||||
js.msg('msg',''+f.name+'不存在');
|
||||
return;
|
||||
}
|
||||
if(this.isfields(a))return;
|
||||
if(f.size>this.maxsize*1024*1024){
|
||||
this.reset();
|
||||
js.msg('msg','文件不能超过'+this.maxsize+'MB,当前文件'+a.filesizecn+'');
|
||||
return;
|
||||
}
|
||||
var filename = f.name;
|
||||
var fileext = filename.substr(filename.lastIndexOf('.')+1).toLowerCase();
|
||||
if(!this.uptype)this.uptype='*';
|
||||
if(this.uptype=='image')this.uptype='jpg,gif,png,bmp,jpeg';
|
||||
if(this.uptype=='word')this.uptype='doc,docx,pdf,xls,xlsx,ppt,pptx,txt';
|
||||
if(this.uptype!='*'){
|
||||
var upss=','+this.uptype+',';
|
||||
if(upss.indexOf(','+fileext+',')<0){
|
||||
js.msg('msg','禁止文件类型,请选择'+this.uptype+'');
|
||||
return;
|
||||
}
|
||||
}
|
||||
var nstr = this.onchangebefore(f);
|
||||
if(nstr){js.msg('msg',nstr);return;}
|
||||
|
||||
a.fileext = fileext;
|
||||
a.isimg = js.isimg(fileext);
|
||||
if(a.isimg)a.imgviewurl = this.getimgview(o1);
|
||||
a.xu = this.xu;
|
||||
a.f = f;
|
||||
for(var i in this.oparams)a[i]=this.oparams[i];
|
||||
this.filearr = a;
|
||||
var zc=this.fileallarr.push(a);
|
||||
|
||||
//如果是图片压缩一下超过1M
|
||||
if(f.size>1024*1024 && a.isimg && this.quality<1){
|
||||
this.compressimg(a.imgviewurl,f,function(nf){
|
||||
a.filesize = nf.size;
|
||||
a.filesizecn = js.formatsize(nf.size);
|
||||
me.fileallarr[zc-1].f = nf;
|
||||
me.nnonchagn(a, nf, zc);
|
||||
});
|
||||
}else{
|
||||
this.nnonchagn(a, f, zc);
|
||||
}
|
||||
};
|
||||
this.nnonchagn=function(a,f,zc){
|
||||
this.xu++;
|
||||
this.onchange(a);
|
||||
this.reset();
|
||||
if(!this.autoup){
|
||||
var s='<div style="padding:3px;font-size:14px;border-bottom:1px #dddddd solid"><font>'+a.filename+'</font>('+a.filesizecn+') <span style="color:#ff6600" id="'+this.fileview+'_'+a.xu+'"></span> <a oi="'+(zc-1)+'" id="gm'+this.fileview+'_'+a.xu+'" href="javascript:;">改名</a> <a onclick="$(this).parent().remove()" href="javascript:;">×</a></div>';
|
||||
$('#'+this.fileview+'').append(s);
|
||||
$('#gm'+this.fileview+'_'+a.xu+'').click(function(){
|
||||
me.s_gaiming(this);
|
||||
});
|
||||
return;
|
||||
}
|
||||
this._startup(f);
|
||||
};
|
||||
this.s_gaiming=function(o1){
|
||||
var o,oi,one,fa;
|
||||
o = $(o1);
|
||||
oi = parseFloat($(o1).attr('oi'));
|
||||
fa = this.fileallarr[oi];
|
||||
one= o.parent().find('font').html().replace('.'+fa.fileext+'','');
|
||||
if(get('confirm_main')){
|
||||
var nr = prompt('新文件名', one);
|
||||
if(nr){
|
||||
var newfie = nr+'.'+fa.fileext;
|
||||
o.parent().find('font').html(newfie);
|
||||
me.fileallarr[oi].filename=newfie;
|
||||
}
|
||||
}else{
|
||||
js.prompt('修改文件名','新文件名', function(jg,nr){
|
||||
if(jg=='yes' && nr){
|
||||
var newfie = nr+'.'+fa.fileext;
|
||||
o.parent().find('font').html(newfie);
|
||||
me.fileallarr[oi].filename=newfie;
|
||||
}
|
||||
}, one);
|
||||
}
|
||||
};
|
||||
this.compressimg=function(path,fobj,call){
|
||||
var img = new Image();
|
||||
img.src = path;
|
||||
if(!call)call=function(){};
|
||||
img.onload = function(){
|
||||
var that = this;
|
||||
var w = that.width,
|
||||
h = that.height,
|
||||
scale = w / h;
|
||||
var quality = me.quality;//压缩图片质量
|
||||
var canvas = document.createElement('canvas');
|
||||
var ctx = canvas.getContext('2d');
|
||||
var anw = document.createAttribute("width");
|
||||
anw.nodeValue = w;
|
||||
var anh = document.createAttribute("height");
|
||||
anh.nodeValue = h;
|
||||
canvas.setAttributeNode(anw);
|
||||
canvas.setAttributeNode(anh);
|
||||
ctx.drawImage(that, 0, 0, w, h);
|
||||
var base64 = canvas.toDataURL(fobj.type, quality);
|
||||
var nfobj = me.base64toblob(base64);
|
||||
call(nfobj);
|
||||
}
|
||||
};
|
||||
this.base64toblob=function(urlData){
|
||||
var arr = urlData.split(','), mime = arr[0].match(/:(.*?);/)[1],
|
||||
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
|
||||
while(n--){
|
||||
u8arr[n] = bstr.charCodeAt(n);
|
||||
}
|
||||
return new Blob([u8arr], {type:mime});
|
||||
};
|
||||
this.getimgview=function(o1){
|
||||
try{
|
||||
return URL.createObjectURL(o1.files.item(this.allfilesnow));
|
||||
}catch(e){return false;}
|
||||
};
|
||||
this.isfields=function(a){
|
||||
var bo = false,i,d=this.fileallarr;
|
||||
for(i=0;i<d.length;i++){
|
||||
if(this.fileviewxu(d[i].xu) && d[i].filename==a.filename && d[i].filesize==a.filesize){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return bo;
|
||||
};
|
||||
this.sendbase64=function(nr,ocs){
|
||||
this.filearr=js.apply({filename:'截图.png',filesize:0,filesizecn:'',isimg:true,fileext:'png'}, ocs);
|
||||
this._startup(false, nr);
|
||||
};
|
||||
this.start=function(){
|
||||
return this.startss(0);
|
||||
};
|
||||
this.startss=function(oi){
|
||||
if(oi>=this.xu){
|
||||
var ids=''+this.oldids+'';
|
||||
var a = this.fileallarr;
|
||||
for(var i=0;i<a.length;i++)if(a[i].id)ids+=','+a[i].id+'';
|
||||
if(ids!='' && ids.substr(0,1)==',')ids=ids.substr(1);
|
||||
try{if(form(this.fileidinput))form(this.fileidinput).value=ids;}catch(e){};
|
||||
this.allsuccess(this.fileallarr, ids); //必须全部才触发
|
||||
return false;
|
||||
}
|
||||
this.nowoi = oi;
|
||||
var f=this.fileallarr[oi];
|
||||
if(!f || !this.fileviewxu(f.xu)){
|
||||
return this.startss(this.nowoi+1);
|
||||
}
|
||||
this.filearr = f;
|
||||
this.onsuccessa=function(f,str){
|
||||
var dst= js.decode(str);
|
||||
if(dst.id){
|
||||
this.fileallarr[this.nowoi].id=dst.id;
|
||||
this.fileallarr[this.nowoi].filepath=dst.filepath;
|
||||
}else{
|
||||
js.msg('msg', str);
|
||||
this.fileviewxu(this.nowoi, '<font color=red>失败1</font>');
|
||||
}
|
||||
this.startss(this.nowoi+1);
|
||||
}
|
||||
this.onprogressa=function(f,bil){
|
||||
this.fileviewxu(this.nowoi, ''+bil+'%');
|
||||
}
|
||||
this.onerror=function(){
|
||||
this.fileviewxu(this.nowoi, '<font color=red>失败0</font>');
|
||||
this.startss(this.nowoi+1);
|
||||
}
|
||||
this._startup(f.f);
|
||||
return true;
|
||||
};
|
||||
this.fileviewxu=function(oi,st){
|
||||
if(typeof(st)=='string')$('#'+this.fileview+'_'+oi+'').html(st);
|
||||
return get(''+this.fileview+'_'+oi+'');
|
||||
};
|
||||
//初始化文件防止重复上传
|
||||
this._initfile=function(f){
|
||||
var a = this.filearr,d={'filesize':a.filesize,'fileext':a.fileext};
|
||||
if(!a.isimg)d.filename=jm.base64encode(a.filename);
|
||||
var url = js.apiurl('upload','initfile', d);
|
||||
$.getJSON(url, function(ret){
|
||||
if(ret.success){
|
||||
var bstr = ret.data;
|
||||
me.upbool= false;
|
||||
me.onsuccess(a,bstr);
|
||||
}else{
|
||||
me._startup(f,false,true);
|
||||
}
|
||||
});
|
||||
};
|
||||
this._startup=function(fs, nr, bos){
|
||||
this.upbool = true;
|
||||
if(this.initpdbool && fs && !bos){this._initfile(fs);return;}
|
||||
try{var xhr = new XMLHttpRequest();}catch(e){js.msg('msg','当前浏览器不支持2');return;}
|
||||
this.urlparams.maxsize = this.maxsize;
|
||||
if(this.updir)this.urlparams.updir=this.updir;
|
||||
var url = this.upurl;
|
||||
if(!this.upurl)url = js.apiurl('upload','upfile', this.urlparams);
|
||||
xhr.open('POST', url, true);
|
||||
xhr.onreadystatechange = function(){me._statechange(this);};
|
||||
xhr.upload.addEventListener("progress", function(evt){me._onprogress(evt, this);}, false);
|
||||
xhr.addEventListener("load", function(){me._onsuccess(this);}, false);
|
||||
xhr.addEventListener("error", function(){me._error(false,this);}, false);
|
||||
if(nr)fs = this.base64toblob(nr);
|
||||
var fd = new FormData();
|
||||
fd.append('file', fs, this.filearr.filename);
|
||||
xhr.send(fd);
|
||||
this.xhr = xhr;
|
||||
this.upurl = '';
|
||||
};
|
||||
this.onsuccessa=function(){
|
||||
|
||||
};
|
||||
this._onsuccess=function(o){
|
||||
this.upbool = false;
|
||||
var bstr = o.response;
|
||||
if(bstr.indexOf('id')<0 || o.status!=200){
|
||||
this._error(bstr);
|
||||
}else{
|
||||
this.onsuccessa(this.filearr,bstr,o);
|
||||
this.onsuccess(this.filearr,bstr,o);
|
||||
}
|
||||
};
|
||||
this._error=function(ts,xr){
|
||||
this.upbool = false;
|
||||
if(!ts)ts='上传内部错误';
|
||||
this.onerror(ts);
|
||||
};
|
||||
this._statechange=function(o){
|
||||
|
||||
};
|
||||
this.onprogressa=function(){
|
||||
|
||||
};
|
||||
this._onprogress=function(evt){
|
||||
var loaded = evt.loaded;
|
||||
var tot = evt.total;
|
||||
var per = Math.floor(100*loaded/tot);
|
||||
this.onprogressa(this.filearr,per, evt);
|
||||
this.onprogress(this.filearr,per, evt);
|
||||
};
|
||||
this.abort=function(){
|
||||
this.xhr.abort();
|
||||
this.upbool = false;
|
||||
this.onabort();
|
||||
};
|
||||
this._init();
|
||||
}
|
||||
|
||||
|
||||
$.rockupload = function(options){
|
||||
var cls = new rockupload(options,false);
|
||||
return cls;
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
Reference in New Issue
Block a user