(function (){ webos.fileSystem.aliyundriveUpload = { sha1:function (file,fn){ if(!window.sha1){ utils.syncLoadData(webos.sdkUrl+"/sha1.min.js",function(text){ eval(text); }); }; return new Promise(function (success,error){ var reader = new FileReader(); var batch = 1024 * 1024 * 2; var start = 0; var total = file.size; var current = window.sha1; reader.onload = function (event) { try { current = current.update(event.target.result); asyncUpdate(); } catch(e) { error(e); } }; var asyncUpdate = function () { if (start < total) { if(fn){ fn(start,total); } var end = Math.min(start + batch, total); reader.readAsArrayBuffer(file.slice(start, end)); start = end; } else { var dex = current.hex(); success(dex); } }; asyncUpdate(); }); }, base64:function(file){ return new Promise(function(resolve, reject){ const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function (){ let str = reader.result; resolve(str.split(",")[1]); }; reader.onerror=function (error){ reject(error); }; }); }, getFp:async function (index,param){ var that = this; if(index<0){ index = 0; }else if(index >= param.needFps){ index = param.needFps - 1; } let end = (index+1)*param.fpSize; if(param.size < end){ end = param.size; } const fp = param.file.slice(index*param.fpSize,end); const fp_hash = await that.sha1(fp); return {fp:fp,hash:fp_hash}; }, proofCodeCalc:function(m,file){ let that = this; if(!window.BigNumber){ utils.syncLoadData(webos.sdkUrl+"/bignumber.min.js",function(text){ eval(text); }); }; let r = new BigNumber("0x".concat(m)) , i = new BigNumber(file.size) , o = i ? r.mod(i) : new BigNumber(0); let qp = file.slice(o.toNumber(), Math.min(o.plus(8).toNumber(), file.size)); return that.base64(qp); }, uploadPreCommon:async function (type,param){ var that = this; if(param.uploadPreRes){ if(param.uploadPreRes.rapid_upload || param.uploadPreRes.file_id){ return true; } } let postData = { check_name_mode:"overwrite", part_info_list:[], size:param.size, type:"file" }; if(type == 2){ //完整算法模式 param.expName = "校验中0%"; postData.content_hash = await that.sha1(param.file,function (loaded,total){ param.expName = "校验中"+(loaded / total * 100).toFixed(2) + '%'; if(param.callback){ param.callback(param); } }); param.expName = ""; if(param.callback){ param.callback(param); } postData.content_hash = postData.content_hash.toUpperCase(); postData.content_hash_name = "sha1"; postData.proof_version = "v1"; postData.proof_code = await that.proofCodeCalc(param.uploadPreMy,param.file); }else{ //前缀算法模式 postData.pre_hash = await that.sha1(param.file.slice(0,1024)) } let count = 20; if(param.needFps Date.now() - 60*60*1000){ param.uploadPreRes = cache.uploadPreRes; param.currentFp = cache.currentFp; param.uploadUrlMap = cache.uploadUrlMap; }else{ var type = param.needFps>10?3:2; var flag = await that.uploadPreCommon(type,param); if(!flag){ param.uploadPreRes = null; } } }; if(!param.uploadPreRes){ param.status = 3; param.msg = "上传出错"; param.statusChange(param); return; }; if(param.uploadPreRes.rapid_upload){ param.status = 2; param.msg = "上传成功"; param.statusChange(param); return; }; let isFirst = true; for(let i=0;i