(function (){ webos.fileSystem.pan189Upload = { 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(!param.fpMap){ param.fpMap = {} } if(index<0){ index = 0; }else if(index >= param.needFps){ index = param.needFps - 1; } if(param.fpMap && param.fpMap["index"+index]){ return param.fpMap["index"+index]; } let end = (index+1)*param.fpSize; if(param.size < end){ end = param.size; } const fp = param.file.slice(index*param.fpSize,end); param.fpMap["index"+index] = {fp:fp,md5:await webos.fileSystem.fileMd5(fp)}; return param.fpMap["index"+index]; }, 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); }, getFpSizeFpl:function (size){ var tenMSize = 10485760; var fpSize = 0; if (size >= 0 && size < 1000 * tenMSize) { //10M fpSize = tenMSize * 1; } else if (1000 * tenMSize >= 0 && size < 2000 * tenMSize) { //20M fpSize = tenMSize * 2; } else if (size >= 2000 * tenMSize && size < 10000 * tenMSize) { //50M fpSize = tenMSize * 5; } else { var n = size / 2000 / tenMSize; n = Math.floor(n); if (size % (2000 * tenMSize) != 0) { n++; } fpSize = tenMSize * n; } var fpSl = size / fpSize; fpSl = Math.floor(fpSl); if (size % fpSize != 0) { fpSl++; } return {fpSize,fpSl}; }, uploadPreCommon:async function (param){ var that = this; if(param.uploadPreRes){ return true; } let postData = { currentType:1, data:{ fileName:param.name, fileSize:param.size, sliceSize:param.fpSize, lazyCheck:1 } }; let dataStr = await webos.request.commonData("fileSystem", "uploadPre",{path:param.path,expand:JSON.stringify(postData),name:param.filePath}); param.lastErrorReqMsg = webos.context.get("lastErrorReqMsg"); param.lastSuccessReqMsg = webos.context.get("lastSuccessReqMsg"); try{ param.uploadPreRes = JSON.parse(dataStr); if(param.uploadPreRes){ return true; } }catch (e){ } return false; }, hexStr2Blob:function (hexStr){ var u8array = new Uint8Array(hexStr.match(/[\da-f]{2}/gi).map(function (h) { return parseInt(h, 16) })); return new Blob([u8array.buffer]); }, blob2Base64:function (blob){ return new Promise(function (success,error){ var reader = new FileReader(); reader.onload = function (e) { success(e.target.result.split(",")[1]) } reader.readAsDataURL(blob); }); }, getHeaderMap:function (headerStr){ var phsz = headerStr.split("&"); var headerMap = {}; for (let i = 0; i < phsz.length; i++) { var ph = phsz[i]; var isz = ph.split("="); var key = isz[0]; isz.splice(0,1); headerMap[key]=isz.join("="); } return headerMap; }, upload:async function (param,progress){ var that = this; if(param.expName){ webos.message.error("文件校验中,操作失败"); return; } if(!param.uploadPreRes){ var fpData = that.getFpSizeFpl(param.size); param.needFps = fpData.fpSl; param.fpSize = fpData.fpSize; var simpleHash = await webos.fileSystem.fileHashSimple(param.file); param.uploadKey = "upload"+simpleHash+param.path; var cache = await webos.fileSystem.getCacheValue(param.uploadKey); if(cache && cache.time > Date.now() - 60*60*1000){ param.uploadPreRes = cache.uploadPreRes; param.currentFp = cache.currentFp; }else{ var flag = await that.uploadPreCommon(param); if(!flag){ param.status = 3; param.msg = param.lastErrorReqMsg; param.statusChange(param); return; } } }; if(!param.checkTransSecond){ param.checkTransSecond = true; new Promise(async function (success,error){ //进行秒传检查 let sliceMd5; let fileMd5 = await webos.fileSystem.fileMd5(param.file); if(param.needFps > 1){ let sliceMd5Plus = ""; for(let i=0;i0){ sliceMd5Plus += "\n"; } sliceMd5Plus += part.md5.toUpperCase() } sliceMd5 = await webos.fileSystem.fileMd5(new Blob([sliceMd5Plus])); }else{ sliceMd5 = fileMd5; } param.sliceMd5Data = sliceMd5; param.fileMd5Data = fileMd5; if(param.hasComplete){ await that.checkComplete(param); }else{ let postData = { currentType:3, data:{ uploadFileId:param.uploadPreRes.uploadFileId, fileMd5:param.fileMd5Data, sliceMd5:param.sliceMd5Data } }; let dataStr = await webos.request.commonData("fileSystem", "uploadPre",{path:param.path,expand:JSON.stringify(postData),name:param.filePath}); let resData = JSON.parse(dataStr); if(resData.fileDataExists == 1){ param.status = 4; if(param.currentXhr){ param.currentXhr.abort(); } await that.checkComplete(param); } } }); } var errMsg; let isFirst = true; for(let i=0;i