1 |
- {"ast":null,"code":"/**\n * Copyright 2019 Huawei Technologies Co.,Ltd.\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\n * this file except in compliance with the License. You may obtain a copy of the\n * License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed\n * under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations under the License.\n *\n */\nimport md5 from 'blueimp-md5';\nimport { Base64 } from 'js-base64';\nimport CryptoJS from 'crypto-js';\nconst minPartSize = 100 * 1024;\nconst defaultPartSize = 9 * 1024 * 1024;\nconst maxPartSize = 5 * 1024 * 1024 * 1024;\nlet wrapCallback = function (callback, log, methodName) {\n callback = callback || function () {};\n let start = new Date().getTime();\n return function (err, result) {\n log.runLog('info', methodName, 'ObsClient cost ' + (new Date().getTime() - start) + ' ms');\n if (Object.prototype.toString.call(err) === '[object String]') {\n return callback(new Error(err), result);\n }\n return callback(err, result);\n };\n};\nlet isFunction = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Function]';\n};\nlet wrapEventCallback = function (eventCallback) {\n eventCallback = eventCallback || function () {};\n return function (t, eventParam, result) {\n if (Object.prototype.toString.call(result) === '[object Error]') {\n return eventCallback(t, eventParam, result);\n }\n if (Object.prototype.toString.call(result) === '[object String]') {\n return eventCallback(t, eventParam, new Error(result));\n }\n if (!result) {\n return;\n }\n if (result.CommonMsg.Status > 300) {\n return eventCallback(t, eventParam, new Error('status:' + result.CommonMsg.Status + ', code:' + result.CommonMsg.Code + ', message:' + result.CommonMsg.Message));\n }\n eventCallback(t, eventParam, result);\n };\n};\nlet calculateUploadCheckpointMD5 = function (uploadCheckpoint) {\n let data = [];\n data.push(uploadCheckpoint.bucket);\n data.push(uploadCheckpoint.key);\n data.push(uploadCheckpoint.sourceFile.name);\n data.push(String(uploadCheckpoint.partSize));\n data.push(String(uploadCheckpoint.partCount));\n data.push(String(uploadCheckpoint.fileStat.fileSize));\n data.push(String(uploadCheckpoint.fileStat.lastModified));\n if (uploadCheckpoint.uploadId) {\n data.push(uploadCheckpoint.uploadId);\n }\n if (uploadCheckpoint.sseC) {\n data.push(uploadCheckpoint.sseC);\n }\n if (uploadCheckpoint.sseCKey) {\n data.push(uploadCheckpoint.sseCKey);\n }\n if (uploadCheckpoint.parts) {\n for (let i = 0; i < uploadCheckpoint.parts.length; i++) {\n let part = uploadCheckpoint.parts[i];\n if (!part) {\n continue;\n }\n data.push(String(part.partNumber));\n data.push(String(part.offset));\n data.push(String(part.partSize));\n data.push(String(part.isCompleted));\n if (part.etag) {\n data.push(String(part.etag));\n }\n }\n }\n return window.btoa(md5(data.join(''), false, true));\n};\nlet abortRequest = function (uploadCheckpoint, funcName, that) {\n if (uploadCheckpoint && uploadCheckpoint.uploadId) {\n that.abortMultipartUpload({\n Bucket: uploadCheckpoint.bucket,\n Key: uploadCheckpoint.key,\n RequestDate: uploadCheckpoint.requestDate,\n UploadId: uploadCheckpoint.uploadId\n }, function (err, result) {\n if (err) {\n that.log.runLog('warn', funcName, 'abort multipart upload failed, bucket:' + uploadCheckpoint.bucket + ', key:' + uploadCheckpoint.key + ', uploadId:' + uploadCheckpoint.uploadId + ', err:' + err);\n return;\n }\n if (result.CommonMsg.Status >= 300) {\n that.log.runLog('warn', funcName, 'abort multipart upload failed, bucket:' + uploadCheckpoint.bucket + ', key:' + uploadCheckpoint.key + ', uploadId:' + uploadCheckpoint.uploadId + ', status:' + result.CommonMsg.Status + ', code:' + result.CommonMsg.Code + ', message:' + result.CommonMsg.Message);\n return;\n }\n delete uploadCheckpoint.uploadId;\n that.log.runLog('warn', funcName, 'abort multipart upload succeed, bucket:' + uploadCheckpoint.bucket + ', key:' + uploadCheckpoint.key + ', uploadId:' + uploadCheckpoint.uploadId);\n });\n }\n};\nlet completedRequest = function (ctx) {\n if (ctx.finishedCount < ctx.uploadCheckpoint.partCount) {\n return;\n }\n if (ctx.isAbort) {\n abortRequest(ctx.uploadCheckpoint, ctx.funcName, ctx.that);\n return ctx.callback('uploadFile failed the upload task is aborted');\n }\n if (ctx.isSuspend) {\n return ctx.callback('the process of uploadFile is suspened, you can retry with the uploadCheckpoint');\n }\n if (ctx.hasError) {\n return ctx.callback('uploadFile finished with error, you can retry with the uploadCheckpoint');\n }\n let parts = [];\n for (let i = 0; i < ctx.uploadCheckpoint.partCount; i++) {\n let part = ctx.uploadCheckpoint.parts[i];\n parts.push({\n PartNumber: part.partNumber,\n ETag: part.etag\n });\n }\n ctx.that.completeMultipartUpload({\n Bucket: ctx.uploadCheckpoint.bucket,\n Key: ctx.uploadCheckpoint.key,\n RequestDate: ctx.uploadCheckpoint.requestDate,\n UploadId: ctx.uploadCheckpoint.uploadId,\n Parts: parts,\n CallbackUrl: ctx.callbackUrl,\n CallbackHost: ctx.callbackHost,\n CallbackBody: ctx.callbackBody,\n CallbackBodyType: ctx.callbackBodyType\n }, function (err, result) {\n let eventParam = {\n bucket: ctx.uploadCheckpoint.bucket,\n key: ctx.uploadCheckpoint.key,\n uploadId: ctx.uploadCheckpoint.uploadId\n };\n if (err) {\n ctx.eventCallback('completeMultipartUploadFailed', eventParam, err);\n return ctx.callback(err);\n }\n if (result.CommonMsg.Status >= 500) {\n ctx.eventCallback('completeMultipartUploadFailed', eventParam, result);\n return ctx.callback(null, result);\n }\n if (result.CommonMsg.Status >= 300 && result.CommonMsg.Status < 500) {\n ctx.eventCallback('completeMultipartUploadAborted', eventParam, result);\n abortRequest(ctx.uploadCheckpoint, ctx.funcName, ctx.that);\n return ctx.callback(null, result);\n }\n ctx.eventCallback('completeMultipartUploadSucceed', eventParam, result);\n ctx.callback(null, result);\n });\n};\nlet startToUploadFile = function (ctx) {\n function cancel() {\n ctx.isSuspend = true;\n for (let i = 0; i < ctx.uploadPartParams.length; i++) {\n let cancelHook = ctx.uploadPartParams[i].cancelHook;\n if (isFunction(cancelHook)) {\n cancelHook();\n }\n }\n }\n ;\n ctx.resumeCallback({\n cancel,\n abort: function () {\n ctx.isAbort = true;\n for (let i = 0; i < ctx.uploadPartParams.length; i++) {\n let abortHook = ctx.uploadPartParams[i].abortHook;\n if (isFunction(abortHook)) {\n abortHook();\n }\n }\n }\n }, ctx.uploadCheckpoint);\n let taskQueue = [];\n let doNext = function () {\n if (taskQueue.length === 0) {\n completedRequest(ctx);\n return;\n }\n while (ctx.runningTask < ctx.taskNum && taskQueue.length > 0) {\n taskQueue.shift()();\n }\n };\n let createProgressCallbackByPartNumber = function (partNumber) {\n return function (loaded, total, cost) {\n ctx.progressCallback(partNumber, loaded);\n };\n };\n let sliceBlob = function (blob, start, end, type) {\n type = type || blob.type;\n if (blob.mozSlice) {\n return blob.mozSlice(start, end, type);\n }\n if (blob.webkitSlice) {\n return blob.webkitSlice(start, end, type);\n }\n return blob.slice(start, end, type);\n };\n let encodeFunc = window.btoa ? window.btoa : Base64.encode;\n let createUploadPartTask = function (part) {\n return function () {\n ctx.runningTask++;\n if (ctx.isSuspend || ctx.isAbort) {\n ctx.runningTask--;\n ctx.finishedCount++;\n ctx.finishedCount += taskQueue.length;\n taskQueue = [];\n return doNext();\n }\n let started = 0;\n let doUploadPart = function (contentMd5) {\n if (started) {\n return;\n }\n started = 1;\n let uploadPartParam = {\n Bucket: ctx.uploadCheckpoint.bucket,\n Key: ctx.uploadCheckpoint.key,\n RequestDate: ctx.uploadCheckpoint.requestDate,\n PartNumber: part.partNumber,\n UploadId: ctx.uploadCheckpoint.uploadId,\n SourceFile: ctx.uploadCheckpoint.sourceFile,\n maxPartRetryCount: ctx.maxPartRetryCount,\n Offset: part.offset,\n PartSize: part.partSize,\n SseC: ctx.uploadCheckpoint.sseC,\n SseCKey: ctx.uploadCheckpoint.sseCKey,\n ProgressCallback: createProgressCallbackByPartNumber(part.partNumber),\n ContentMD5: contentMd5\n };\n ctx.uploadPartParams.push(uploadPartParam);\n ctx.that.uploadPart(uploadPartParam, function (err, result) {\n ctx.runningTask--;\n ctx.finishedCount++;\n if (ctx.isSuspend) {\n return doNext();\n }\n let eventParam = {\n partNumber: part.partNumber,\n bucket: ctx.uploadCheckpoint.bucket,\n key: ctx.uploadCheckpoint.key,\n uploadId: ctx.uploadCheckpoint.uploadId\n };\n if (err) {\n ctx.eventCallback('uploadPartFailed', eventParam, err);\n ctx.hasError = true;\n } else if (result.CommonMsg.Status >= 500 || result.CommonMsg.Status === 400 && result.CommonMsg.Code === 'BadDigest') {\n ctx.eventCallback('uploadPartFailed', eventParam, result);\n ctx.hasError = true;\n } else if (result.CommonMsg.Status >= 300 && result.CommonMsg.Status < 500) {\n ctx.isAbort = true;\n ctx.hasError = true;\n ctx.eventCallback('uploadPartAborted', eventParam, result);\n } else {\n part.etag = result.InterfaceResult.ETag;\n part.isCompleted = true;\n eventParam.etag = part.etag;\n ctx.uploadCheckpoint.md5 = calculateUploadCheckpointMD5(ctx.uploadCheckpoint);\n ctx.eventCallback('uploadPartSucceed', eventParam, result);\n ctx.that.log.runLog('debug', ctx.funcName, 'Part ' + String(part.partNumber) + ' is finished, uploadId ' + ctx.uploadCheckpoint.uploadId);\n }\n doNext();\n });\n };\n if (ctx.verifyMd5 && window.FileReader && (ctx.uploadCheckpoint.sourceFile instanceof window.File || ctx.uploadCheckpoint.sourceFile instanceof window.Blob)) {\n let _sourceFile = sliceBlob(ctx.uploadCheckpoint.sourceFile, part.offset, part.offset + part.partSize);\n let fr = new window.FileReader();\n fr.onload = function (e) {\n let data = CryptoJS.lib.WordArray.create(e.target.result);\n let md5checksum = CryptoJS.MD5(data);\n let contentMd5 = CryptoJS.enc.Base64.stringify(md5checksum);\n data = null;\n doUploadPart(contentMd5);\n };\n fr.onerror = function (ex) {\n ctx.that.log.runLog('error', ctx.funcName, 'Caculate md5 for part ' + String(part.partNumber) + ' failed');\n doUploadPart();\n };\n fr.readAsArrayBuffer(_sourceFile);\n return;\n }\n doUploadPart();\n };\n };\n if (!ctx.isSuspend) {\n for (let i = 0; i < ctx.uploadCheckpoint.partCount; i++) {\n let part = ctx.uploadCheckpoint.parts[i];\n if (part.isCompleted) {\n ctx.finishedCount++;\n ctx.finishedBytes += part.partSize;\n } else {\n taskQueue.push(createUploadPartTask(part));\n }\n }\n if (taskQueue.length === 0) {\n return completedRequest(ctx);\n }\n return doNext();\n }\n ctx.callback('the process of uploadFile is suspened, you can retry with the uploadCheckpoint');\n};\nlet resumable = {};\nresumable.extend = function (ObsClient) {\n ObsClient.prototype.uploadFile = function (param, callback) {\n let that = this;\n param = param || {};\n let funcName = 'uploadFile';\n let _callback = wrapCallback(callback, that.log, funcName);\n let eventCallback = wrapEventCallback(param.EventCallback);\n let taskNum = param.TaskNum || 1;\n let maxPartRetryCount = param.PartRetryNum || 0;\n let progressCallback = param.ProgressCallback || function () {};\n let resumeCallback = param.ResumeCallback || function () {};\n let verifyMd5 = param.VerifyMd5 || false;\n that.log.runLog('info', funcName, 'enter ' + funcName + '...');\n let uploadCheckpoint = null;\n if (param.UploadCheckpoint && param.UploadCheckpoint.sourceFile && param.UploadCheckpoint.fileStat && param.UploadCheckpoint.uploadId && param.UploadCheckpoint.md5 === calculateUploadCheckpointMD5(param.UploadCheckpoint)) {\n uploadCheckpoint = param.UploadCheckpoint;\n } else {\n abortRequest(param.UploadCheckpoint, funcName, that);\n }\n if (!uploadCheckpoint) {\n let sourceFile = param.SourceFile;\n if (!(sourceFile instanceof window.File) && !(sourceFile instanceof window.Blob)) {\n return _callback('source file is not valid, must be an instanceof [File | Blob]');\n }\n if (!sourceFile.mozSlice && !sourceFile.webkitSlice && !sourceFile.slice) {\n return _callback('your browser cannot support the slice method for [File | Blob]');\n }\n that.log.runLog('debug', funcName, 'Begin to uploadFile to OBS from file:' + sourceFile.name);\n let fileSize = sourceFile.size;\n let partSize = parseInt(param.PartSize, 10);\n let partCount = 0;\n let parts = [];\n if (fileSize === 0) {\n partSize = 0;\n partCount = 1;\n parts.push({\n partNumber: 1,\n offset: 0,\n partSize: 0,\n isCompleted: false\n });\n } else {\n partSize = isNaN(partSize) ? defaultPartSize : partSize < minPartSize ? defaultPartSize : partSize > maxPartSize ? maxPartSize : partSize;\n partCount = Math.floor(fileSize / partSize);\n if (partCount >= 10000) {\n partSize = Math.floor(fileSize / 10000);\n if (fileSize % 10000 !== 0) {\n partSize += 1;\n }\n partCount = Math.floor(fileSize / partSize);\n }\n if (partSize > maxPartSize) {\n return _callback('The source file ' + sourceFile.name + ' is too large');\n }\n let lastPartSize = fileSize % partSize;\n if (lastPartSize !== 0) {\n partCount++;\n }\n for (let i = 0; i < partCount; i++) {\n parts.push({\n partNumber: i + 1,\n offset: i * partSize,\n partSize: partSize,\n isCompleted: false\n });\n }\n if (lastPartSize !== 0) {\n parts[partCount - 1].partSize = lastPartSize;\n }\n }\n that.log.runLog('debug', funcName, 'Total parts count ' + partCount);\n uploadCheckpoint = {\n bucket: param.Bucket,\n key: param.Key,\n sourceFile: sourceFile,\n partSize: partSize,\n partCount: partCount,\n parts: parts\n };\n uploadCheckpoint.fileStat = {\n fileSize: fileSize,\n lastModified: sourceFile.lastModified\n };\n if (param.SseC && param.SseCKey) {\n uploadCheckpoint.sseC = param.SseC;\n uploadCheckpoint.sseCKey = param.SseCKey;\n }\n uploadCheckpoint.md5 = calculateUploadCheckpointMD5(uploadCheckpoint);\n } else {\n let sourceFile = uploadCheckpoint.sourceFile;\n if (!(sourceFile instanceof window.File) && !(sourceFile instanceof window.Blob)) {\n return _callback('source file is not valid, must be an instanceof [File | Blob]');\n }\n if (!sourceFile.mozSlice && !sourceFile.webkitSlice && !sourceFile.slice) {\n return _callback('your browser cannot support the slice method for [File | Blob]');\n }\n }\n uploadCheckpoint.requestDate = param.RequestDate;\n let ctx = {\n start: new Date().getTime(),\n uploadCheckpoint: uploadCheckpoint,\n funcName: funcName,\n maxPartRetryCount: maxPartRetryCount,\n taskNum: taskNum,\n callback: _callback,\n that: that,\n runningTask: 0,\n finishedCount: 0,\n hasError: false,\n finishedBytes: 0,\n isAbort: false,\n resumeCallback: resumeCallback,\n isSuspend: false,\n partsLoaded: {},\n requestDate: param.RequestDate,\n uploadPartParams: [],\n verifyMd5: verifyMd5,\n callbackUrl: param.CallbackUrl,\n callbackHost: param.CallbackHost,\n callbackBody: param.CallbackBody,\n callbackBodyType: param.CallbackBodyType\n };\n ctx.eventCallback = function (t, eventParam, result) {\n if (ctx.isSuspend) {\n return;\n }\n eventCallback(t, eventParam, result);\n };\n ctx.progressCallback = function (partNumber, loaded) {\n if (ctx.isSuspend) {\n return;\n }\n ctx.finishedBytes += loaded;\n if (ctx.partsLoaded[partNumber]) {\n ctx.finishedBytes -= ctx.partsLoaded[partNumber];\n }\n ctx.partsLoaded[partNumber] = loaded;\n progressCallback(ctx.finishedBytes, ctx.uploadCheckpoint.fileStat.fileSize, (new Date().getTime() - ctx.start) / 1000);\n };\n if (!uploadCheckpoint.uploadId) {\n let contentType = param.ContentType;\n if (!contentType && uploadCheckpoint.key) {\n contentType = that.util.mimeTypes[uploadCheckpoint.key.substring(uploadCheckpoint.key.lastIndexOf('.') + 1)];\n }\n if (!contentType && uploadCheckpoint.sourceFile.name) {\n contentType = that.util.mimeTypes[uploadCheckpoint.sourceFile.name.substring(uploadCheckpoint.sourceFile.name.lastIndexOf('.') + 1)];\n }\n that.initiateMultipartUpload({\n Bucket: param.Bucket,\n Key: param.Key,\n RequestDate: param.RequestDate,\n ACL: param.ACL,\n Metadata: param.Metadata,\n WebsiteRedirectLocation: param.WebsiteRedirectLocation,\n StorageClass: param.StorageClass,\n ContentType: contentType,\n Expires: param.Expires,\n SseKms: param.SseKms,\n SseKmsKey: param.SseKmsKey,\n SseC: param.SseC,\n SseCKey: param.SseCKey\n }, function (err, result) {\n let eventParam = {\n bucket: param.Bucket,\n key: param.Key\n };\n if (err) {\n ctx.eventCallback('initiateMultipartUploadFailed', eventParam, err);\n return _callback(err);\n }\n if (result.CommonMsg.Status >= 300) {\n ctx.eventCallback('initiateMultipartUploadFailed', eventParam, result);\n return _callback(null, result);\n }\n let uploadId = result.InterfaceResult.UploadId;\n uploadCheckpoint.uploadId = uploadId;\n uploadCheckpoint.md5 = calculateUploadCheckpointMD5(uploadCheckpoint);\n ctx.uploadCheckpoint = uploadCheckpoint;\n eventParam.uploadId = uploadId;\n that.log.runLog('info', funcName, 'Claim a new upload id ' + uploadId);\n ctx.eventCallback('initiateMultipartUploadSucceed', eventParam, result);\n startToUploadFile(ctx);\n });\n return;\n }\n startToUploadFile(ctx);\n };\n};\nexport default resumable;","map":{"version":3,"names":["md5","Base64","CryptoJS","minPartSize","defaultPartSize","maxPartSize","wrapCallback","callback","log","methodName","start","Date","getTime","err","result","runLog","Object","prototype","toString","call","Error","isFunction","obj","wrapEventCallback","eventCallback","t","eventParam","CommonMsg","Status","Code","Message","calculateUploadCheckpointMD5","uploadCheckpoint","data","push","bucket","key","sourceFile","name","String","partSize","partCount","fileStat","fileSize","lastModified","uploadId","sseC","sseCKey","parts","i","length","part","partNumber","offset","isCompleted","etag","window","btoa","join","abortRequest","funcName","that","abortMultipartUpload","Bucket","Key","RequestDate","requestDate","UploadId","completedRequest","ctx","finishedCount","isAbort","isSuspend","hasError","PartNumber","ETag","completeMultipartUpload","Parts","CallbackUrl","callbackUrl","CallbackHost","callbackHost","CallbackBody","callbackBody","CallbackBodyType","callbackBodyType","startToUploadFile","cancel","uploadPartParams","cancelHook","resumeCallback","abort","abortHook","taskQueue","doNext","runningTask","taskNum","shift","createProgressCallbackByPartNumber","loaded","total","cost","progressCallback","sliceBlob","blob","end","type","mozSlice","webkitSlice","slice","encodeFunc","encode","createUploadPartTask","started","doUploadPart","contentMd5","uploadPartParam","SourceFile","maxPartRetryCount","Offset","PartSize","SseC","SseCKey","ProgressCallback","ContentMD5","uploadPart","InterfaceResult","verifyMd5","FileReader","File","Blob","_sourceFile","fr","onload","e","lib","WordArray","create","target","md5checksum","MD5","enc","stringify","onerror","ex","readAsArrayBuffer","finishedBytes","resumable","extend","ObsClient","uploadFile","param","_callback","EventCallback","TaskNum","PartRetryNum","ResumeCallback","VerifyMd5","UploadCheckpoint","size","parseInt","isNaN","Math","floor","lastPartSize","partsLoaded","contentType","ContentType","util","mimeTypes","substring","lastIndexOf","initiateMultipartUpload","ACL","Metadata","WebsiteRedirectLocation","StorageClass","Expires","SseKms","SseKmsKey"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/esdk-obs-browserjs/src/resumable.js"],"sourcesContent":["/**\n * Copyright 2019 Huawei Technologies Co.,Ltd.\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\n * this file except in compliance with the License. You may obtain a copy of the\n * License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed\n * under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations under the License.\n *\n */\nimport md5 from 'blueimp-md5';\nimport { Base64 } from 'js-base64';\nimport CryptoJS from 'crypto-js'\n\nconst minPartSize = 100 * 1024;\nconst defaultPartSize = 9 * 1024 * 1024;\nconst maxPartSize = 5 * 1024 * 1024 * 1024;\n\nlet wrapCallback = function(callback, log, methodName){\n\tcallback = callback || function(){};\n\tlet start = new Date().getTime();\n\treturn function(err, result){\n\t\tlog.runLog('info', methodName, 'ObsClient cost ' + (new Date().getTime() - start) + ' ms');\n\t\tif(Object.prototype.toString.call(err) === '[object String]'){\n\t\t\treturn callback(new Error(err), result);\n\t\t}\n\t\t\n\t\treturn callback(err, result);\n\t};\n};\n\nlet isFunction = function(obj){\n\treturn Object.prototype.toString.call(obj) === '[object Function]';\n};\n\nlet wrapEventCallback = function(eventCallback){\n\teventCallback = eventCallback || function(){};\n\treturn function(t, eventParam, result){\n\t\tif(Object.prototype.toString.call(result) === '[object Error]'){\n\t\t\treturn eventCallback(t, eventParam, result);\n\t\t}\n\t\t\n\t\tif(Object.prototype.toString.call(result) === '[object String]'){\n\t\t\treturn eventCallback(t, eventParam, new Error(result));\n\t\t}\n\t\t\n\t\tif(!result){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(result.CommonMsg.Status > 300){\n\t\t\treturn eventCallback(t, eventParam, new Error('status:' + result.CommonMsg.Status + ', code:' + result.CommonMsg.Code + ', message:' + result.CommonMsg.Message));\n\t\t}\n\n\t\teventCallback(t, eventParam, result);\n\t};\n};\n\nlet calculateUploadCheckpointMD5 = function(uploadCheckpoint){\n\tlet data = [];\n\tdata.push(uploadCheckpoint.bucket);\n\tdata.push(uploadCheckpoint.key);\n\tdata.push(uploadCheckpoint.sourceFile.name);\n\tdata.push(String(uploadCheckpoint.partSize));\n\tdata.push(String(uploadCheckpoint.partCount));\n\tdata.push(String(uploadCheckpoint.fileStat.fileSize));\n\tdata.push(String(uploadCheckpoint.fileStat.lastModified));\n\t\n\tif(uploadCheckpoint.uploadId){\n\t\tdata.push(uploadCheckpoint.uploadId);\n\t}\n\t\n\tif(uploadCheckpoint.sseC){\n\t\tdata.push(uploadCheckpoint.sseC);\n\t}\n\t\n\tif(uploadCheckpoint.sseCKey){\n\t\tdata.push(uploadCheckpoint.sseCKey);\n\t}\n\t\n\tif(uploadCheckpoint.parts){\n\t\tfor(let i=0;i<uploadCheckpoint.parts.length;i++){\n\t\t\tlet part = uploadCheckpoint.parts[i];\n\t\t\tif(!part){\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdata.push(String(part.partNumber));\n\t\t\tdata.push(String(part.offset));\n\t\t\tdata.push(String(part.partSize));\n\t\t\tdata.push(String(part.isCompleted));\n\t\t\tif(part.etag){\n\t\t\t\tdata.push(String(part.etag));\n\t\t\t}\n\t\t}\n\t}\n\treturn window.btoa(md5(data.join(''), false, true));\n};\n\nlet abortRequest = function(uploadCheckpoint, funcName, that){\n\tif(uploadCheckpoint && uploadCheckpoint.uploadId){\n\t\tthat.abortMultipartUpload({\n\t\t\tBucket:uploadCheckpoint.bucket,\n\t\t\tKey:uploadCheckpoint.key,\n\t\t\tRequestDate : uploadCheckpoint.requestDate,\n\t\t\tUploadId:uploadCheckpoint.uploadId,\n\t\t},function(err, result){\n\t\t\tif(err){\n\t\t\t\tthat.log.runLog('warn', funcName, 'abort multipart upload failed, bucket:' + uploadCheckpoint.bucket + ', key:' + uploadCheckpoint.key + ', uploadId:' + uploadCheckpoint.uploadId + ', err:' + err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(result.CommonMsg.Status >= 300){\n\t\t\t\tthat.log.runLog('warn', funcName, 'abort multipart upload failed, bucket:' + uploadCheckpoint.bucket + \n\t\t\t\t\t\t', key:' + uploadCheckpoint.key + ', uploadId:' + uploadCheckpoint.uploadId + ', status:' + result.CommonMsg.Status + ', code:' + result.CommonMsg.Code + ', message:' + result.CommonMsg.Message);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdelete uploadCheckpoint.uploadId;\n\t\t\tthat.log.runLog('warn', funcName, 'abort multipart upload succeed, bucket:' + uploadCheckpoint.bucket + ', key:' + uploadCheckpoint.key + ', uploadId:' + uploadCheckpoint.uploadId);\n\t\t});\n\t}\n};\n\nlet completedRequest = function(ctx){\n\tif(ctx.finishedCount < ctx.uploadCheckpoint.partCount){\n\t\treturn;\n\t}\n\t\n\tif(ctx.isAbort){\n\t\tabortRequest(ctx.uploadCheckpoint, ctx.funcName, ctx.that);\n\t\treturn ctx.callback('uploadFile failed the upload task is aborted');\n\t}\n\t\n\tif(ctx.isSuspend){\n\t\treturn ctx.callback('the process of uploadFile is suspened, you can retry with the uploadCheckpoint');\n\t}\n\t\n\tif(ctx.hasError){\n\t\treturn ctx.callback('uploadFile finished with error, you can retry with the uploadCheckpoint');\n\t}\n\t\n\tlet parts = [];\n\tfor(let i=0;i<ctx.uploadCheckpoint.partCount;i++){\n\t\tlet part = ctx.uploadCheckpoint.parts[i];\n\t\tparts.push({\n\t\t\tPartNumber : part.partNumber,\n\t\t\tETag : part.etag\n\t\t});\n\t}\n\t\n\tctx.that.completeMultipartUpload({\n\t\tBucket: ctx.uploadCheckpoint.bucket,\n\t\tKey : ctx.uploadCheckpoint.key,\n\t\tRequestDate : ctx.uploadCheckpoint.requestDate,\n\t\tUploadId : ctx.uploadCheckpoint.uploadId,\n\t\tParts: parts,\n\t\tCallbackUrl: ctx.callbackUrl,\n\t\tCallbackHost: ctx.callbackHost,\n\t\tCallbackBody: ctx.callbackBody,\n\t\tCallbackBodyType: ctx.callbackBodyType\n\t}, function(err, result){\n\t\tlet eventParam = {bucket : ctx.uploadCheckpoint.bucket, key : ctx.uploadCheckpoint.key, uploadId : ctx.uploadCheckpoint.uploadId};\n\t\tif(err){\n\t\t\tctx.eventCallback('completeMultipartUploadFailed', eventParam, err);\n\t\t\treturn ctx.callback(err);\n\t\t} \n\t\t\t\n\t\tif(result.CommonMsg.Status >= 500){ \n\t\t\tctx.eventCallback('completeMultipartUploadFailed', eventParam, result);\n\t\t\treturn ctx.callback(null, result);\n\t\t} \n\t\t\t\n\t\tif(result.CommonMsg.Status >= 300 && result.CommonMsg.Status < 500){\n\t\t\tctx.eventCallback('completeMultipartUploadAborted', eventParam, result);\n\t\t\tabortRequest(ctx.uploadCheckpoint, ctx.funcName, ctx.that);\n\t\t\treturn ctx.callback(null, result);\n\t\t}\n\t\t\n\t\tctx.eventCallback('completeMultipartUploadSucceed', eventParam, result);\n\t\tctx.callback(null, result);\n\t});\n};\n\nlet startToUploadFile = function(ctx){\n\tfunction cancel(){\n\t\tctx.isSuspend = true;\n\t\tfor(let i=0;i<ctx.uploadPartParams.length;i++){\n\t\t\tlet cancelHook = ctx.uploadPartParams[i].cancelHook;\n\t\t\tif(isFunction(cancelHook)){\n\t\t\t\tcancelHook();\n\t\t\t}\n\t\t}\n\t};\n\tctx.resumeCallback({\n\t\tcancel,\n\t\tabort : function(){\n\t\t\tctx.isAbort = true;\n\t\t\tfor(let i=0;i<ctx.uploadPartParams.length;i++){\n\t\t\t\tlet abortHook = ctx.uploadPartParams[i].abortHook;\n\t\t\t\tif(isFunction(abortHook)){\n\t\t\t\t\tabortHook();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, ctx.uploadCheckpoint);\n\t\n\tlet taskQueue = [];\n\tlet doNext = function(){\n\t\tif(taskQueue.length === 0){\n\t\t\tcompletedRequest(ctx);\n\t\t\treturn\n\t\t}\n\t\twhile(ctx.runningTask < ctx.taskNum && taskQueue.length > 0){\n\t\t\ttaskQueue.shift()();\n\t\t}\n\t\t\n\t};\n\t\n\tlet createProgressCallbackByPartNumber = function(partNumber){\n\t\treturn function(loaded, total, cost){\n\t\t\tctx.progressCallback(partNumber, loaded);\n\t\t};\n\t};\n\t\n\tlet sliceBlob = function(blob, start, end, type) {\n\t\ttype = type || blob.type;\n\t\tif (blob.mozSlice) { \n\t\t\t\treturn blob.mozSlice(start, end, type);\n\t\t} \n\t\tif (blob.webkitSlice) { \n\t\t\t\treturn blob.webkitSlice(start, end, type);\n\t\t}\n\t\treturn blob.slice(start, end, type);\n\t};\n\t\n\tlet encodeFunc = window.btoa ? window.btoa : Base64.encode;\n\t\n\tlet createUploadPartTask = function(part){\n\t\treturn function(){\n\t\t\tctx.runningTask++;\n\t\t\tif(ctx.isSuspend || ctx.isAbort){\n\t\t\t\tctx.runningTask--;\n\t\t\t\tctx.finishedCount++;\n\t\t\t\tctx.finishedCount += taskQueue.length;\n\t\t\t\ttaskQueue = [];\n\t\t\t\treturn doNext();\n\t\t\t}\n\t\t\tlet started = 0;\n\t\t\tlet doUploadPart = function(contentMd5){\n\t\t\t\tif(started){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tstarted = 1;\n\t\t\t\tlet uploadPartParam = {\n\t\t\t\t\tBucket : ctx.uploadCheckpoint.bucket,\n\t\t\t\t\tKey: ctx.uploadCheckpoint.key,\n\t\t\t\t\tRequestDate : ctx.uploadCheckpoint.requestDate,\n\t\t\t\t\tPartNumber: part.partNumber,\n\t\t\t\t\tUploadId : ctx.uploadCheckpoint.uploadId,\n\t\t\t\t\tSourceFile: ctx.uploadCheckpoint.sourceFile,\n\t\t\t\t\tmaxPartRetryCount : ctx.maxPartRetryCount,\n\t\t\t\t\tOffset : part.offset,\n\t\t\t\t\tPartSize : part.partSize,\n\t\t\t\t\tSseC : ctx.uploadCheckpoint.sseC,\n\t\t\t\t\tSseCKey : ctx.uploadCheckpoint.sseCKey,\n\t\t\t\t\tProgressCallback : createProgressCallbackByPartNumber(part.partNumber),\n\t\t\t\t\tContentMD5 : contentMd5\n\t\t\t\t};\n\t\t\t\tctx.uploadPartParams.push(uploadPartParam);\n\t\t\t\t\n\t\t\t\tctx.that.uploadPart(uploadPartParam, function(err, result) {\n\t\t\t\t\tctx.runningTask--;\n\t\t\t\t\tctx.finishedCount++;\n\t\t\t\t\tif(ctx.isSuspend){\n\t\t\t\t\t\treturn doNext();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet eventParam = {partNumber : part.partNumber, bucket : ctx.uploadCheckpoint.bucket, key : ctx.uploadCheckpoint.key, uploadId : ctx.uploadCheckpoint.uploadId};\n\t\t\t\t\tif(err){\n\t\t\t\t\t\tctx.eventCallback('uploadPartFailed', eventParam, err);\n\t\t\t\t\t\tctx.hasError = true;\n\t\t\t\t\t}else if(result.CommonMsg.Status >= 500 || (result.CommonMsg.Status === 400 && result.CommonMsg.Code === 'BadDigest')){\n\t\t\t\t\t\tctx.eventCallback('uploadPartFailed', eventParam, result);\n\t\t\t\t\t\tctx.hasError = true;\n\t\t\t\t\t}else if(result.CommonMsg.Status >= 300 && result.CommonMsg.Status < 500){\n\t\t\t\t\t\tctx.isAbort = true;\n\t\t\t\t\t\tctx.hasError = true;\n\t\t\t\t\t\tctx.eventCallback('uploadPartAborted', eventParam, result);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tpart.etag = result.InterfaceResult.ETag;\n\t\t\t\t\t\tpart.isCompleted = true;\n\t\t\t\t\t\teventParam.etag = part.etag;\n\t\t\t\t\t\tctx.uploadCheckpoint.md5 = calculateUploadCheckpointMD5(ctx.uploadCheckpoint);\n\t\t\t\t\t\tctx.eventCallback('uploadPartSucceed', eventParam, result);\n\t\t\t\t\t\tctx.that.log.runLog('debug', ctx.funcName, 'Part ' + String(part.partNumber) + ' is finished, uploadId ' + ctx.uploadCheckpoint.uploadId);\n\t\t\t\t\t}\n\t\t\t\t\tdoNext();\n\t\t\t\t});\n\t\t\t};\n\t\t\t\n\t\t\t\n\t\t\tif(ctx.verifyMd5 && window.FileReader && ((ctx.uploadCheckpoint.sourceFile instanceof window.File) || (ctx.uploadCheckpoint.sourceFile instanceof window.Blob))){\n\t\t\t\tlet _sourceFile = sliceBlob(ctx.uploadCheckpoint.sourceFile, part.offset, part.offset + part.partSize);\n\t\t\t\tlet fr = new window.FileReader();\n\t\t\t\tfr.onload = function(e){\t\n\t\t\t\t\tlet data = CryptoJS.lib.WordArray.create(e.target.result)\n\t\t\t\t\tlet md5checksum = CryptoJS.MD5(data);\n\t\t\t\t\tlet contentMd5 = CryptoJS.enc.Base64.stringify(md5checksum);\n\t\t\t\t\tdata = null;\n\t\t\t\t\tdoUploadPart(contentMd5);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tfr.onerror = function(ex){\n\t\t\t\t\tctx.that.log.runLog('error', ctx.funcName, 'Caculate md5 for part ' + String(part.partNumber) + ' failed');\n\t\t\t\t\tdoUploadPart();\n\t\t\t\t};\n\t\t\t\tfr.readAsArrayBuffer(_sourceFile);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tdoUploadPart();\n\t\t};\n\t\t\n\t};\n\t\n\tif(!ctx.isSuspend){\n\t\tfor(let i=0;i<ctx.uploadCheckpoint.partCount;i++){\n\t\t\tlet part = ctx.uploadCheckpoint.parts[i];\n\t\t\tif(part.isCompleted){\n\t\t\t\tctx.finishedCount++;\n\t\t\t\tctx.finishedBytes += part.partSize;\n\t\t\t}else{\n\t\t\t\ttaskQueue.push(createUploadPartTask(part));\n\t\t\t}\n\t\t}\n\t\tif(taskQueue.length === 0){\n\t\t\treturn completedRequest(ctx);\n\t\t}\n\t\treturn doNext();\n\t}\n\tctx.callback('the process of uploadFile is suspened, you can retry with the uploadCheckpoint');\n};\n\nlet resumable = {};\nresumable.extend = function(ObsClient){\n\tObsClient.prototype.uploadFile = function(param, callback){\n\t\tlet that = this;\n\t\tparam = param || {};\n\t\tlet funcName = 'uploadFile';\n\t\tlet _callback = wrapCallback(callback, that.log, funcName);\n\t\tlet eventCallback = wrapEventCallback(param.EventCallback);\n\t\tlet taskNum = param.TaskNum || 1;\n\t\tlet maxPartRetryCount = param.PartRetryNum || 0;\n\t\tlet progressCallback = param.ProgressCallback || function(){};\n\t\tlet resumeCallback = param.ResumeCallback || function(){};\n\t\tlet verifyMd5 = param.VerifyMd5 || false;\n\n\t\tthat.log.runLog('info', funcName, 'enter ' + funcName + '...' );\n\t\t\n\t\tlet uploadCheckpoint = null;\n\t\tif(param.UploadCheckpoint && param.UploadCheckpoint.sourceFile && param.UploadCheckpoint.fileStat && param.UploadCheckpoint.uploadId && param.UploadCheckpoint.md5 === calculateUploadCheckpointMD5(param.UploadCheckpoint)){\n\t\t\tuploadCheckpoint = param.UploadCheckpoint;\n\t\t}else{\n\t\t\tabortRequest(param.UploadCheckpoint, funcName, that);\n\t\t}\n\t\t\n\t\tif(!uploadCheckpoint){\n\t\t\tlet sourceFile = param.SourceFile;\n\t\t\tif(!(sourceFile instanceof window.File) && !(sourceFile instanceof window.Blob)){\n\t\t\t\treturn _callback('source file is not valid, must be an instanceof [File | Blob]');\n\t\t\t}\n\t\t\t\n\t\t\tif(!sourceFile.mozSlice && !sourceFile.webkitSlice && !sourceFile.slice){\n\t\t\t\treturn _callback('your browser cannot support the slice method for [File | Blob]');\n\t\t\t}\n\t\t\t\n\t\t\tthat.log.runLog('debug', funcName, 'Begin to uploadFile to OBS from file:' + sourceFile.name);\n\t\t\t\n\t\t\tlet fileSize = sourceFile.size;\n\t\t\tlet partSize = parseInt(param.PartSize, 10);\n\t\t\tlet partCount = 0;\n\t\t\t\n\t\t\tlet parts = [];\n\t\t\tif(fileSize === 0){\n\t\t\t\tpartSize = 0;\n\t\t\t\tpartCount = 1;\n\t\t\t\tparts.push({partNumber : 1, offset : 0, partSize : 0, isCompleted : false});\n\t\t\t}else{\n\t\t\t\tpartSize = isNaN(partSize) ? defaultPartSize : (partSize < minPartSize ? defaultPartSize : (partSize > maxPartSize ? maxPartSize : partSize));\n\t\t\t\tpartCount = Math.floor(fileSize / partSize);\n\t\t\t\tif(partCount >= 10000){\n\t\t\t\t\tpartSize = Math.floor(fileSize / 10000);\n\t\t\t\t\tif(fileSize % 10000 !== 0){\n\t\t\t\t\t\tpartSize += 1;\n\t\t\t\t\t} \n\t\t\t\t\tpartCount = Math.floor(fileSize / partSize);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(partSize > maxPartSize){\n\t\t\t\t\treturn _callback('The source file ' + sourceFile.name + ' is too large');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet lastPartSize = fileSize % partSize;\n\t\t\t\tif(lastPartSize !== 0){\n\t\t\t\t\tpartCount ++;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor(let i=0;i<partCount;i++){\n\t\t\t\t\tparts.push({\n\t\t\t\t\t\tpartNumber : i+1,\n\t\t\t\t\t\toffset : i * partSize,\n\t\t\t\t\t\tpartSize : partSize, \n\t\t\t\t\t\tisCompleted : false\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(lastPartSize !== 0){\n\t\t\t\t\tparts[partCount-1].partSize = lastPartSize;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthat.log.runLog('debug', funcName, 'Total parts count ' + partCount);\n\t\t\t\n\t\t\tuploadCheckpoint = {bucket : param.Bucket, key : param.Key, sourceFile : sourceFile, partSize : partSize, partCount : partCount, parts : parts};\n\t\t\tuploadCheckpoint.fileStat = {\n\t\t\t\tfileSize : fileSize,\n\t\t\t\tlastModified : sourceFile.lastModified\n\t\t\t};\n\t\t\t\n\t\t\tif(param.SseC && param.SseCKey){\n\t\t\t\tuploadCheckpoint.sseC = param.SseC;\n\t\t\t\tuploadCheckpoint.sseCKey = param.SseCKey;\n\t\t\t}\n\t\t\t\n\t\t\tuploadCheckpoint.md5 = calculateUploadCheckpointMD5(uploadCheckpoint);\n\t\t}else{\n\t\t\tlet sourceFile = uploadCheckpoint.sourceFile;\n\t\t\tif(!(sourceFile instanceof window.File) && !(sourceFile instanceof window.Blob)){\n\t\t\t\treturn _callback('source file is not valid, must be an instanceof [File | Blob]');\n\t\t\t}\n\t\t\t\n\t\t\tif(!sourceFile.mozSlice && !sourceFile.webkitSlice && !sourceFile.slice){\n\t\t\t\treturn _callback('your browser cannot support the slice method for [File | Blob]');\n\t\t\t}\n\t\t}\n\t\t\n\t\tuploadCheckpoint.requestDate = param.RequestDate;\n\t\t\n\t\tlet ctx = {\n\t\t\tstart : new Date().getTime(),\n\t\t\tuploadCheckpoint : uploadCheckpoint,\n\t\t\tfuncName : funcName, \n\t\t\tmaxPartRetryCount : maxPartRetryCount,\n\t\t\ttaskNum : taskNum,\n\t\t\tcallback : _callback,\n\t\t\tthat : that,\n\t\t\trunningTask : 0,\n\t\t\tfinishedCount : 0,\n\t\t\thasError : false,\n\t\t\tfinishedBytes: 0,\n\t\t\tisAbort : false,\n\t\t\tresumeCallback : resumeCallback,\n\t\t\tisSuspend : false,\n\t\t\tpartsLoaded : {},\n\t\t\trequestDate : param.RequestDate,\n\t\t\tuploadPartParams : [],\n\t\t\tverifyMd5 : verifyMd5,\n\t\t\tcallbackUrl: param.CallbackUrl,\n\t\t\tcallbackHost: param.CallbackHost,\n\t\t\tcallbackBody: param.CallbackBody,\n\t\t\tcallbackBodyType: param.CallbackBodyType\n\t\t};\n\t\t\n\t\tctx.eventCallback = function(t, eventParam, result){\n\t\t\tif(ctx.isSuspend){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\teventCallback(t, eventParam, result);\n\t\t};\n\t\t\n\t\tctx.progressCallback = function(partNumber, loaded){\n\t\t\tif(ctx.isSuspend){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tctx.finishedBytes += loaded;\n\t\t\tif(ctx.partsLoaded[partNumber]){\n\t\t\t\tctx.finishedBytes -= ctx.partsLoaded[partNumber];\n\t\t\t}\n\t\t\tctx.partsLoaded[partNumber] = loaded;\n\t\t\tprogressCallback(ctx.finishedBytes, ctx.uploadCheckpoint.fileStat.fileSize, (new Date().getTime() - ctx.start) / 1000);\n\t\t};\n\t\t\n\t\tif(!uploadCheckpoint.uploadId){\n\t\t\tlet contentType = param.ContentType;\n\t\t\tif(!contentType && uploadCheckpoint.key){\n\t\t\t\tcontentType = that.util.mimeTypes[uploadCheckpoint.key.substring(uploadCheckpoint.key.lastIndexOf('.') + 1)];\n\t\t\t}\n\t\t\t\n\t\t\tif(!contentType && uploadCheckpoint.sourceFile.name){\n\t\t\t\tcontentType = that.util.mimeTypes[uploadCheckpoint.sourceFile.name.substring(uploadCheckpoint.sourceFile.name.lastIndexOf('.') + 1)];\n\t\t\t}\n\t\t\t\n\t\t\tthat.initiateMultipartUpload({\n\t\t\t\tBucket : param.Bucket,\n\t\t\t\tKey : param.Key,\n\t\t\t\tRequestDate : param.RequestDate,\n\t\t\t\tACL : param.ACL,\n\t\t\t\tMetadata : param.Metadata,\n\t\t\t\tWebsiteRedirectLocation : param.WebsiteRedirectLocation,\n\t\t\t\tStorageClass : param.StorageClass,\n\t\t\t\tContentType : contentType,\n\t\t\t\tExpires : param.Expires,\n\t\t\t\tSseKms : param.SseKms,\n\t\t\t\tSseKmsKey : param.SseKmsKey,\n\t\t\t\tSseC : param.SseC,\n\t\t\t\tSseCKey : param.SseCKey\n\t\t\t}, function(err, result){\n\t\t\t\tlet eventParam = {bucket : param.Bucket, key : param.Key};\n\t\t\t\tif(err){\n\t\t\t\t\tctx.eventCallback('initiateMultipartUploadFailed', eventParam, err);\n\t\t\t\t\treturn _callback(err);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(result.CommonMsg.Status >= 300){\n\t\t\t\t\tctx.eventCallback('initiateMultipartUploadFailed', eventParam, result);\n\t\t\t\t\treturn _callback(null, result);\n\t\t\t\t}\n\t\t\t\tlet uploadId = result.InterfaceResult.UploadId;\n\t\t\t\tuploadCheckpoint.uploadId = uploadId;\n\t\t\t\tuploadCheckpoint.md5 = calculateUploadCheckpointMD5(uploadCheckpoint);\n\t\t\t\tctx.uploadCheckpoint = uploadCheckpoint;\n\t\t\t\t\n\t\t\t\teventParam.uploadId = uploadId;\n\t\t\t\tthat.log.runLog('info', funcName, 'Claim a new upload id ' + uploadId);\n\t\t\t\tctx.eventCallback('initiateMultipartUploadSucceed', eventParam, result);\n\t\t\t\tstartToUploadFile(ctx);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tstartToUploadFile(ctx);\n\t};\n};\nexport default resumable;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|