From fc865b90576a056416b56eb6c05f111b5d6e6f6f Mon Sep 17 00:00:00 2001 From: carsonxu <459452372@qq.com> Date: Thu, 3 May 2018 15:18:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BF=9B=E5=BA=A6=E5=8F=8D?= =?UTF-8?q?=E9=A6=88=20bug=EF=BC=8C=E4=BF=AE=E6=94=B9=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E6=8F=90=E7=A4=BA=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=AF=B9=E8=B1=A1=E6=B1=A1=E6=9F=93=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/cos-js-sdk-v5.js | 459 ++++++++++++++++++++++---------------- dist/cos-js-sdk-v5.min.js | 2 +- src/advance.js | 141 ++++++------ {lib => src}/async.js | 0 src/base.js | 102 +++++---- src/cos.js | 4 +- src/task.js | 70 +++++- src/util.js | 132 +++++------ 8 files changed, 528 insertions(+), 382 deletions(-) rename {lib => src}/async.js (100%) diff --git a/dist/cos-js-sdk-v5.js b/dist/cos-js-sdk-v5.js index 4c0c050..f4714fb 100644 --- a/dist/cos-js-sdk-v5.js +++ b/dist/cos-js-sdk-v5.js @@ -101,8 +101,8 @@ var getAuth = function (opt) { var headers = clone(opt.Headers || opt.headers || {}); pathname.indexOf('/') !== 0 && (pathname = '/' + pathname); - if (!SecretId) return console.error('lack of param SecretId'); - if (!SecretKey) return console.error('lack of param SecretKey'); + if (!SecretId) return console.error('missing param SecretId'); + if (!SecretKey) return console.error('missing param SecretKey'); var getObjectKeys = function (obj) { var list = []; @@ -208,14 +208,6 @@ var readAsBinaryString = function (blob, callback) { readFun.call(fr, blob); }; -// 获取文件 sha1 值 -var getFileSHA = function (blob, callback) { - readAsBinaryString(blob, function (content) { - var hash = CryptoJS.SHA1(content).toString(); - callback(null, hash); - }); -}; - // 获取文件 md5 值 var getFileMd5 = function (blob, callback) { readAsBinaryString(blob, function (content) { @@ -297,17 +289,19 @@ var uuid = function () { return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4(); }; -var checkParams = function (apiName, params) { - var bucket = params.Bucket; - var region = params.Region; - var object = params.Key; +var hasMissingParams = function (apiName, params) { + var Bucket = params.Bucket; + var Region = params.Region; + var Key = params.Key; if (apiName.indexOf('Bucket') > -1 || apiName === 'deleteMultipleObject' || apiName === 'multipartList' || apiName === 'listObjectVersions') { - return bucket && region; + if (!Bucket) return 'Bucket'; + if (!Region) return 'Region'; + } else if (apiName.indexOf('Object') > -1 || apiName.indexOf('multipart') > -1 || apiName === 'sliceUploadFile' || apiName === 'abortUploadTask') { + if (!Bucket) return 'Bucket'; + if (!Region) return 'Region'; + if (!Key) return 'Key'; } - if (apiName.indexOf('Object') > -1 || apiName.indexOf('multipart') > -1 || apiName === 'sliceUploadFile' || apiName === 'abortUploadTask') { - return bucket && region && object; - } - return true; + return false; }; var apiWrapper = function (apiName, apiFn) { @@ -323,47 +317,49 @@ var apiWrapper = function (apiName, apiFn) { params = extend({}, params); // 统一处理 Headers - var Headers = params.Headers || {}; - if (params && typeof params === 'object') { - (function () { - for (var key in params) { - if (params.hasOwnProperty(key) && key.indexOf('x-cos-') > -1) { - Headers[key] = params[key]; + if (apiName !== 'getAuth' && apiName !== 'getObjectUrl') { + var Headers = params.Headers || {}; + if (params && typeof params === 'object') { + (function () { + for (var key in params) { + if (params.hasOwnProperty(key) && key.indexOf('x-cos-') > -1) { + Headers[key] = params[key]; + } } - } - })(); - - // params headers - Headers['x-cos-mfa'] = params['MFA']; - Headers['Content-MD5'] = params['ContentMD5']; - Headers['Content-Length'] = params['ContentLength']; - Headers['Content-Type'] = params['ContentType']; - Headers['Expect'] = params['Expect']; - Headers['Expires'] = params['Expires']; - Headers['Cache-Control'] = params['CacheControl']; - Headers['Content-Disposition'] = params['ContentDisposition']; - Headers['Content-Encoding'] = params['ContentEncoding']; - Headers['Range'] = params['Range']; - Headers['If-Modified-Since'] = params['IfModifiedSince']; - Headers['If-Unmodified-Since'] = params['IfUnmodifiedSince']; - Headers['If-Match'] = params['IfMatch']; - Headers['If-None-Match'] = params['IfNoneMatch']; - Headers['x-cos-copy-source'] = params['CopySource']; - Headers['x-cos-copy-source-Range'] = params['CopySourceRange']; - Headers['x-cos-metadata-directive'] = params['MetadataDirective']; - Headers['x-cos-copy-source-If-Modified-Since'] = params['CopySourceIfModifiedSince']; - Headers['x-cos-copy-source-If-Unmodified-Since'] = params['CopySourceIfUnmodifiedSince']; - Headers['x-cos-copy-source-If-Match'] = params['CopySourceIfMatch']; - Headers['x-cos-copy-source-If-None-Match'] = params['CopySourceIfNoneMatch']; - Headers['x-cos-server-side-encryption'] = params['ServerSideEncryption']; - Headers['x-cos-acl'] = params['ACL']; - Headers['x-cos-grant-read'] = params['GrantRead']; - Headers['x-cos-grant-write'] = params['GrantWrite']; - Headers['x-cos-grant-full-control'] = params['GrantFullControl']; - Headers['x-cos-grant-read-acp'] = params['GrantReadAcp']; - Headers['x-cos-grant-write-acp'] = params['GrantWriteAcp']; - Headers['x-cos-storage-class'] = params['StorageClass']; - params.Headers = clearKey(Headers); + })(); + + // params headers + Headers['x-cos-mfa'] = params['MFA']; + Headers['Content-MD5'] = params['ContentMD5']; + Headers['Content-Length'] = params['ContentLength']; + Headers['Content-Type'] = params['ContentType']; + Headers['Expect'] = params['Expect']; + Headers['Expires'] = params['Expires']; + Headers['Cache-Control'] = params['CacheControl']; + Headers['Content-Disposition'] = params['ContentDisposition']; + Headers['Content-Encoding'] = params['ContentEncoding']; + Headers['Range'] = params['Range']; + Headers['If-Modified-Since'] = params['IfModifiedSince']; + Headers['If-Unmodified-Since'] = params['IfUnmodifiedSince']; + Headers['If-Match'] = params['IfMatch']; + Headers['If-None-Match'] = params['IfNoneMatch']; + Headers['x-cos-copy-source'] = params['CopySource']; + Headers['x-cos-copy-source-Range'] = params['CopySourceRange']; + Headers['x-cos-metadata-directive'] = params['MetadataDirective']; + Headers['x-cos-copy-source-If-Modified-Since'] = params['CopySourceIfModifiedSince']; + Headers['x-cos-copy-source-If-Unmodified-Since'] = params['CopySourceIfUnmodifiedSince']; + Headers['x-cos-copy-source-If-Match'] = params['CopySourceIfMatch']; + Headers['x-cos-copy-source-If-None-Match'] = params['CopySourceIfNoneMatch']; + Headers['x-cos-server-side-encryption'] = params['ServerSideEncryption']; + Headers['x-cos-acl'] = params['ACL']; + Headers['x-cos-grant-read'] = params['GrantRead']; + Headers['x-cos-grant-write'] = params['GrantWrite']; + Headers['x-cos-grant-full-control'] = params['GrantFullControl']; + Headers['x-cos-grant-read-acp'] = params['GrantReadAcp']; + Headers['x-cos-grant-write-acp'] = params['GrantWriteAcp']; + Headers['x-cos-storage-class'] = params['StorageClass']; + params.Headers = clearKey(Headers); + } } // 代理回调函数 @@ -380,18 +376,19 @@ var apiWrapper = function (apiName, apiFn) { if (apiName !== 'getService' && apiName !== 'abortUploadTask') { // 判断参数是否完整 - if (!checkParams(apiName, params)) { - _callback({ error: 'lack of required params' }); + var missingResult; + if (missingResult = hasMissingParams(apiName, params)) { + _callback({ error: 'missing param ' + missingResult }); return; } // 判断 region 格式 if (params.Region && params.Region.indexOf('-') === -1 && params.Region !== 'yfb') { - _callback({ error: 'Region format error, find help here: https://cloud.tencent.com/document/product/436/6224' }); + _callback({ error: 'param Region format error, find help here: https://cloud.tencent.com/document/product/436/6224' }); return; } // 判断 region 格式 if (params.Region && params.Region.indexOf('cos.') > -1) { - _callback({ error: 'Region should not be start with "cos."' }); + _callback({ error: 'param Region should not be start with "cos."' }); return; } // 兼容不带 AppId 的 Bucket @@ -493,6 +490,15 @@ util.fileSlice = function (file, start, end) { return file.webkitSlice(start, end); } }; +util.localStorage = global.localStorage; +util.getFileUUID = function (file, ChunkSize) { + // 如果信息不完整,不获取 + if (file.name && file.size && file.lastModifiedDate && ChunkSize) { + return util.md5([file.name, file.size, file.lastModifiedDate, ChunkSize].join('::')); + } else { + return null; + } +}; module.exports = util; /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) @@ -587,11 +593,11 @@ var defaultOptions = { AppId: '', // AppId 已废弃,请拼接到 Bucket 后传入,例如:test-1250000000 SecretId: '', SecretKey: '', - UploadIdCacheLimit: 50, FileParallelLimit: 3, ChunkParallelLimit: 3, ChunkSize: 1024 * 1024, ProgressInterval: 1000, + UploadIdCacheLimit: 50, Domain: '', ServiceDomain: '', SliceSize: 1024 * 1024 * 20, @@ -612,7 +618,7 @@ util.extend(COS.prototype, base); util.extend(COS.prototype, advance); COS.getAuthorization = util.getAuth; -COS.version = '0.4.5'; +COS.version = '0.4.6'; module.exports = COS; @@ -1291,7 +1297,9 @@ var process_to_xml = function (node_data, options) { for (var name in node_data) { if (node_data[name] instanceof Array) { for (var j = 0; j < node_data[name].length; j++) { - nodes.push(makeNode(name, fn(node_data[name][j], 0, level + 1), null, level + 1, objKeys(node_data[name][j]).length)); + if (node_data[name].hasOwnProperty(j)) { + nodes.push(makeNode(name, fn(node_data[name][j], 0, level + 1), null, level + 1, objKeys(node_data[name][j]).length)); + } } } else { nodes.push(makeNode(name, fn(node_data[name], 0, level + 1), null, level + 1)); @@ -1375,7 +1383,7 @@ module.exports = function (obj, options) { /* 9 */ /***/ (function(module, exports, __webpack_require__) { -var util = __webpack_require__(0); +/* WEBPACK VAR INJECTION */(function(global) {var util = __webpack_require__(0); var initTask = function (cos) { @@ -1474,29 +1482,75 @@ var initTask = function (cos) { cos._addTasks = function (taskList) { util.each(taskList, function (task) { - task.params.IgnoreAddEvent = true; - cos._addTask(task.api, task.params, task.callback); + cos._addTask(task.api, task.params, task.callback, true); }); emitListUpdate(); }; - cos._addTask = function (api, params, callback) { + cos._addTask = function (api, params, callback, ignoreAddEvent) { + + // 复制参数对象 + params = util.extend({}, params); + ignoreAddEvent && (params.ignoreAddEvent = true); // 生成 id var id = util.uuid(); params.TaskReady && params.TaskReady(id); + // 获取 filesize var size; - if (params.Body && params.Body.size !== undefined) { - size = params.Body.size; - } else if (params.Body && params.Body.length !== undefined) { - size = params.Body.length; - } else if (params.ContentLength !== undefined) { - size = params.ContentLength; + if (util.isBrowser) { + if (typeof params.Body === 'string') { + params.Body = new global.Blob([params.Body]); + } + if (params.Body instanceof global.File || params.Body instanceof global.Blob) { + size = params.Body.size; + } else { + callback({ error: 'params body format error, Only allow File|Blob|String.' }); + return; + } + } else { + if (api === 'sliceUploadFile') { + if (params.FilePath) { + if (params.ContentLength === undefined) { + try { + size = fs.statSync(params.FilePath).size; + } catch (err) { + callback(err); + return; + } + } else { + size = params.ContentLength; + } + } else { + callback({ error: 'missing param FilePath' }); + return; + } + } else if (api === 'putObject') { + if (params.Body) { + if (typeof params.Body === 'string') { + params.Body = global.Buffer(params.Body); + } + if (params.Body instanceof global.Buffer) { + size = params.Body.length; + } else if (typeof params.Body.pipe === 'function') { + if (params.ContentLength === undefined) { + callback({ error: 'missing param ContentLength' }); + return; + } else { + size = params.ContentLength; + } + } else { + callback({ error: 'params Body format error, Only allow Buffer|Stream|String.' }); + return; + } + } else { + callback({ error: 'missing param Body' }); + return; + } + } } - - if (params.ContentLength === undefined) params.ContentLength = size; - size = size || 0; + params.ContentLength = size = size || 0; params.TaskId = id; var task = { @@ -1567,6 +1621,7 @@ var initTask = function (cos) { }; module.exports.init = initTask; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }), /* 10 */ @@ -2209,7 +2264,7 @@ function deleteBucketLifecycle(params, callback) { function putBucketVersioning(params, callback) { if (!params['VersioningConfiguration']) { - callback({ error: 'lack of param VersioningConfiguration' }); + callback({ error: 'missing param VersioningConfiguration' }); return; } var VersioningConfiguration = params['VersioningConfiguration'] || {}; @@ -2478,7 +2533,7 @@ function getObject(params, callback) { * @param {String} params.Bucket Bucket名称,必须 * @param {String} params.Region 地域名称,必须 * @param {String} params.Key 文件名称,必须 - * @param {File || Blob} params.Body 上传文件对象 + * @param {File || Blob || String} params.Body 上传文件对象或字符串 * @param {String} params.CacheControl RFC 2616 中定义的缓存策略,将作为 Object 元数据保存,非必须 * @param {String} params.ContentDisposition RFC 2616 中定义的文件名称,将作为 Object 元数据保存,非必须 * @param {String} params.ContentEncoding RFC 2616 中定义的编码格式,将作为 Object 元数据保存,非必须 @@ -2499,31 +2554,10 @@ function getObject(params, callback) { * @return {String} data.ETag 为对应上传文件的 ETag 值 */ function putObject(params, callback) { - var self = this; - var headers = params.Headers; - var Body = params.Body; - var readStream; - - if (util.isBrowser && Body && (Body instanceof global.Blob || Body instanceof global.File)) { - // 在浏览器允许传入 Blob 或者 File 文件内容 - headers['Content-Length'] = Body.size; - } else if (util.isBrowser && typeof Body === 'string') { - // 在浏览器允许传入字符串作为内容 'hello' - headers['Content-Length'] = Body.length; - } else if (Body && typeof Body.pipe === 'function') { - // fs.createReadStream(filepath) - readStream = Body; - Body = null; - if (headers['Content-Length'] === undefined) { - callback({ error: 'lack of param ContentLength' }); - return; - } - } else { - callback({ error: 'params body format error, Only allow Buffer, Stream, Blob.' }); - return; - } - var onProgress = util.throttleOnProgress.call(self, headers['Content-Length'], params.onProgress); + var self = this; + var FileSize = params.Headers['Content-Length']; + var onProgress = util.throttleOnProgress.call(self, params.Headers['Content-Length'], params.onProgress); submitRequest.call(this, { TaskId: params.TaskId, @@ -2531,14 +2565,15 @@ function putObject(params, callback) { Bucket: params.Bucket, Region: params.Region, Key: params.Key, - headers: headers, - body: Body, + headers: params.Headers, + body: params.Body, onProgress: onProgress }, function (err, data) { - onProgress(null, true); if (err) { + onProgress(null, true); return callback(err); } + onProgress({ loaded: FileSize, total: FileSize }, true); if (data && data.headers && data.headers['etag']) { var url = getUrl({ protocol: self.options.Protocol, @@ -2851,7 +2886,7 @@ function deleteMultipleObject(params, callback) { function restoreObject(params, callback) { var headers = params.Headers; if (!params['RestoreRequest']) { - callback({ error: 'lack of param RestoreRequest' }); + callback({ error: 'missing param RestoreRequest' }); return; } @@ -2925,20 +2960,59 @@ function multipartInit(params, callback) { /** * 分块上传 - * @param {Object} params 参数对象,必须 - * @param {String} params.Bucket Bucket名称,必须 - * @param {String} params.Region 地域名称,必须 - * @param {String} params.Key object名称,必须 - * @param {String} params.ContentLength RFC 2616 中定义的 HTTP 请求内容长度(字节),非必须 - * @param {String} params.Expect 当使用 Expect: 100-continue 时,在收到服务端确认后,才会发送请求内容,非必须 - * @param {String} params.ServerSideEncryption 支持按照指定的加密算法进行服务端数据加密,格式 x-cos-server-side-encryption: "AES256",非必须 - * @param {String} params.ContentSha1 RFC 3174 中定义的 160-bit 内容 SHA-1 算法校验值,非必须 - * @param {Function} callback 回调函数,必须 - * @return {Object} err 请求失败的错误,如果请求成功,则为空。 - * @return {Object} data 返回的数据 - * @return {Object} data.ETag 返回的文件分块 sha1 值 + * @param {Object} params 参数对象,必须 + * @param {String} params.Bucket Bucket名称,必须 + * @param {String} params.Region 地域名称,必须 + * @param {String} params.Key object名称,必须 + * @param {File || Blob || String} params.Body 上传文件对象或字符串 + * @param {String} params.ContentLength RFC 2616 中定义的 HTTP 请求内容长度(字节),非必须 + * @param {String} params.Expect 当使用 Expect: 100-continue 时,在收到服务端确认后,才会发送请求内容,非必须 + * @param {String} params.ServerSideEncryption 支持按照指定的加密算法进行服务端数据加密,格式 x-cos-server-side-encryption: "AES256",非必须 + * @param {String} params.ContentSha1 RFC 3174 中定义的 160-bit 内容 SHA-1 算法校验值,非必须 + * @param {Function} callback 回调函数,必须 + * @return {Object} err 请求失败的错误,如果请求成功,则为空。 + * @return {Object} data 返回的数据 + * @return {Object} data.ETag 返回的文件分块 sha1 值 */ function multipartUpload(params, callback) { + + // 获取 filesize + var size; + if (util.isBrowser) { + if (typeof params.Body === 'string') { + params.Body = new global.Blob([params.Body]); + } + if (params.Body instanceof global.File || params.Body instanceof global.Blob) { + size = params.Body.size; + } else { + callback({ error: 'params body format error, Only allow File|Blob|String.' }); + return; + } + } else { + if (params.Body) { + if (typeof params.Body === 'string') { + params.Body = global.Buffer(params.Body); + } + if (params.Body instanceof global.Buffer) { + size = params.Body.length; + } else if (typeof params.Body.pipe === 'function') { + if (params.ContentLength === undefined) { + callback({ error: 'missing param ContentLength' }); + return; + } else { + size = params.ContentLength; + } + } else { + callback({ error: 'params Body format error, Only allow Buffer|Stream|String.' }); + return; + } + } else { + callback({ error: 'missing param Body' }); + return; + } + } + params.ContentLength = size || 0; + submitRequest.call(this, { TaskId: params.TaskId, method: 'PUT', @@ -3223,7 +3297,8 @@ function getObjectUrl(params, callback) { Bucket: params.Bucket || '', Region: params.Region || '', Method: params.Method || 'get', - Key: params.Key + Key: params.Key, + Expires: params.Expires }, function (AuthData) { if (!callback) return; var result = { @@ -3411,7 +3486,8 @@ function getAuthorizationAsync(params, callback) { Method: params.Method, Key: params.Key || '', Query: params.Query, - Headers: params.Headers + Headers: params.Headers, + Expires: params.Expires }); callback && callback({ Authorization: Authorization }); return Authorization; @@ -8027,7 +8103,7 @@ function sliceUploadFile(params, callback) { var FileSize; var self = this; - var onProgress = params.onProgress; + var onProgress; var onHashProgress = params.onHashProgress; // 上传过程中出现错误,返回错误 @@ -8053,8 +8129,10 @@ function sliceUploadFile(params, callback) { if (!self._isRunningTask(TaskId)) return; delete uploadIdUsing[UploadData.UploadId]; if (err) { + onProgress(null, true); return ep.emit('error', err); } + onProgress({ loaded: FileSize, total: FileSize }, true); removeUploadId.call(self, UploadData.UploadId); ep.emit('upload_complete', data); }); @@ -8064,7 +8142,7 @@ function sliceUploadFile(params, callback) { ep.on('get_upload_data_finish', function (UploadData) { // 处理 UploadId 缓存 - var uuid = getFileUuid(Body, params.ChunkSize); + var uuid = util.getFileUUID(Body, params.ChunkSize); uuid && setUploadId.call(self, uuid, UploadData.UploadId); // 缓存 UploadId uploadIdUsing[UploadData.UploadId] = true; // 标记 UploadId 为正在使用 TaskId && self.on('inner-kill-task', function (data) { @@ -8088,13 +8166,19 @@ function sliceUploadFile(params, callback) { onProgress: onProgress }, function (err, data) { if (!self._isRunningTask(TaskId)) return; - if (err) return ep.emit('error', err); + if (err) { + onProgress(null, true); + return ep.emit('error', err); + } ep.emit('upload_slice_complete', data); }); }); // 开始获取文件 UploadId,里面会视情况计算 ETag,并比对,保证文件一致性,也优化上传 ep.on('get_file_size_finish', function () { + + onProgress = util.throttleOnProgress.call(self, FileSize, params.onProgress); + if (params.UploadData.UploadId) { ep.emit('get_upload_data_finish', params.UploadData); } else { @@ -8121,7 +8205,7 @@ function sliceUploadFile(params, callback) { }); // 获取上传文件大小 - FileSize = Body.size || params.ContentLength; + FileSize = params.ContentLength; delete params.ContentLength; !params.Headers && (params.Headers = {}); util.each(params.Headers, function (item, key) { @@ -8159,7 +8243,7 @@ function initUploadId() { if (!uploadIdCache) { if (cacheLimit) { try { - uploadIdCache = JSON.parse(localStorage.getItem(uploadIdCacheKey)) || []; + uploadIdCache = JSON.parse(util.localStorage.getItem(uploadIdCacheKey)) || []; } catch (e) {} } if (!uploadIdCache) { @@ -8181,7 +8265,7 @@ function setUploadId(uuid, UploadId, isDisabled) { } cacheLimit && setTimeout(function () { try { - localStorage.setItem(uploadIdCacheKey, JSON.stringify(uploadIdCache)); + util.localStorage.setItem(uploadIdCacheKey, JSON.stringify(uploadIdCache)); } catch (e) {} }); } @@ -8200,9 +8284,9 @@ function removeUploadId(UploadId) { cacheLimit && setTimeout(function () { try { if (uploadIdCache.length) { - localStorage.setItem(uploadIdCacheKey, JSON.stringify(uploadIdCache)); + util.localStorage.setItem(uploadIdCacheKey, JSON.stringify(uploadIdCache)); } else { - localStorage.removeItem(uploadIdCacheKey); + util.localStorage.removeItem(uploadIdCacheKey); } } catch (e) {} }); @@ -8217,14 +8301,6 @@ function getUploadId(uuid) { } return CacheUploadIdList.length ? CacheUploadIdList : null; } -function getFileUuid(file, ChunkSize) { - // 如果信息不完整,不获取 - if (file.name && file.size && file.lastModifiedDate && ChunkSize) { - return util.md5([file.name, file.size, file.lastModifiedDate, ChunkSize].join('::')); - } else { - return null; - } -} // 获取上传任务的 UploadId function getUploadIdAndPartList(params, callback) { @@ -8232,7 +8308,6 @@ function getUploadIdAndPartList(params, callback) { var Bucket = params.Bucket; var Region = params.Region; var Key = params.Key; - var Body = params.Body; var StorageClass = params.StorageClass; var self = this; @@ -8256,8 +8331,8 @@ function getUploadIdAndPartList(params, callback) { Size: ChunkSize }); } else { - var blob = util.fileSlice(Body, start, end); - util.getFileMd5(blob, function (err, md5) { + var chunkItem = util.fileSlice(params.Body, start, end); + util.getFileMd5(chunkItem, function (err, md5) { if (err) return callback(err); var ETag = '"' + md5 + '"'; ETagMap[PartNumber] = ETag; @@ -8418,7 +8493,7 @@ function getUploadIdAndPartList(params, callback) { // 在本地缓存找可用的 UploadId ep.on('seek_local_avail_upload_id', function (RemoteUploadIdList) { // 在本地找可用的 UploadId - var uuid = getFileUuid(params.Body, params.ChunkSize), + var uuid = util.getFileUUID(params.Body, params.ChunkSize), LocalUploadIdList; if (uuid && (LocalUploadIdList = getUploadId.call(self, uuid))) { var next = function (index) { @@ -8486,7 +8561,7 @@ function getUploadIdAndPartList(params, callback) { if (RemoteUploadIdList.length) { ep.emit('seek_local_avail_upload_id', RemoteUploadIdList); } else { - var uuid = getFileUuid(params.Body, params.ChunkSize), + var uuid = util.getFileUUID(params.Body, params.ChunkSize), LocalUploadIdList; if (uuid && (LocalUploadIdList = getUploadId.call(self, uuid))) { util.each(LocalUploadIdList, function (UploadId) { @@ -8584,8 +8659,7 @@ function uploadSliceList(params, cb) { } return !SliceItem['Uploaded']; }); - - var onProgress = util.throttleOnProgress.call(self, FileSize, params.onProgress); + var onProgress = params.onProgress; Async.eachLimit(needUploadSlices, ChunkParallel, function (SliceItem, asyncCallback) { if (!self._isRunningTask(TaskId)) return; @@ -8610,7 +8684,7 @@ function uploadSliceList(params, cb) { } }, function (err, data) { if (!self._isRunningTask(TaskId)) return; - if (!err && !data.ETag) { + if (util.isBrowser && !err && !data.ETag) { err = 'get ETag error, please add "ETag" to CORS ExposeHeader setting.'; } if (err) { @@ -8623,10 +8697,7 @@ function uploadSliceList(params, cb) { }); }, function (err) { if (!self._isRunningTask(TaskId)) return; - onProgress(null, true); - if (err) { - return cb(err); - } + if (err) return cb(err); cb(null, { UploadId: UploadData.UploadId, SliceList: UploadData.PartList @@ -8717,7 +8788,6 @@ function uploadSliceComplete(params, callback) { if (err) { return callback(err); } - callback(null, data); }); } @@ -8895,53 +8965,56 @@ function uploadFiles(params, callback) { // 开始处理每个文件 var taskList = []; util.each(params.files, function (fileParams, index) { + (function () { - var Body = fileParams.Body; - var FileSize = Body.size || Body.length || 0; - var fileInfo = { Index: index, TaskId: '' }; + var Body = fileParams.Body; + var FileSize = Body.size || Body.length || 0; + var fileInfo = { Index: index, TaskId: '' }; - // 更新文件总大小 - TotalSize += FileSize; + // 更新文件总大小 + TotalSize += FileSize; - // 整理 option,用于返回给回调 - util.each(fileParams, function (v, k) { - if (typeof v !== 'object' && typeof v !== 'function') { - fileInfo[k] = v; - } - }); + // 整理 option,用于返回给回调 + util.each(fileParams, function (v, k) { + if (typeof v !== 'object' && typeof v !== 'function') { + fileInfo[k] = v; + } + }); - // 处理单个文件 TaskReady - var _TaskReady = fileParams.TaskReady; - var TaskReady = function (tid) { - fileInfo.TaskId = tid; - _TaskReady && _TaskReady(tid); - }; - fileParams.TaskReady = TaskReady; - - // 处理单个文件进度 - var PreAddSize = 0; - var _onProgress = fileParams.onProgress; - var onProgress = function (info) { - TotalFinish = TotalFinish - PreAddSize + info.loaded; - PreAddSize = info.loaded; - _onProgress && _onProgress(info); - onTotalProgress({ loaded: TotalFinish, total: TotalSize }); - }; - fileParams.onProgress = onProgress; + // 处理单个文件 TaskReady + var _TaskReady = fileParams.TaskReady; + var TaskReady = function (tid) { + fileInfo.TaskId = tid; + _TaskReady && _TaskReady(tid); + }; + fileParams.TaskReady = TaskReady; + + // 处理单个文件进度 + var PreAddSize = 0; + var _onProgress = fileParams.onProgress; + var onProgress = function (info) { + TotalFinish = TotalFinish - PreAddSize + info.loaded; + PreAddSize = info.loaded; + _onProgress && _onProgress(info); + onTotalProgress({ loaded: TotalFinish, total: TotalSize }); + }; + fileParams.onProgress = onProgress; - // 处理单个文件完成 - var _onFileFinish = fileParams.onFileFinish; - var onFileFinish = function (err, data) { - _onFileFinish && _onFileFinish(err, data); - onTotalFileFinish && onTotalFileFinish(err, data, fileInfo); - }; + // 处理单个文件完成 + var _onFileFinish = fileParams.onFileFinish; + var onFileFinish = function (err, data) { + _onFileFinish && _onFileFinish(err, data); + onTotalFileFinish && onTotalFileFinish(err, data, fileInfo); + }; - // 添加上传任务 - taskList.push({ - api: FileSize >= SliceSize ? 'sliceUploadFile' : 'putObject', - params: fileParams, - callback: onFileFinish - }); + // 添加上传任务 + var api = FileSize >= SliceSize ? 'sliceUploadFile' : 'putObject'; + taskList.push({ + api: api, + params: fileParams, + callback: onFileFinish + }); + })(); }); self._addTasks(taskList); } diff --git a/dist/cos-js-sdk-v5.min.js b/dist/cos-js-sdk-v5.min.js index 176bc7a..4e8c910 100644 --- a/dist/cos-js-sdk-v5.min.js +++ b/dist/cos-js-sdk-v5.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.COS=t():e.COS=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/dist/",t(t.s=3)}([function(e,t,n){"use strict";(function(t){function r(e){return encodeURIComponent(e).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A")}function o(e){return u(e,function(e){return"object"==typeof e?o(e):e})}function i(e,t){return c(t,function(n,r){e[r]=t[r]}),e}function a(e){return e instanceof Array}function s(e,t){for(var n=!1,r=0;r-1||"deleteMultipleObject"===e||"multipartList"===e||"listObjectVersions"===e?n&&r:!(e.indexOf("Object")>-1||e.indexOf("multipart")>-1||"sliceUploadFile"===e||"abortUploadTask"===e)||n&&r&&o},b=function(e,t){return function(n,r){"function"==typeof n&&(r=n,n={}),n=i({},n);var o=n.Headers||{};n&&"object"==typeof n&&(!function(){for(var e in n)n.hasOwnProperty(e)&&e.indexOf("x-cos-")>-1&&(o[e]=n[e])}(),o["x-cos-mfa"]=n.MFA,o["Content-MD5"]=n.ContentMD5,o["Content-Length"]=n.ContentLength,o["Content-Type"]=n.ContentType,o.Expect=n.Expect,o.Expires=n.Expires,o["Cache-Control"]=n.CacheControl,o["Content-Disposition"]=n.ContentDisposition,o["Content-Encoding"]=n.ContentEncoding,o.Range=n.Range,o["If-Modified-Since"]=n.IfModifiedSince,o["If-Unmodified-Since"]=n.IfUnmodifiedSince,o["If-Match"]=n.IfMatch,o["If-None-Match"]=n.IfNoneMatch,o["x-cos-copy-source"]=n.CopySource,o["x-cos-copy-source-Range"]=n.CopySourceRange,o["x-cos-metadata-directive"]=n.MetadataDirective,o["x-cos-copy-source-If-Modified-Since"]=n.CopySourceIfModifiedSince,o["x-cos-copy-source-If-Unmodified-Since"]=n.CopySourceIfUnmodifiedSince,o["x-cos-copy-source-If-Match"]=n.CopySourceIfMatch,o["x-cos-copy-source-If-None-Match"]=n.CopySourceIfNoneMatch,o["x-cos-server-side-encryption"]=n.ServerSideEncryption,o["x-cos-acl"]=n.ACL,o["x-cos-grant-read"]=n.GrantRead,o["x-cos-grant-write"]=n.GrantWrite,o["x-cos-grant-full-control"]=n.GrantFullControl,o["x-cos-grant-read-acp"]=n.GrantReadAcp,o["x-cos-grant-write-acp"]=n.GrantWriteAcp,o["x-cos-storage-class"]=n.StorageClass,n.Headers=y(o));var a=function(e){return e&&e.headers&&(e.headers["x-cos-version-id"]&&(e.VersionId=e.headers["x-cos-version-id"]),e.headers["x-cos-delete-marker"]&&(e.DeleteMarker=e.headers["x-cos-delete-marker"])),e},s=function(e,t){r&&r(a(e),a(t))};if("getService"!==e&&"abortUploadTask"!==e){if(!x(e,n))return void s({error:"lack of required params"});if(n.Region&&-1===n.Region.indexOf("-")&&"yfb"!==n.Region)return void s({error:"Region format error, find help here: https://cloud.tencent.com/document/product/436/6224"});if(n.Region&&n.Region.indexOf("cos.")>-1)return void s({error:'Region should not be start with "cos."'});if(n.Bucket){if(!/^(.+)-(\d+)$/.test(n.Bucket))if(n.AppId)n.Bucket=n.Bucket+"-"+n.AppId;else{if(!this.options.AppId)return void s({error:'Bucket should format as "test-1250000000".'});n.Bucket=n.Bucket+"-"+this.options.AppId}n.AppId&&(console.warn('warning: AppId has been deprecated, Please put it at the end of parameter Bucket(E.g Bucket:"test-1250000000" ).'),delete n.AppId)}n.Key&&"/"===n.Key.substr(0,1)&&(n.Key=n.Key.substr(1))}var c=t.call(this,n,s);if("getAuth"===e||"getObjectUrl"===e)return c}},T=function(e,t){function n(){if(o=0,t&&"function"==typeof t){r=Date.now();var n,i=Math.max(0,Math.round((s-a)/((r-c)/1e3)*100)/100);n=0===s&&0===e?1:Math.round(s/e*100)/100||0,c=r,a=s;try{t({loaded:s,total:e,speed:i,percent:n})}catch(e){}}}var r,o,i=this,a=0,s=0,c=Date.now();return function(t,r){if(t&&(s=t.loaded,e=t.total),r)clearTimeout(o),n();else{if(o)return;o=setTimeout(n,i.options.ProgressInterval)}}},R={apiWrapper:b,getAuth:g,xml2json:p,json2xml:h,md5:d,clearKey:y,getFileMd5:m,binaryBase64:C,extend:i,isArray:a,isInArray:s,each:c,map:u,filter:l,clone:o,uuid:k,throttleOnProgress:T,isBrowser:!!t.document};R.fileSlice=function(e,t,n){return e.slice?e.slice(t,n):e.mozSlice?e.mozSlice(t,n):e.webkitSlice?e.webkitSlice(t,n):void 0},e.exports=R}).call(t,n(1))},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){var n=function(e){var t={},n=function(e){return!t[e]&&(t[e]=[]),t[e]};e.on=function(e,t){"task-list-update"===e&&console.warn('warning: Event "'+e+'" has been deprecated. Please use "list-update" instead.'),n(e).push(t)},e.off=function(e,t){for(var r=n(e),o=r.length-1;o>=0;o--)t===r[o]&&r.splice(o,1)},e.emit=function(e,t){for(var r=n(e).map(function(e){return e}),o=0;o>>32-o,n)}function o(e,t,n,o,i,a,s){return r(t&n|~t&o,e,t,i,a,s)}function i(e,t,n,o,i,a,s){return r(t&o|n&~o,e,t,i,a,s)}function a(e,t,n,o,i,a,s){return r(t^n^o,e,t,i,a,s)}function s(e,t,n,o,i,a,s){return r(n^(t|~o),e,t,i,a,s)}function c(e){txt="";var t,r=e.length,o=[1732584193,-271733879,-1732584194,271733878];for(t=64;t<=e.length;t+=64)n(o,u(e.substring(t-64,t)));e=e.substring(t-64);var i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(t=0;t>2]|=e.charCodeAt(t)<<(t%4<<3);if(i[t>>2]|=128<<(t%4<<3),t>55)for(n(o,i),t=0;t<16;t++)i[t]=0;return i[14]=8*r,n(o,i),o}function u(e){var t,n=[];for(t=0;t<64;t+=4)n[t>>2]=e.charCodeAt(t)+(e.charCodeAt(t+1)<<8)+(e.charCodeAt(t+2)<<16)+(e.charCodeAt(t+3)<<24);return n}function l(e){for(var t="",n=0;n<4;n++)t+=p[e>>8*n+4&15]+p[e>>8*n&15];return t}function d(e){for(var t=0;t>16)+(t>>16)+(n>>16)<<16|65535&n}),e.exports=f},function(e,t,n){var r=r||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},a=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=void 0!=t?t:4*e.length},toString:function(e){return(e||c).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;o>>2]|=(n[o>>>2]>>>24-o%4*8&255)<<24-(r+o)%4*8;else if(65535>>2]=n[o>>>2];else t.push.apply(t,n);return this.sigBytes+=e,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},u=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},d=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,o=n.sigBytes,i=this.blockSize,s=o/(4*i),s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0);if(t=s*i,o=e.min(4*t,o),t){for(var c=0;cu;u++){if(16>u)i[u]=0|e[t+u];else{var l=i[u-3]^i[u-8]^i[u-14]^i[u-16];i[u]=l<<1|l>>>31}l=(r<<5|r>>>27)+c+i[u],l=20>u?l+(1518500249+(o&a|~o&s)):40>u?l+(1859775393+(o^a^s)):60>u?l+((o&a|o&s|a&s)-1894007588):l+((o^a^s)-899497514),c=s,s=a,a=o<<30|o>>>2,o=r,r=l}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+a|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=Math.floor(n/4294967296),t[15+(r+64>>>9<<4)]=n,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});e.SHA1=o._createHelper(t),e.HmacSHA1=o._createHmacHelper(t)}(),function(){var e=r,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,o=4*r;n.sigBytes>o&&(n=e.finalize(n)),n.clamp();for(var i=this._oKey=n.clone(),a=this._iKey=n.clone(),s=i.words,c=a.words,u=0;u>>2]>>>24-i%4*8&255,s=t[i+1>>>2]>>>24-(i+1)%4*8&255,c=t[i+2>>>2]>>>24-(i+2)%4*8&255,u=a<<16|s<<8|c,l=0;l<4&&i+.75*l>>6*(3-l)&63));var d=r.charAt(64);if(d)for(;o.length%4;)o.push(d);return o.join("")},parse:function(e){var t=e.length,r=this._map,o=r.charAt(64);if(o){var i=e.indexOf(o);-1!=i&&(t=i)}for(var a=[],s=0,c=0;c>>6-c%4*2;a[s>>>2]|=(u|l)<<24-s%4*8,s++}return n.create(a,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),e.exports=r},function(e,t){var n=function(){this.version="1.3.5";var e={mergeCDATA:!0,normalize:!0,stripElemPrefix:!0},t=new RegExp(/(?!xmlns)^.*:/),r=new RegExp(/^\s+|\s+$/g);return this.grokType=function(e){return/^\s*$/.test(e)?null:/^(?:true|false)$/i.test(e)?"true"===e.toLowerCase():isFinite(e)?parseFloat(e):e},this.parseString=function(e,t){if(e){var n=this.stringToXML(e);return n.getElementsByTagName("parsererror").length?null:this.parseXML(n,t)}return null},this.parseXML=function(o,i){for(var a in i)e[a]=i[a];var s={},c=0,u="";if(o.childNodes.length)for(var l,d,f,p=0;p/g,">").replace(/'/g,"'").replace(/"/g,""").replace(o,"")}var r=new RegExp("^([^a-zA-Z_À-ÖØ-öø-ÿͰ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿿、-퟿豈-﷏ﷰ-�])|^((x|X)(m|M)(l|L))|([^a-zA-Z_À-ÖØ-öø-ÿͰ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿿、-퟿豈-﷏ﷰ-�-.0-9·̀-ͯ‿⁀])","g"),o=/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm,i=function(e){var t=[];if(e instanceof Object)for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},a=function(e,t){var o=function(e,n,o,i,a){var s=void 0!==t.indent?t.indent:"\t",c=t.prettyPrint?"\n"+new Array(i).join(s):"";t.removeIllegalNameCharacters&&(e=e.replace(r,"_"));var u=[c,"<",e,o||""];return n&&n.length>0?(u.push(">"),u.push(n),a&&u.push(c),u.push("")):u.push("/>"),u.join("")};return function e(r,a,s){var c=typeof r;switch((Array.isArray?Array.isArray(r):r instanceof Array)?c="array":r instanceof Date&&(c="date"),c){case"array":var u=[];return r.map(function(t){u.push(e(t,1,s+1))}),t.prettyPrint&&u.push("\n"),u.join("");case"date":return r.toJSON?r.toJSON():r+"";case"object":var l=[];for(var d in r)if(r[d]instanceof Array)for(var f=0;f0&&l.push("\n"),l.join("");case"function":return r();default:return t.escape?n(r):""+r}}(e,0,0)},s=function(e){var t=['"),t.join("")};e.exports=function(e,t){if(t||(t={xmlHeader:{standalone:!0},prettyPrint:!0,indent:" "}),"string"==typeof e)try{e=JSON.parse(e.toString())}catch(e){return!1}var n="",r="";return t&&("object"==typeof t?(t.xmlHeader&&(n=s(!!t.xmlHeader.standalone)),void 0!==t.docType&&(r="")):n=s()),t=t||{},[n,t.prettyPrint&&r?"\n":"",r,a(e,t)].join("").replace(/\n{2,}/g,"\n").replace(/\s+$/g,"")}},function(e,t,n){var r=n(0),o=function(e){var t=[],n={},o=0,i=0,a={};r.each(["putObject","sliceUploadFile"],function(t){a[t]=e[t],e[t]=function(n,r){e._addTask(t,n,r)}});var s=function(e){var t={id:e.id,Bucket:e.Bucket,Region:e.Region,Key:e.Key,FilePath:e.FilePath,state:e.state,loaded:e.loaded,size:e.size,speed:e.speed,percent:e.percent,hashPercent:e.hashPercent,error:e.error};return e.FilePath&&(t.FilePath=e.FilePath),t},c=function(){e.emit("task-list-update",{list:r.map(t,s)}),e.emit("list-update",{list:r.map(t,s)})},u=function(){if(i-1?"{{Bucket}}-{{AppId}}.{{Region}}.myqcloud.com":"{{Bucket}}-{{AppId}}.cos.{{Region}}.myqcloud.com"),o=o.replace(/\{\{AppId\}\}/gi,r).replace(/\{\{Bucket\}\}/gi,n).replace(/\{\{Region\}\}/gi,i).replace(/\{\{.*?\}\}/gi,""),/^[a-zA-Z]+:\/\//.test(o)||(o=s+"//"+o),"/"===o.slice(-1)&&(o=o.slice(0,-1));var c=o;return a&&(c+="/"+encodeURIComponent(a).replace(/%2F/g,"/")),e.isLocation&&(c=c.replace(/^https?:\/\//,"")),c}function V(e,t){var n=this,r=e.Bucket||"",o=e.Region||"";n._StsMap=n._StsMap||{};var i=n._StsMap[r+"."+o]||{},a=function(){var n=Y.getAuth({SecretId:i.TmpSecretId,SecretKey:i.TmpSecretKey,Method:e.Method,Key:e.Key||"",Query:e.Query,Headers:e.Headers}),r={Authorization:n,XCosSecurityToken:i.XCosSecurityToken||"",Token:i.Token||"",ClientIP:i.ClientIP||"",ClientUA:i.ClientUA||""};t&&t(r)};if(i.ExpiredTime&&i.ExpiredTime-(Date.now()/1e3>60))a();else if(n.options.getAuthorization)n.options.getAuthorization.call(n,{Bucket:r,Region:o,Method:e.Method,Key:e.Key||"",Query:e.Query,Headers:e.Headers},function(e){"string"==typeof e&&(e={Authorization:e}),e.TmpSecretId&&e.TmpSecretKey&&e.XCosSecurityToken&&e.ExpiredTime?(i=n._StsMap[r+"."+o]=e,a()):t&&t(e)});else{if(!n.options.getSTS){var s=Y.getAuth({SecretId:e.SecretId||n.options.SecretId,SecretKey:e.SecretKey||n.options.SecretKey,Method:e.Method,Key:e.Key||"",Query:e.Query,Headers:e.Headers});return t&&t({Authorization:s}),s}n.options.getSTS.call(n,{Bucket:r,Region:o},function(e){i=n._StsMap[r+"."+o]=e||{},i.TmpSecretId=i.SecretId,i.TmpSecretKey=i.SecretKey,a()})}return""}function $(e,t){var n=this;!e.headers&&(e.headers={}),!e.qs&&(e.qs={}),e.VersionId&&(e.qs.versionId=e.VersionId),e.qs=Y.clearKey(e.qs),e.headers&&(e.headers=Y.clearKey(e.headers)),e.qs&&(e.qs=Y.clearKey(e.qs));var r=Y.clone(e.qs);e.action&&(r[e.action]=""),V.call(n,{Bucket:e.Bucket||"",Region:e.Region||"",Method:e.method,Key:e.Key,Query:r,Headers:e.headers},function(r){var o=r.Authorization,i=!1;if(o)if(o.indexOf(" ")>-1)i=!1;else if(o.indexOf("q-sign-algorithm=")>-1&&o.indexOf("q-ak=")>-1&&o.indexOf("q-sign-time=")>-1&&o.indexOf("q-key-time=")>-1&&o.indexOf("q-url-param-list=")>-1)i=!0;else try{o=atob(o),o.indexOf("a=")>-1&&o.indexOf("k=")>-1&&o.indexOf("t=")>-1&&o.indexOf("r=")>-1&&o.indexOf("b=")>-1&&(i=!0)}catch(e){}if(!i)return void t("authorization error");e.AuthData=r,J.call(n,e,t)})}function J(e,t){var n=this,r=e.TaskId;if(!r||n._isRunningTask(r)){var o=e.Bucket,i=e.Region,a=e.Key,s=e.method||"GET",c=e.url,u=e.body,l=e.json,d=e.rawBody;c=c||X({protocol:n.options.Protocol,domain:n.options.Domain,bucket:o,region:i,object:a}),e.action&&(c=c+(a?"":"/")+"?"+e.action);var f={method:s,url:c,headers:e.headers,qs:e.qs,body:u,json:l};if(f.headers.Authorization=e.AuthData.Authorization,e.AuthData.Token&&(f.headers.token=e.AuthData.Token),e.AuthData.ClientIP&&(f.headers.clientIP=e.AuthData.ClientIP),e.AuthData.ClientUA&&(f.headers.clientUA=e.AuthData.ClientUA),e.AuthData.XCosSecurityToken&&(f.headers["x-cos-security-token"]=e.AuthData.XCosSecurityToken),f.headers&&(f.headers=Y.clearKey(f.headers)),f=Y.clearKey(f),e.onProgress&&"function"==typeof e.onProgress){var p=u&&(u.size||u.length)||0;f.onProgress=function(t){if(!r||n._isRunningTask(r)){var o=t?t.loaded:0;e.onProgress({loaded:o,total:p})}}}var h=Q(f,function(e,o,i){var a,s=function(e,i){if(r&&n.off("inner-kill-task",g),!a){a=!0;var s={};o&&o.statusCode&&(s.statusCode=o.statusCode),o&&o.headers&&(s.headers=o.headers),e?(e=Y.extend(e||{},s),t(e,null)):(i=Y.extend(i||{},s),t(null,i))}};if(e)return void s({error:e});var c;try{c=Y.xml2json(i)||{}}catch(e){c=i||{}}var u=o.statusCode;return 2!==Math.floor(u/100)?void s({error:c.Error||c}):(d&&(c={},c.body=i),c.Error?void s({error:c.Error}):void s(null,c))}),g=function(e){e.TaskId===r&&(h&&h.abort&&h.abort(),n.off("inner-kill-task",g))};r&&n.on("inner-kill-task",g)}}var Q=n(11),Y=n(0),Z={getBucket:o,headBucket:r,deleteBucket:i,getBucketAcl:a,putBucketAcl:s,getBucketCors:c,putBucketCors:u,deleteBucketCors:l,getBucketLocation:f,putBucketTagging:g,getBucketTagging:h,deleteBucketTagging:y,getBucketPolicy:p,putBucketPolicy:d,getBucketLifecycle:m,putBucketLifecycle:v,deleteBucketLifecycle:C,putBucketVersioning:k,getBucketVersioning:x,putBucketReplication:b,getBucketReplication:T,deleteBucketReplication:R,getObject:w,headObject:S,listObjectVersions:B,putObject:A,deleteObject:_,getObjectAcl:P,putObjectAcl:E,optionsObject:j,putObjectCopy:I,deleteMultipleObject:O,restoreObject:D,uploadPartCopy:L,multipartInit:M,multipartUpload:U,multipartComplete:H,multipartList:K,multipartListPart:N,multipartAbort:F,getObjectUrl:z,getAuth:q};Y.each(Z,function(e,n){t[n]=Y.apiWrapper(n,e)})}).call(t,n(1))},function(e,t,n){var r=n(12),o=function(){function e(e){var t=e.length,n=A.type(e);return"function"!==n&&!A.isWindow(e)&&(!(1!==e.nodeType||!t)||("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e))}function t(e){var t=M[e]={};return A.each(e.match(D)||[],function(e,n){t[n]=!0}),t}function n(){L.addEventListener?(L.removeEventListener("DOMContentLoaded",r,!1),window.removeEventListener("load",r,!1)):(L.detachEvent("onreadystatechange",r),window.detachEvent("onload",r))}function r(){(L.addEventListener||"load"===event.type||"complete"===L.readyState)&&(n(),A.ready())}function o(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace(N,"-$1").toLowerCase();if("string"==typeof(n=e.getAttribute(r))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:K.test(n)?A.parseJSON(n):n)}catch(e){}A.data(e,t,n)}else n=void 0}return n}function i(e){var t;for(t in e)if(("data"!==t||!A.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function a(e,t,n,r){if(A.acceptData(e)){var o,i,a=A.expando,s=e.nodeType,c=s?A.cache:e,u=s?e[a]:e[a]&&a;if(u&&c[u]&&(r||c[u].data)||void 0!==n||"string"!=typeof t)return u||(u=s?e[a]=m.pop()||A.guid++:a),c[u]||(c[u]=s?{}:{toJSON:A.noop}),"object"!=typeof t&&"function"!=typeof t||(r?c[u]=A.extend(c[u],t):c[u].data=A.extend(c[u].data,t)),i=c[u],r||(i.data||(i.data={}),i=i.data),void 0!==n&&(i[A.camelCase(t)]=n),"string"==typeof t?null==(o=i[t])&&(o=i[A.camelCase(t)]):o=i,o}}function s(e,t,n){if(A.acceptData(e)){var r,o,a=e.nodeType,s=a?A.cache:e,c=a?e[A.expando]:A.expando;if(s[c]){if(t&&(r=n?s[c]:s[c].data)){A.isArray(t)?t=t.concat(A.map(t,A.camelCase)):t in r?t=[t]:(t=A.camelCase(t),t=t in r?[t]:t.split(" ")),o=t.length;for(;o--;)delete r[t[o]];if(n?!i(r):!A.isEmptyObject(r))return}(n||(delete s[c].data,i(s[c])))&&(a?A.cleanData([e],!0):B.deleteExpando||s!=s.window?delete s[c]:s[c]=null)}}}function c(){return!0}function u(){return!1}function l(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,o=0,i=t.toLowerCase().match(D)||[];if(A.isFunction(n))for(;r=i[o++];)"+"===r.charAt(0)?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function d(e,t,n,r){function o(s){var c;return i[s]=!0,A.each(e[s]||[],function(e,s){var u=s(t,n,r);return"string"!=typeof u||a||i[u]?a?!(c=u):void 0:(t.dataTypes.unshift(u),o(u),!1)}),c}var i={},a=e===ae;return o(t.dataTypes[0])||!i["*"]&&o("*")}function f(e,t){var n,r,o=A.ajaxSettings.flatOptions||{};for(r in t)void 0!==t[r]&&((o[r]?e:n||(n={}))[r]=t[r]);return n&&A.extend(!0,e,n),e}function p(e,t,n){for(var r,o,i,a,s=e.contents,c=e.dataTypes;"*"===c[0];)c.shift(),void 0===o&&(o=e.mimeType||t.getResponseHeader("Content-Type"));if(o)for(a in s)if(s[a]&&s[a].test(o)){c.unshift(a);break}if(c[0]in n)i=c[0];else{for(a in n){if(!c[0]||e.converters[a+" "+c[0]]){i=a;break}r||(r=a)}i=i||r}if(i)return i!==c[0]&&c.unshift(i),n[i]}function h(e,t,n,r){var o,i,a,s,c,u={},l=e.dataTypes.slice();if(l[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];for(i=l.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!c&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),c=i,i=l.shift())if("*"===i)i=c;else if("*"!==c&&c!==i){if(!(a=u[c+" "+i]||u["* "+i]))for(o in u)if(s=o.split(" "),s[1]===i&&(a=u[c+" "+s[0]]||u["* "+s[0]])){!0===a?a=u[o]:!0!==u[o]&&(i=s[0],l.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+c+" to "+i}}}return{state:"success",data:t}}function g(e,t,n,r){var o;if(A.isArray(t))A.each(t,function(t,o){n||ue.test(e)?r(e,o):g(e+"["+("object"==typeof o?t:"")+"]",o,n,r)});else if(n||"object"!==A.type(t))r(e,t);else for(o in t)g(e+"["+o+"]",t[o],n,r)}function y(){try{return new window.XMLHttpRequest}catch(e){}}function v(){try{return new window.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}var m=[],C=m.slice,k=m.concat,x=m.push,b=m.indexOf,T={},R=T.toString,S=T.hasOwnProperty,B={},w="1.11.1 -css,-css/addGetHookIf,-css/curCSS,-css/defaultDisplay,-css/hiddenVisibleSelectors,-css/support,-css/swap,-css/var/cssExpand,-css/var/isHidden,-css/var/rmargin,-css/var/rnumnonpx,-effects,-effects/Tween,-effects/animatedSelector,-effects/support,-dimensions,-offset,-deprecated,-event-alias,-wrap",A=function(e,t){return new A.fn.init(e,t)},_=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,P=/^-ms-/,E=/-([\da-z])/gi,j=function(e,t){return t.toUpperCase()};A.fn=A.prototype={jquery:w,constructor:A,selector:"",length:0,toArray:function(){return C.call(this)},get:function(e){return null!=e?e<0?this[e+this.length]:this[e]:C.call(this)},pushStack:function(e){var t=A.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return A.each(this,e,t)},map:function(e){return this.pushStack(A.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(C.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||"object"!==A.type(e)||e.nodeType||A.isWindow(e))return!1;try{if(e.constructor&&!S.call(e,"constructor")&&!S.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}if(B.ownLast)for(t in e)return S.call(e,t);for(t in e);return void 0===t||S.call(e,t)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?T[R.call(e)]||"object":typeof e},globalEval:function(e){e&&A.trim(e)&&(window.execScript||function(e){window.eval.call(window,e)})(e)},camelCase:function(e){return e.replace(P,"ms-").replace(E,j)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(t,n,r){var o=0,i=t.length,a=e(t);if(r){if(a)for(;o)[^>]*|#([\w-]*))$/;(A.fn.init=function(e,t){var n,r;if(!e)return this;if("string"==typeof e){if(!(n="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:O.exec(e))||!n[1]&&t)return!t||t.jquery?(t||I).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof A?t[0]:t,A.merge(this,A.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:L,!0)),rsingleTag.test(n[1])&&A.isPlainObject(t))for(n in t)A.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}if((r=L.getElementById(n[2]))&&r.parentNode){if(r.id!==n[2])return I.find(e);this.length=1,this[0]=r}return this.context=L,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):A.isFunction(e)?void 0!==I.ready?I.ready(e):e(A):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),A.makeArray(e,this))}).prototype=A.fn,I=A(L);var D=/\S+/g,M={};A.Callbacks=function(e){e="string"==typeof e?M[e]||t(e):A.extend({},e);var n,r,o,i,a,s,c=[],u=!e.once&&[],l=function(t){for(r=e.memory&&t,o=!0,a=s||0,s=0,i=c.length,n=!0;c&&a-1;)c.splice(r,1),n&&(r<=i&&i--,r<=a&&a--)}),this},has:function(e){return e?A.inArray(e,c)>-1:!(!c||!c.length)},empty:function(){return c=[],i=0,this},disable:function(){return c=u=r=void 0,this},disabled:function(){return!c},lock:function(){return u=void 0,r||d.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!c||o&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):l(t)),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!o}};return d},A.extend({Deferred:function(e){var t=[["resolve","done",A.Callbacks("once memory"),"resolved"],["reject","fail",A.Callbacks("once memory"),"rejected"],["notify","progress",A.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var e=arguments;return A.Deferred(function(n){A.each(t,function(t,i){var a=A.isFunction(e[t])&&e[t];o[i[1]](function(){var e=a&&a.apply(this,arguments);e&&A.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[i[0]+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?A.extend(e,r):r}},o={};return r.pipe=r.then,A.each(t,function(e,i){var a=i[2],s=i[3];r[i[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),o[i[0]]=function(){return o[i[0]+"With"](this===o?r:this,arguments),this},o[i[0]+"With"]=a.fireWith}),r.promise(o),e&&e.call(o,o),o},when:function(e){var t,n,r,o=0,i=C.call(arguments),a=i.length,s=1!==a||e&&A.isFunction(e.promise)?a:0,c=1===s?e:A.Deferred(),u=function(e,n,r){return function(o){n[e]=this,r[e]=arguments.length>1?C.call(arguments):o,r===t?c.notifyWith(n,r):--s||c.resolveWith(n,r)}};if(a>1)for(t=new Array(a),n=new Array(a),r=new Array(a);o0||(U.resolveWith(L,[A]),A.fn.triggerHandler&&(A(L).triggerHandler("ready"),A(L).off("ready")))}}}),A.ready.promise=function(e){if(!U)if(U=A.Deferred(),"complete"===L.readyState)setTimeout(A.ready);else if(L.addEventListener)L.addEventListener("DOMContentLoaded",r,!1),window.addEventListener("load",r,!1);else{L.attachEvent("onreadystatechange",r),window.attachEvent("onload",r);var t=!1;try{t=null==window.frameElement&&L.documentElement}catch(e){}t&&t.doScroll&&function e(){if(!A.isReady){try{t.doScroll("left")}catch(t){return setTimeout(e,50)}n(),A.ready()}}()}return U.promise(e)};var H;for(H in A(B))break;B.ownLast="0"!==H,B.inlineBlockNeedsLayout=!1,A(function(){var e,t,n,r;(n=L.getElementsByTagName("body")[0])&&n.style&&(t=L.createElement("div"),r=L.createElement("div"),r.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(r).appendChild(t),void 0!==t.style.zoom&&(t.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",B.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(r))}),function(){var e=L.createElement("div");if(null==B.deleteExpando){B.deleteExpando=!0;try{delete e.test}catch(e){B.deleteExpando=!1}}e=null}(),A.acceptData=function(e){var t=A.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||!0!==t&&e.getAttribute("classid")===t)};var K=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;A.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return!!(e=e.nodeType?A.cache[e[A.expando]]:e[A.expando])&&!i(e)},data:function(e,t,n){return a(e,t,n)},removeData:function(e,t){return s(e,t)},_data:function(e,t,n){return a(e,t,n,!0)},_removeData:function(e,t){return s(e,t,!0)}}),A.fn.extend({data:function(e,t){var n,r,i,a=this[0],s=a&&a.attributes;if(void 0===e){if(this.length&&(i=A.data(a),1===a.nodeType&&!A._data(a,"parsedAttrs"))){for(n=s.length;n--;)s[n]&&(r=s[n].name,0===r.indexOf("data-")&&(r=A.camelCase(r.slice(5)),o(a,r,i[r])));A._data(a,"parsedAttrs",!0)}return i}return"object"==typeof e?this.each(function(){A.data(this,e)}):arguments.length>1?this.each(function(){A.data(this,e,t)}):a?o(a,e,A.data(a,e)):void 0},removeData:function(e){return this.each(function(){A.removeData(this,e)})}}),A.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=A._data(e,t),n&&(!r||A.isArray(n)?r=A._data(e,t,A.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=A.queue(e,t),r=n.length,o=n.shift(),i=A._queueHooks(e,t),a=function(){A.dequeue(e,t)};"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===t&&n.unshift("inprogress"),delete i.stop,o.call(e,a,i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return A._data(e,n)||A._data(e,n,{empty:A.Callbacks("once memory").add(function(){A._removeData(e,t+"queue"),A._removeData(e,n)})})}}),A.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length=0&&(p=f.split("."),f=p.shift(),p.sort()),i=f.indexOf(":")<0&&"on"+f,e=e[A.expando]?e:new A.Event(f,"object"==typeof e&&e),e.isTrigger=r?2:3,e.namespace=p.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:A.makeArray(t,[e]),c=A.event.special[f]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!A.isWindow(n)){for(s=c.delegateType||f,G.test(s+f)||(a=a.parentNode);a;a=a.parentNode)d.push(a),u=a;u===(n.ownerDocument||L)&&d.push(u.defaultView||u.parentWindow||window)}for(l=0;(a=d[l++])&&!e.isPropagationStopped();)e.type=l>1?s:c.bindType||f,o=(A._data(a,"events")||{})[e.type]&&A._data(a,"handle"),o&&o.apply(a,t),(o=i&&a[i])&&o.apply&&A.acceptData(a)&&(e.result=o.apply(a,t),!1===e.result&&e.preventDefault());if(e.type=f,!r&&!e.isDefaultPrevented()&&(!c._default||!1===c._default.apply(d.pop(),t))&&A.acceptData(n)&&i&&n[f]&&!A.isWindow(n)){u=n[i],u&&(n[i]=null),A.event.triggered=f;try{n[f]()}catch(e){}A.event.triggered=void 0,u&&(n[i]=u)}return e.result}},dispatch:function(e){e=A.event.fix(e);var t,n,r,o,i,a=[],s=C.call(arguments),c=(A._data(this,"events")||{})[e.type]||[],u=A.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!u.preDispatch||!1!==u.preDispatch.call(this,e)){for(a=A.event.handlers.call(this,e,c),t=0;(o=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,i=0;(r=o.handlers[i++])&&!e.isImmediatePropagationStopped();)e.namespace_re&&!e.namespace_re.test(r.namespace)||(e.handleObj=r,e.data=r.data,void 0!==(n=((A.event.special[r.origType]||{}).handle||r.handler).apply(o.elem,s))&&!1===(e.result=n)&&(e.preventDefault(),e.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,o,i,a=[],s=t.delegateCount,c=e.target;if(s&&c.nodeType&&(!e.button||"click"!==e.type))for(;c!=this;c=c.parentNode||this)if(1===c.nodeType&&(!0!==c.disabled||"click"!==e.type)){for(o=[],i=0;i=0:A.find(n,this,null,[c]).length),o[n]&&o.push(r);o.length&&a.push({elem:c,handlers:o})}return s0?4:0,o=e>=200&&e<300||304===e,n&&(k=p(f,R,n)),k=h(f,k,R,o),o?(f.ifModified&&(x=R.getResponseHeader("Last-Modified"),x&&(A.lastModified[i]=x),(x=R.getResponseHeader("etag"))&&(A.etag[i]=x)),204===e||"HEAD"===f.type?T="nocontent":304===e?T="notmodified":(T=k.state,l=k.data,d=k.error,o=!d)):(d=T,!e&&T||(T="error",e<0&&(e=0))),R.status=e,R.statusText=(t||T)+"",o?v.resolveWith(g,[l,T,R]):v.rejectWith(g,[R,T,d]),R.statusCode(C),C=void 0,c&&y.trigger(o?"ajaxSuccess":"ajaxError",[R,f,o?l:d]),m.fireWith(g,[R,T]),c&&(y.trigger("ajaxComplete",[R,f]),--A.active||A.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var r,o,i,a,s,c,u,l,f=A.ajaxSetup({},t),g=f.context||f,y=f.context&&(g.nodeType||g.jquery)?A(g):A.event,v=A.Deferred(),m=A.Callbacks("once memory"),C=f.statusCode||{},k={},x={},b=0,T="canceled",R={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!l)for(l={};t=ee.exec(a);)l[t[1].toLowerCase()]=t[2];t=l[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=x[n]=x[n]||e,k[e]=t),this},overrideMimeType:function(e){return b||(f.mimeType=e),this},statusCode:function(e){var t;if(e)if(b<2)for(t in e)C[t]=[C[t],e[t]];else R.always(e[R.status]);return this},abort:function(e){var t=e||T;return u&&u.abort(t),n(0,t),this}};if(v.promise(R).complete=m.add,R.success=R.done,R.error=R.fail,f.url=((e||f.url||Q)+"").replace(Y,"").replace(re,J[1]+"//"),f.type=t.method||t.type||f.method||f.type,f.dataTypes=A.trim(f.dataType||"*").toLowerCase().match(D)||[""],null==f.crossDomain&&(r=oe.exec(f.url.toLowerCase()),f.crossDomain=!(!r||r[1]===J[1]&&r[2]===J[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(J[3]||("http:"===J[1]?"80":"443")))),f.data&&f.processData&&"string"!=typeof f.data&&(f.data=A.param(f.data,f.traditional)),d(ie,f,t,R),2===b)return R;c=f.global,c&&0==A.active++&&A.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!ne.test(f.type),i=f.url,f.hasContent||(f.data&&(i=f.url+=(V.test(i)?"&":"?")+f.data,delete f.data),!1===f.cache&&(f.url=Z.test(i)?i.replace(Z,"$1_="+X++):i+(V.test(i)?"&":"?")+"_="+X++)),f.ifModified&&(A.lastModified[i]&&R.setRequestHeader("If-Modified-Since",A.lastModified[i]),A.etag[i]&&R.setRequestHeader("If-None-Match",A.etag[i])),(f.data&&f.hasContent&&!1!==f.contentType||t.contentType)&&R.setRequestHeader("Content-Type",f.contentType);for(o in f.headers)R.setRequestHeader(o,f.headers[o]);if(f.beforeSend&&(!1===f.beforeSend.call(g,R,f)||2===b))return R.abort();T="abort";for(o in{success:1,error:1,complete:1})R[o](f[o]);if(u=d(ae,f,t,R)){R.readyState=1,c&&y.trigger("ajaxSend",[R,f]),f.async&&f.timeout>0&&(s=setTimeout(function(){R.abort("timeout")},f.timeout));try{b=1,u.send(k,n)}catch(e){if(!(b<2))throw e;n(-1,e)}}else n(-1,"No Transport");return R},getJSON:function(e,t,n){return A.get(e,t,n,"json")},getScript:function(e,t){return A.get(e,void 0,t,"script")}}),A.each(["get","post"],function(e,t){A[t]=function(e,n,r,o){return A.isFunction(n)&&(o=o||r,r=n,n=void 0),A.ajax({url:e,type:t,dataType:o,data:n,success:r})}}),A.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){A.fn[t]=function(e){return this.on(t,e)}}),A._evalUrl=function(e){return A.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})};var ce=/%20/g,ue=/\[\]$/,le=/\r?\n/g,de=/^(?:submit|button|image|reset|file)$/i,fe=/^(?:input|select|textarea|keygen)/i;A.param=function(e,t){var n,r=[],o=function(e,t){t=A.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=A.ajaxSettings&&A.ajaxSettings.traditional),A.isArray(e)||e.jquery&&!A.isPlainObject(e))A.each(e,function(){o(this.name,this.value)});else for(n in e)g(n,e[n],t,o);return r.join("&").replace(ce,"+")},A.fn.extend({serialize:function(){return A.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=A.prop(this,"elements");return e?A.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!A(this).is(":disabled")&&fe.test(this.nodeName)&&!de.test(e)&&(this.checked||!rcheckableType.test(e))}).map(function(e,t){var n=A(this).val();return null==n?null:A.isArray(n)?A.map(n,function(e){return{name:t.name,value:e.replace(le,"\r\n")}}):{name:t.name,value:n.replace(le,"\r\n")}}).get()}}),A.ajaxSettings.xhr=void 0!==window.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&y()||v()}:y;var pe=0,he={},ge=A.ajaxSettings.xhr();window.ActiveXObject&&A(window).on("unload",function(){for(var e in he)he[e](void 0,!0)}),B.cors=!!ge&&"withCredentials"in ge,ge=B.ajax=!!ge,ge&&A.ajaxTransport(function(e){if(!e.crossDomain||B.cors){var t;return{send:function(n,r){var o,i=e.xhr(),a=++pe;if(i.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(o in e.xhrFields)i[o]=e.xhrFields[o];e.mimeType&&i.overrideMimeType&&i.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(o in n)void 0!==n[o]&&i.setRequestHeader(o,n[o]+"");i.upload&&e.progress&&(i.upload.onprogress=e.progress),i.send(e.hasContent&&(e.body||e.data)||null),t=function(n,o){var s,c,u;if(t&&(o||4===i.readyState))if(delete he[a],t=void 0,i.onreadystatechange=A.noop,o)4!==i.readyState&&i.abort();else{u={},s=i.status,"string"==typeof i.responseText&&(u.text=i.responseText);try{c=i.statusText}catch(e){c=""}s||!e.isLocal||e.crossDomain?1223===s&&(s=204):s=u.text?200:404}u&&r(s,c,u,i.getAllResponseHeaders())},e.async?4===i.readyState?setTimeout(t):i.onreadystatechange=he[a]=t:t()},abort:function(){t&&t(void 0,!0)}}}}),A.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return A.globalEval(e),e}}}),A.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),A.ajaxTransport("script",function(e){if(e.crossDomain){var t,n=L.head||A("head")[0]||L.documentElement;return{send:function(r,o){t=L.createElement("script"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){(n||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||o(200,"success"))},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(void 0,!0)}}}});var ye=[],ve=/(=)\?(?=&|$)|\?\?/;return A.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=ye.pop()||A.expando+"_"+X++;return this[e]=!0,e}}),A.ajaxPrefilter("json jsonp",function(e,t,n){var r,o,i,a=!1!==e.jsonp&&(ve.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&ve.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=A.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(ve,"$1"+r):!1!==e.jsonp&&(e.url+=(V.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return i||A.error(r+" was not called"),i[0]},e.dataTypes[0]="json",o=window[r],window[r]=function(){i=arguments},n.always(function(){window[r]=o,e[r]&&(e.jsonpCallback=t.jsonpCallback,ye.push(r)),i&&A.isFunction(o)&&o(i[0]),i=o=void 0}),"script"}),A.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||L;var r=rsingleTag.exec(e),o=!n&&[];return r?[t.createElement(r[1])]:(r=A.buildFragment([e],t,o),o&&o.length&&A(o).remove(),A.merge([],r.childNodes))},A}(),i=function(e,t){if(e=o.extend(!0,{headers:{},qs:{}},e),e.type=e.method,delete e.method,e.onProgress&&(e.progress=e.onProgress,delete e.onProgress),e.qs){var n=r.stringify(e.qs);n&&(e.url+=(-1===e.url.indexOf("?")?"?":"&")+n),delete e.qs}if(e.json&&(e.data=e.body,delete e.json,delete e.body,!e.headers&&(e.headers={}),e.headers["Content-Type"]="application/json"),e.body&&e.body.constructor!==window.File&&e.body.constructor!==window.Blob&&(e.data=e.body,delete e.body),e.headers){var i=e.headers;delete e.headers,e.beforeSend=function(e){for(var t in i)i.hasOwnProperty(t)&&"content-length"!==t.toLowerCase()&&"user-agent"!==t.toLowerCase()&&"origin"!==t.toLowerCase()&&"host"!==t.toLowerCase()&&e.setRequestHeader(t,i[t])}}var a=function(e){var t={};return e.getAllResponseHeaders().trim().split("\n").forEach(function(e){if(e){var n=e.indexOf(":"),r=e.substr(0,n).trim().toLowerCase(),o=e.substr(n+1).trim();t[r]=o}}),{statusCode:e.status,statusMessage:e.statusText,headers:t}};return e.success=function(e,n,r){t(null,a(r),e)},e.error=function(e){e.responseText?t(null,a(e),e.responseText):t(e.statusText,a(e),e.responseText)},e.dataType="text",o.ajax(e)};e.exports=i},function(e,t,n){"use strict";t.decode=t.parse=n(13),t.encode=t.stringify=n(14)},function(e,t,n){"use strict";function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,n,i){t=t||"&",n=n||"=";var a={};if("string"!=typeof e||0===e.length)return a;var s=/\+/g;e=e.split(t);var c=1e3;i&&"number"==typeof i.maxKeys&&(c=i.maxKeys);var u=e.length;c>0&&u>c&&(u=c);for(var l=0;l=0?(d=g.substr(0,y),f=g.substr(y+1)):(d=g,f=""),p=decodeURIComponent(d),h=decodeURIComponent(f),r(a,p)?o(a[p])?a[p].push(h):a[p]=[a[p],h]:a[p]=h}return a};var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,n){"use strict";function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r=0;r--)m[r][0]===e&&m[r][1]===t&&m.splice(r,1);m.unshift([e,t]);var i=this.options.UploadIdCacheLimit;m.length>i&&m.splice(i),i&&setTimeout(function(){try{localStorage.setItem(T,JSON.stringify(m))}catch(e){}})}function a(e){o.call(this),delete b[e];for(var t=m.length-1;t>=0;t--)m[t][1]===e&&m.splice(t,1);var n=this.options.UploadIdCacheLimit;m.length>n&&m.splice(n),n&&setTimeout(function(){try{m.length?localStorage.setItem(T,JSON.stringify(m)):localStorage.removeItem(T)}catch(e){}})}function s(e){o.call(this);for(var t=[],n=0;nv)return t(null,!1);if(n>1){if(Math.max(e[0].Size,e[1].Size)!==y)return t(null,!1)}var r=function(o){if(o=u.length)return void w.emit("has_upload_id",t);var s=u[e];return x.isInArray(t,s)?b[s]?void f(e+1):void d.call(p,{Bucket:r,Region:o,Key:i,UploadId:s},function(t,r){p._isRunningTask(n)&&(t?(a.call(p,s),f(e+1)):w.emit("upload_id_ready",{UploadId:s,PartList:r.PartList}))}):(a.call(p,s),void f(e+1))};f(0)}else w.emit("has_upload_id",t)}),w.on("get_remote_upload_id_list",function(t){l.call(p,{Bucket:r,Region:o,Key:i},function(t,r){if(p._isRunningTask(n)){if(t)return w.emit("error",t);var o=r.UploadList.filter(function(e){return e.Key===i&&(!f||e.StorageClass.toUpperCase()===f.toUpperCase())}).reverse().map(function(e){return e.UploadId||e.UploadID});if(o.length)w.emit("seek_local_avail_upload_id",o);else{var u,l=c(e.Body,e.ChunkSize);l&&(u=s.call(p,l))&&x.each(u,function(e){a.call(p,e)}),w.emit("no_available_upload_id")}}})}),w.emit("get_remote_upload_id_list")}function l(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Prefix:e.Key},i=function(){n.multipartList(o,function(e,n){if(e)return t(e);r.push.apply(r,n.Upload||[]),"true"==n.IsTruncated?(o.KeyMarker=n.NextKeyMarker,o.UploadIdMarker=n.NextUploadIdMarker,i()):t(null,{UploadList:r})})};i()}function d(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Key:e.Key,UploadId:e.UploadId},i=function(){n.multipartListPart(o,function(e,n){if(e)return t(e);r.push.apply(r,n.Part||[]),"true"==n.IsTruncated?(o.PartNumberMarker=n.NextPartNumberMarker,i()):t(null,{PartList:r})})};i()}function f(e,t){var n=this,r=e.TaskId,o=e.Bucket,i=e.Region,a=e.Key,s=e.UploadData,c=e.FileSize,u=e.SliceSize,l=Math.min(e.AsyncLimit||n.options.ChunkParallelLimit||1,256),d=e.Body,f=Math.ceil(c/u),h=0,g=e.ServerSideEncryption,y=x.filter(s.PartList,function(e){return e.Uploaded&&(h+=e.PartNumber>=f?c%u||u:u),!e.Uploaded}),v=x.throttleOnProgress.call(n,c,e.onProgress);C.eachLimit(y,l,function(e,t){if(n._isRunningTask(r)){var l=e.PartNumber,f=Math.min(c,e.PartNumber*u)-(e.PartNumber-1)*u,y=0;p.call(n,{TaskId:r,Bucket:o,Region:i,Key:a,SliceSize:u,FileSize:c,PartNumber:l,ServerSideEncryption:g,Body:d,UploadData:s,onProgress:function(e){h+=e.loaded-y,y=e.loaded,v({loaded:h,total:c})}},function(o,i){n._isRunningTask(r)&&(o||i.ETag||(o='get ETag error, please add "ETag" to CORS ExposeHeader setting.'),o?h-=y:(h+=f-y,e.ETag=i.ETag),t(o||null,i))})}},function(e){if(n._isRunningTask(r)){if(v(null,!0),e)return t(e);t(null,{UploadId:s.UploadId,SliceList:s.PartList})}})}function p(e,t){var n=e.TaskId,r=e.Bucket,o=e.Region,i=e.Key,a=e.FileSize,s=e.Body,c=1*e.PartNumber,u=e.SliceSize,l=e.ServerSideEncryption,d=e.UploadData,f=this,p=u*(c-1),h=u,g=p+u;g>a&&(g=a,h=g-p);var y=x.fileSlice(s,p,g),v=d.PartList[c-1],m=v.ETag;C.retry(3,function(t){f._isRunningTask(n)&&f.multipartUpload({TaskId:n,Bucket:r,Region:o,Key:i,ContentLength:h,ContentSha1:m,PartNumber:c,UploadId:d.UploadId,ServerSideEncryption:l,Body:y,onProgress:e.onProgress},function(e,r){if(f._isRunningTask(n))return e?t(e):(v.Uploaded=!0,t(null,r))})},function(e,r){if(f._isRunningTask(n))return t(e,r)})}function h(e,t){var n=e.Bucket,r=e.Region,o=e.Key,i=e.UploadId,a=e.SliceList,s=this,c=a.map(function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}});s.multipartComplete({Bucket:n,Region:r,Key:o,UploadId:i,Parts:c},function(e,n){if(e)return t(e);t(null,n)})}function g(e,t){var n=e.Bucket,r=e.Region,o=e.Key,i=e.UploadId,a=e.Level||"task",s=e.AsyncLimit,c=this,u=new k;if(u.on("error",function(e){return t(e)}),u.on("get_abort_array",function(i){y.call(c,{Bucket:n,Region:r,Key:o,Headers:e.Headers,AsyncLimit:s,AbortArray:i},function(e,n){if(e)return t(e);t(null,n)})}),"bucket"===a)l.call(c,{Bucket:n,Region:r},function(e,n){if(e)return t(e);u.emit("get_abort_array",n.UploadList||[])});else if("file"===a){if(!o)return t({error:"abort_upload_task_no_key"});l.call(c,{Bucket:n,Region:r,Key:o},function(e,n){if(e)return t(e);u.emit("get_abort_array",n.UploadList||[])})}else{if("task"!==a)return t({error:"abort_unknown_level"});if(!i)return t({error:"abort_upload_task_no_id"});if(!o)return t({error:"abort_upload_task_no_key"});u.emit("get_abort_array",[{Key:o,UploadId:i}])}}function y(e,t){var n=e.Bucket,r=e.Region,o=e.Key,i=e.AbortArray,a=e.AsyncLimit||1,s=this,c=0,u=new Array(i.length);C.eachLimit(i,a,function(t,i){var a=c;if(o&&o!=t.Key)return i(null,{KeyNotMatch:!0});var l=t.UploadId||t.UploadID;s.multipartAbort({Bucket:n,Region:r,Key:t.Key,Headers:e.Headers,UploadId:l},function(e,o){var s={Bucket:n,Region:r,Key:t.Key,UploadId:l};u[a]={error:e,task:s},i(null)}),c++},function(e){if(e)return t(e);for(var n=[],r=[],o=0,i=u.length;o=r?"sliceUploadFile":"putObject",params:e,callback:v})}),n._addTasks(d)}var m,C=n(16),k=n(2).EventProxy,x=n(0),b={},T="cos_sdk_upload_cache",R={sliceUploadFile:r,abortUploadTask:g,uploadFiles:v};x.each(R,function(e,n){t[n]=x.apiWrapper(n,e)})},function(e,t){var n=function(e,t,n,r){if(r=r||function(){},!e.length||t<=0)return r();var o=0,i=0,a=0;!function s(){if(o>=e.length)return r();for(;a=e.length?r():s())})}()},r=function(e,t,n){var r=function(o){t(function(t,i){t&&o-1||"deleteMultipleObject"===e||"multipartList"===e||"listObjectVersions"===e){if(!n)return"Bucket";if(!r)return"Region"}else if(e.indexOf("Object")>-1||e.indexOf("multipart")>-1||"sliceUploadFile"===e||"abortUploadTask"===e){if(!n)return"Bucket";if(!r)return"Region";if(!o)return"Key"}return!1},b=function(e,t){return function(n,r){if("function"==typeof n&&(r=n,n={}),n=i({},n),"getAuth"!==e&&"getObjectUrl"!==e){var o=n.Headers||{};n&&"object"==typeof n&&(!function(){for(var e in n)n.hasOwnProperty(e)&&e.indexOf("x-cos-")>-1&&(o[e]=n[e])}(),o["x-cos-mfa"]=n.MFA,o["Content-MD5"]=n.ContentMD5,o["Content-Length"]=n.ContentLength,o["Content-Type"]=n.ContentType,o.Expect=n.Expect,o.Expires=n.Expires,o["Cache-Control"]=n.CacheControl,o["Content-Disposition"]=n.ContentDisposition,o["Content-Encoding"]=n.ContentEncoding,o.Range=n.Range,o["If-Modified-Since"]=n.IfModifiedSince,o["If-Unmodified-Since"]=n.IfUnmodifiedSince,o["If-Match"]=n.IfMatch,o["If-None-Match"]=n.IfNoneMatch,o["x-cos-copy-source"]=n.CopySource,o["x-cos-copy-source-Range"]=n.CopySourceRange,o["x-cos-metadata-directive"]=n.MetadataDirective,o["x-cos-copy-source-If-Modified-Since"]=n.CopySourceIfModifiedSince,o["x-cos-copy-source-If-Unmodified-Since"]=n.CopySourceIfUnmodifiedSince,o["x-cos-copy-source-If-Match"]=n.CopySourceIfMatch,o["x-cos-copy-source-If-None-Match"]=n.CopySourceIfNoneMatch,o["x-cos-server-side-encryption"]=n.ServerSideEncryption,o["x-cos-acl"]=n.ACL,o["x-cos-grant-read"]=n.GrantRead,o["x-cos-grant-write"]=n.GrantWrite,o["x-cos-grant-full-control"]=n.GrantFullControl,o["x-cos-grant-read-acp"]=n.GrantReadAcp,o["x-cos-grant-write-acp"]=n.GrantWriteAcp,o["x-cos-storage-class"]=n.StorageClass,n.Headers=y(o))}var a=function(e){return e&&e.headers&&(e.headers["x-cos-version-id"]&&(e.VersionId=e.headers["x-cos-version-id"]),e.headers["x-cos-delete-marker"]&&(e.DeleteMarker=e.headers["x-cos-delete-marker"])),e},s=function(e,t){r&&r(a(e),a(t))};if("getService"!==e&&"abortUploadTask"!==e){var u;if(u=x(e,n))return void s({error:"missing param "+u});if(n.Region&&-1===n.Region.indexOf("-")&&"yfb"!==n.Region)return void s({error:"param Region format error, find help here: https://cloud.tencent.com/document/product/436/6224"});if(n.Region&&n.Region.indexOf("cos.")>-1)return void s({error:'param Region should not be start with "cos."'});if(n.Bucket){if(!/^(.+)-(\d+)$/.test(n.Bucket))if(n.AppId)n.Bucket=n.Bucket+"-"+n.AppId;else{if(!this.options.AppId)return void s({error:'Bucket should format as "test-1250000000".'});n.Bucket=n.Bucket+"-"+this.options.AppId}n.AppId&&(console.warn('warning: AppId has been deprecated, Please put it at the end of parameter Bucket(E.g Bucket:"test-1250000000" ).'),delete n.AppId)}n.Key&&"/"===n.Key.substr(0,1)&&(n.Key=n.Key.substr(1))}var c=t.call(this,n,s);if("getAuth"===e||"getObjectUrl"===e)return c}},T=function(e,t){function n(){if(o=0,t&&"function"==typeof t){r=Date.now();var n,i=Math.max(0,Math.round((s-a)/((r-u)/1e3)*100)/100);n=0===s&&0===e?1:Math.round(s/e*100)/100||0,u=r,a=s;try{t({loaded:s,total:e,speed:i,percent:n})}catch(e){}}}var r,o,i=this,a=0,s=0,u=Date.now();return function(t,r){if(t&&(s=t.loaded,e=t.total),r)clearTimeout(o),n();else{if(o)return;o=setTimeout(n,i.options.ProgressInterval)}}},R={apiWrapper:b,getAuth:g,xml2json:p,json2xml:h,md5:d,clearKey:y,getFileMd5:v,binaryBase64:C,extend:i,isArray:a,isInArray:s,each:u,map:c,filter:l,clone:o,uuid:k,throttleOnProgress:T,isBrowser:!!t.document};R.fileSlice=function(e,t,n){return e.slice?e.slice(t,n):e.mozSlice?e.mozSlice(t,n):e.webkitSlice?e.webkitSlice(t,n):void 0},R.localStorage=t.localStorage,R.getFileUUID=function(e,t){return e.name&&e.size&&e.lastModifiedDate&&t?R.md5([e.name,e.size,e.lastModifiedDate,t].join("::")):null},e.exports=R}).call(t,n(1))},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){var n=function(e){var t={},n=function(e){return!t[e]&&(t[e]=[]),t[e]};e.on=function(e,t){"task-list-update"===e&&console.warn('warning: Event "'+e+'" has been deprecated. Please use "list-update" instead.'),n(e).push(t)},e.off=function(e,t){for(var r=n(e),o=r.length-1;o>=0;o--)t===r[o]&&r.splice(o,1)},e.emit=function(e,t){for(var r=n(e).map(function(e){return e}),o=0;o>>32-o,n)}function o(e,t,n,o,i,a,s){return r(t&n|~t&o,e,t,i,a,s)}function i(e,t,n,o,i,a,s){return r(t&o|n&~o,e,t,i,a,s)}function a(e,t,n,o,i,a,s){return r(t^n^o,e,t,i,a,s)}function s(e,t,n,o,i,a,s){return r(n^(t|~o),e,t,i,a,s)}function u(e){txt="";var t,r=e.length,o=[1732584193,-271733879,-1732584194,271733878];for(t=64;t<=e.length;t+=64)n(o,c(e.substring(t-64,t)));e=e.substring(t-64);var i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(t=0;t>2]|=e.charCodeAt(t)<<(t%4<<3);if(i[t>>2]|=128<<(t%4<<3),t>55)for(n(o,i),t=0;t<16;t++)i[t]=0;return i[14]=8*r,n(o,i),o}function c(e){var t,n=[];for(t=0;t<64;t+=4)n[t>>2]=e.charCodeAt(t)+(e.charCodeAt(t+1)<<8)+(e.charCodeAt(t+2)<<16)+(e.charCodeAt(t+3)<<24);return n}function l(e){for(var t="",n=0;n<4;n++)t+=p[e>>8*n+4&15]+p[e>>8*n&15];return t}function d(e){for(var t=0;t>16)+(t>>16)+(n>>16)<<16|65535&n}),e.exports=f},function(e,t,n){var r=r||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},a=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=void 0!=t?t:4*e.length},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;o>>2]|=(n[o>>>2]>>>24-o%4*8&255)<<24-(r+o)%4*8;else if(65535>>2]=n[o>>>2];else t.push.apply(t,n);return this.sigBytes+=e,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},c=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},d=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,o=n.sigBytes,i=this.blockSize,s=o/(4*i),s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0);if(t=s*i,o=e.min(4*t,o),t){for(var u=0;uc;c++){if(16>c)i[c]=0|e[t+c];else{var l=i[c-3]^i[c-8]^i[c-14]^i[c-16];i[c]=l<<1|l>>>31}l=(r<<5|r>>>27)+u+i[c],l=20>c?l+(1518500249+(o&a|~o&s)):40>c?l+(1859775393+(o^a^s)):60>c?l+((o&a|o&s|a&s)-1894007588):l+((o^a^s)-899497514),u=s,s=a,a=o<<30|o>>>2,o=r,r=l}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+a|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=Math.floor(n/4294967296),t[15+(r+64>>>9<<4)]=n,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});e.SHA1=o._createHelper(t),e.HmacSHA1=o._createHmacHelper(t)}(),function(){var e=r,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,o=4*r;n.sigBytes>o&&(n=e.finalize(n)),n.clamp();for(var i=this._oKey=n.clone(),a=this._iKey=n.clone(),s=i.words,u=a.words,c=0;c>>2]>>>24-i%4*8&255,s=t[i+1>>>2]>>>24-(i+1)%4*8&255,u=t[i+2>>>2]>>>24-(i+2)%4*8&255,c=a<<16|s<<8|u,l=0;l<4&&i+.75*l>>6*(3-l)&63));var d=r.charAt(64);if(d)for(;o.length%4;)o.push(d);return o.join("")},parse:function(e){var t=e.length,r=this._map,o=r.charAt(64);if(o){var i=e.indexOf(o);-1!=i&&(t=i)}for(var a=[],s=0,u=0;u>>6-u%4*2;a[s>>>2]|=(c|l)<<24-s%4*8,s++}return n.create(a,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),e.exports=r},function(e,t){var n=function(){this.version="1.3.5";var e={mergeCDATA:!0,normalize:!0,stripElemPrefix:!0},t=new RegExp(/(?!xmlns)^.*:/),r=new RegExp(/^\s+|\s+$/g);return this.grokType=function(e){return/^\s*$/.test(e)?null:/^(?:true|false)$/i.test(e)?"true"===e.toLowerCase():isFinite(e)?parseFloat(e):e},this.parseString=function(e,t){if(e){var n=this.stringToXML(e);return n.getElementsByTagName("parsererror").length?null:this.parseXML(n,t)}return null},this.parseXML=function(o,i){for(var a in i)e[a]=i[a];var s={},u=0,c="";if(o.childNodes.length)for(var l,d,f,p=0;p/g,">").replace(/'/g,"'").replace(/"/g,""").replace(o,"")}var r=new RegExp("^([^a-zA-Z_À-ÖØ-öø-ÿͰ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿿、-퟿豈-﷏ﷰ-�])|^((x|X)(m|M)(l|L))|([^a-zA-Z_À-ÖØ-öø-ÿͰ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿿、-퟿豈-﷏ﷰ-�-.0-9·̀-ͯ‿⁀])","g"),o=/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm,i=function(e){var t=[];if(e instanceof Object)for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},a=function(e,t){var o=function(e,n,o,i,a){var s=void 0!==t.indent?t.indent:"\t",u=t.prettyPrint?"\n"+new Array(i).join(s):"";t.removeIllegalNameCharacters&&(e=e.replace(r,"_"));var c=[u,"<",e,o||""];return n&&n.length>0?(c.push(">"),c.push(n),a&&c.push(u),c.push("")):c.push("/>"),c.join("")};return function e(r,a,s){var u=typeof r;switch((Array.isArray?Array.isArray(r):r instanceof Array)?u="array":r instanceof Date&&(u="date"),u){case"array":var c=[];return r.map(function(t){c.push(e(t,1,s+1))}),t.prettyPrint&&c.push("\n"),c.join("");case"date":return r.toJSON?r.toJSON():r+"";case"object":var l=[];for(var d in r)if(r[d]instanceof Array)for(var f=0;f0&&l.push("\n"),l.join("");case"function":return r();default:return t.escape?n(r):""+r}}(e,0,0)},s=function(e){var t=['"),t.join("")};e.exports=function(e,t){if(t||(t={xmlHeader:{standalone:!0},prettyPrint:!0,indent:" "}),"string"==typeof e)try{e=JSON.parse(e.toString())}catch(e){return!1}var n="",r="";return t&&("object"==typeof t?(t.xmlHeader&&(n=s(!!t.xmlHeader.standalone)),void 0!==t.docType&&(r="")):n=s()),t=t||{},[n,t.prettyPrint&&r?"\n":"",r,a(e,t)].join("").replace(/\n{2,}/g,"\n").replace(/\s+$/g,"")}},function(e,t,n){(function(t){var r=n(0),o=function(e){var n=[],o={},i=0,a=0,s={};r.each(["putObject","sliceUploadFile"],function(t){s[t]=e[t],e[t]=function(n,r){e._addTask(t,n,r)}});var u=function(e){var t={id:e.id,Bucket:e.Bucket,Region:e.Region,Key:e.Key,FilePath:e.FilePath,state:e.state,loaded:e.loaded,size:e.size,speed:e.speed,percent:e.percent,hashPercent:e.hashPercent,error:e.error};return e.FilePath&&(t.FilePath=e.FilePath),t},c=function(){e.emit("task-list-update",{list:r.map(n,u)}),e.emit("list-update",{list:r.map(n,u)})},l=function(){if(a-1?"{{Bucket}}-{{AppId}}.{{Region}}.myqcloud.com":"{{Bucket}}-{{AppId}}.cos.{{Region}}.myqcloud.com"),o=o.replace(/\{\{AppId\}\}/gi,r).replace(/\{\{Bucket\}\}/gi,n).replace(/\{\{Region\}\}/gi,i).replace(/\{\{.*?\}\}/gi,""),/^[a-zA-Z]+:\/\//.test(o)||(o=s+"//"+o),"/"===o.slice(-1)&&(o=o.slice(0,-1));var u=o;return a&&(u+="/"+encodeURIComponent(a).replace(/%2F/g,"/")),e.isLocation&&(u=u.replace(/^https?:\/\//,"")),u}function V(e,t){var n=this,r=e.Bucket||"",o=e.Region||"";n._StsMap=n._StsMap||{};var i=n._StsMap[r+"."+o]||{},a=function(){var n=Y.getAuth({SecretId:i.TmpSecretId,SecretKey:i.TmpSecretKey,Method:e.Method,Key:e.Key||"",Query:e.Query,Headers:e.Headers}),r={Authorization:n,XCosSecurityToken:i.XCosSecurityToken||"",Token:i.Token||"",ClientIP:i.ClientIP||"",ClientUA:i.ClientUA||""};t&&t(r)};if(i.ExpiredTime&&i.ExpiredTime-(Date.now()/1e3>60))a();else if(n.options.getAuthorization)n.options.getAuthorization.call(n,{Bucket:r,Region:o,Method:e.Method,Key:e.Key||"",Query:e.Query,Headers:e.Headers},function(e){"string"==typeof e&&(e={Authorization:e}),e.TmpSecretId&&e.TmpSecretKey&&e.XCosSecurityToken&&e.ExpiredTime?(i=n._StsMap[r+"."+o]=e,a()):t&&t(e)});else{if(!n.options.getSTS){var s=Y.getAuth({SecretId:e.SecretId||n.options.SecretId,SecretKey:e.SecretKey||n.options.SecretKey,Method:e.Method,Key:e.Key||"",Query:e.Query,Headers:e.Headers,Expires:e.Expires});return t&&t({Authorization:s}),s}n.options.getSTS.call(n,{Bucket:r,Region:o},function(e){i=n._StsMap[r+"."+o]=e||{},i.TmpSecretId=i.SecretId,i.TmpSecretKey=i.SecretKey,a()})}return""}function $(e,t){var n=this;!e.headers&&(e.headers={}),!e.qs&&(e.qs={}),e.VersionId&&(e.qs.versionId=e.VersionId),e.qs=Y.clearKey(e.qs),e.headers&&(e.headers=Y.clearKey(e.headers)),e.qs&&(e.qs=Y.clearKey(e.qs));var r=Y.clone(e.qs);e.action&&(r[e.action]=""),V.call(n,{Bucket:e.Bucket||"",Region:e.Region||"",Method:e.method,Key:e.Key,Query:r,Headers:e.headers},function(r){var o=r.Authorization,i=!1;if(o)if(o.indexOf(" ")>-1)i=!1;else if(o.indexOf("q-sign-algorithm=")>-1&&o.indexOf("q-ak=")>-1&&o.indexOf("q-sign-time=")>-1&&o.indexOf("q-key-time=")>-1&&o.indexOf("q-url-param-list=")>-1)i=!0;else try{o=atob(o),o.indexOf("a=")>-1&&o.indexOf("k=")>-1&&o.indexOf("t=")>-1&&o.indexOf("r=")>-1&&o.indexOf("b=")>-1&&(i=!0)}catch(e){}if(!i)return void t("authorization error");e.AuthData=r,J.call(n,e,t)})}function J(e,t){var n=this,r=e.TaskId;if(!r||n._isRunningTask(r)){var o=e.Bucket,i=e.Region,a=e.Key,s=e.method||"GET",u=e.url,c=e.body,l=e.json,d=e.rawBody;u=u||X({protocol:n.options.Protocol,domain:n.options.Domain,bucket:o,region:i,object:a}),e.action&&(u=u+(a?"":"/")+"?"+e.action);var f={method:s,url:u,headers:e.headers,qs:e.qs,body:c,json:l};if(f.headers.Authorization=e.AuthData.Authorization,e.AuthData.Token&&(f.headers.token=e.AuthData.Token),e.AuthData.ClientIP&&(f.headers.clientIP=e.AuthData.ClientIP),e.AuthData.ClientUA&&(f.headers.clientUA=e.AuthData.ClientUA),e.AuthData.XCosSecurityToken&&(f.headers["x-cos-security-token"]=e.AuthData.XCosSecurityToken),f.headers&&(f.headers=Y.clearKey(f.headers)),f=Y.clearKey(f),e.onProgress&&"function"==typeof e.onProgress){var p=c&&(c.size||c.length)||0;f.onProgress=function(t){if(!r||n._isRunningTask(r)){var o=t?t.loaded:0;e.onProgress({loaded:o,total:p})}}}var h=Q(f,function(e,o,i){var a,s=function(e,i){if(r&&n.off("inner-kill-task",g),!a){a=!0;var s={};o&&o.statusCode&&(s.statusCode=o.statusCode),o&&o.headers&&(s.headers=o.headers),e?(e=Y.extend(e||{},s),t(e,null)):(i=Y.extend(i||{},s),t(null,i))}};if(e)return void s({error:e});var u;try{u=Y.xml2json(i)||{}}catch(e){u=i||{}}var c=o.statusCode;return 2!==Math.floor(c/100)?void s({error:u.Error||u}):(d&&(u={},u.body=i),u.Error?void s({error:u.Error}):void s(null,u))}),g=function(e){e.TaskId===r&&(h&&h.abort&&h.abort(),n.off("inner-kill-task",g))};r&&n.on("inner-kill-task",g)}}var Q=n(11),Y=n(0),Z={getBucket:o,headBucket:r,deleteBucket:i,getBucketAcl:a,putBucketAcl:s,getBucketCors:u,putBucketCors:c,deleteBucketCors:l,getBucketLocation:f,putBucketTagging:g,getBucketTagging:h,deleteBucketTagging:y,getBucketPolicy:p,putBucketPolicy:d,getBucketLifecycle:v,putBucketLifecycle:m,deleteBucketLifecycle:C,putBucketVersioning:k,getBucketVersioning:x,putBucketReplication:b,getBucketReplication:T,deleteBucketReplication:R,getObject:w,headObject:S,listObjectVersions:B,putObject:A,deleteObject:_,getObjectAcl:P,putObjectAcl:E,optionsObject:j,putObjectCopy:I,deleteMultipleObject:O,restoreObject:D,uploadPartCopy:L,multipartInit:M,multipartUpload:U,multipartComplete:H,multipartList:K,multipartListPart:F,multipartAbort:N,getObjectUrl:z,getAuth:q};Y.each(Z,function(e,n){t[n]=Y.apiWrapper(n,e)})}).call(t,n(1))},function(e,t,n){var r=n(12),o=function(){function e(e){var t=e.length,n=A.type(e);return"function"!==n&&!A.isWindow(e)&&(!(1!==e.nodeType||!t)||("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e))}function t(e){var t=M[e]={};return A.each(e.match(D)||[],function(e,n){t[n]=!0}),t}function n(){L.addEventListener?(L.removeEventListener("DOMContentLoaded",r,!1),window.removeEventListener("load",r,!1)):(L.detachEvent("onreadystatechange",r),window.detachEvent("onload",r))}function r(){(L.addEventListener||"load"===event.type||"complete"===L.readyState)&&(n(),A.ready())}function o(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace(F,"-$1").toLowerCase();if("string"==typeof(n=e.getAttribute(r))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:K.test(n)?A.parseJSON(n):n)}catch(e){}A.data(e,t,n)}else n=void 0}return n}function i(e){var t;for(t in e)if(("data"!==t||!A.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function a(e,t,n,r){if(A.acceptData(e)){var o,i,a=A.expando,s=e.nodeType,u=s?A.cache:e,c=s?e[a]:e[a]&&a;if(c&&u[c]&&(r||u[c].data)||void 0!==n||"string"!=typeof t)return c||(c=s?e[a]=v.pop()||A.guid++:a),u[c]||(u[c]=s?{}:{toJSON:A.noop}),"object"!=typeof t&&"function"!=typeof t||(r?u[c]=A.extend(u[c],t):u[c].data=A.extend(u[c].data,t)),i=u[c],r||(i.data||(i.data={}),i=i.data),void 0!==n&&(i[A.camelCase(t)]=n),"string"==typeof t?null==(o=i[t])&&(o=i[A.camelCase(t)]):o=i,o}}function s(e,t,n){if(A.acceptData(e)){var r,o,a=e.nodeType,s=a?A.cache:e,u=a?e[A.expando]:A.expando;if(s[u]){if(t&&(r=n?s[u]:s[u].data)){A.isArray(t)?t=t.concat(A.map(t,A.camelCase)):t in r?t=[t]:(t=A.camelCase(t),t=t in r?[t]:t.split(" ")),o=t.length;for(;o--;)delete r[t[o]];if(n?!i(r):!A.isEmptyObject(r))return}(n||(delete s[u].data,i(s[u])))&&(a?A.cleanData([e],!0):B.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}function u(){return!0}function c(){return!1}function l(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,o=0,i=t.toLowerCase().match(D)||[];if(A.isFunction(n))for(;r=i[o++];)"+"===r.charAt(0)?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function d(e,t,n,r){function o(s){var u;return i[s]=!0,A.each(e[s]||[],function(e,s){var c=s(t,n,r);return"string"!=typeof c||a||i[c]?a?!(u=c):void 0:(t.dataTypes.unshift(c),o(c),!1)}),u}var i={},a=e===ae;return o(t.dataTypes[0])||!i["*"]&&o("*")}function f(e,t){var n,r,o=A.ajaxSettings.flatOptions||{};for(r in t)void 0!==t[r]&&((o[r]?e:n||(n={}))[r]=t[r]);return n&&A.extend(!0,e,n),e}function p(e,t,n){for(var r,o,i,a,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===o&&(o=e.mimeType||t.getResponseHeader("Content-Type"));if(o)for(a in s)if(s[a]&&s[a].test(o)){u.unshift(a);break}if(u[0]in n)i=u[0];else{for(a in n){if(!u[0]||e.converters[a+" "+u[0]]){i=a;break}r||(r=a)}i=i||r}if(i)return i!==u[0]&&u.unshift(i),n[i]}function h(e,t,n,r){var o,i,a,s,u,c={},l=e.dataTypes.slice();if(l[1])for(a in e.converters)c[a.toLowerCase()]=e.converters[a];for(i=l.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=i,i=l.shift())if("*"===i)i=u;else if("*"!==u&&u!==i){if(!(a=c[u+" "+i]||c["* "+i]))for(o in c)if(s=o.split(" "),s[1]===i&&(a=c[u+" "+s[0]]||c["* "+s[0]])){!0===a?a=c[o]:!0!==c[o]&&(i=s[0],l.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+i}}}return{state:"success",data:t}}function g(e,t,n,r){var o;if(A.isArray(t))A.each(t,function(t,o){n||ce.test(e)?r(e,o):g(e+"["+("object"==typeof o?t:"")+"]",o,n,r)});else if(n||"object"!==A.type(t))r(e,t);else for(o in t)g(e+"["+o+"]",t[o],n,r)}function y(){try{return new window.XMLHttpRequest}catch(e){}}function m(){try{return new window.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}var v=[],C=v.slice,k=v.concat,x=v.push,b=v.indexOf,T={},R=T.toString,S=T.hasOwnProperty,B={},w="1.11.1 -css,-css/addGetHookIf,-css/curCSS,-css/defaultDisplay,-css/hiddenVisibleSelectors,-css/support,-css/swap,-css/var/cssExpand,-css/var/isHidden,-css/var/rmargin,-css/var/rnumnonpx,-effects,-effects/Tween,-effects/animatedSelector,-effects/support,-dimensions,-offset,-deprecated,-event-alias,-wrap",A=function(e,t){return new A.fn.init(e,t)},_=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,P=/^-ms-/,E=/-([\da-z])/gi,j=function(e,t){return t.toUpperCase()};A.fn=A.prototype={jquery:w,constructor:A,selector:"",length:0,toArray:function(){return C.call(this)},get:function(e){return null!=e?e<0?this[e+this.length]:this[e]:C.call(this)},pushStack:function(e){var t=A.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return A.each(this,e,t)},map:function(e){return this.pushStack(A.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(C.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||"object"!==A.type(e)||e.nodeType||A.isWindow(e))return!1;try{if(e.constructor&&!S.call(e,"constructor")&&!S.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}if(B.ownLast)for(t in e)return S.call(e,t);for(t in e);return void 0===t||S.call(e,t)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?T[R.call(e)]||"object":typeof e},globalEval:function(e){e&&A.trim(e)&&(window.execScript||function(e){window.eval.call(window,e)})(e)},camelCase:function(e){return e.replace(P,"ms-").replace(E,j)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(t,n,r){var o=0,i=t.length,a=e(t);if(r){if(a)for(;o)[^>]*|#([\w-]*))$/;(A.fn.init=function(e,t){var n,r;if(!e)return this;if("string"==typeof e){if(!(n="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:O.exec(e))||!n[1]&&t)return!t||t.jquery?(t||I).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof A?t[0]:t,A.merge(this,A.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:L,!0)),rsingleTag.test(n[1])&&A.isPlainObject(t))for(n in t)A.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}if((r=L.getElementById(n[2]))&&r.parentNode){if(r.id!==n[2])return I.find(e);this.length=1,this[0]=r}return this.context=L,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):A.isFunction(e)?void 0!==I.ready?I.ready(e):e(A):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),A.makeArray(e,this))}).prototype=A.fn,I=A(L);var D=/\S+/g,M={};A.Callbacks=function(e){e="string"==typeof e?M[e]||t(e):A.extend({},e);var n,r,o,i,a,s,u=[],c=!e.once&&[],l=function(t){for(r=e.memory&&t,o=!0,a=s||0,s=0,i=u.length,n=!0;u&&a-1;)u.splice(r,1),n&&(r<=i&&i--,r<=a&&a--)}),this},has:function(e){return e?A.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],i=0,this},disable:function(){return u=c=r=void 0,this},disabled:function(){return!u},lock:function(){return c=void 0,r||d.disable(),this},locked:function(){return!c},fireWith:function(e,t){return!u||o&&!c||(t=t||[],t=[e,t.slice?t.slice():t],n?c.push(t):l(t)),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!o}};return d},A.extend({Deferred:function(e){var t=[["resolve","done",A.Callbacks("once memory"),"resolved"],["reject","fail",A.Callbacks("once memory"),"rejected"],["notify","progress",A.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var e=arguments;return A.Deferred(function(n){A.each(t,function(t,i){var a=A.isFunction(e[t])&&e[t];o[i[1]](function(){var e=a&&a.apply(this,arguments);e&&A.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[i[0]+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?A.extend(e,r):r}},o={};return r.pipe=r.then,A.each(t,function(e,i){var a=i[2],s=i[3];r[i[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),o[i[0]]=function(){return o[i[0]+"With"](this===o?r:this,arguments),this},o[i[0]+"With"]=a.fireWith}),r.promise(o),e&&e.call(o,o),o},when:function(e){var t,n,r,o=0,i=C.call(arguments),a=i.length,s=1!==a||e&&A.isFunction(e.promise)?a:0,u=1===s?e:A.Deferred(),c=function(e,n,r){return function(o){n[e]=this,r[e]=arguments.length>1?C.call(arguments):o,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=new Array(a),n=new Array(a),r=new Array(a);o0||(U.resolveWith(L,[A]),A.fn.triggerHandler&&(A(L).triggerHandler("ready"),A(L).off("ready")))}}}),A.ready.promise=function(e){if(!U)if(U=A.Deferred(),"complete"===L.readyState)setTimeout(A.ready);else if(L.addEventListener)L.addEventListener("DOMContentLoaded",r,!1),window.addEventListener("load",r,!1);else{L.attachEvent("onreadystatechange",r),window.attachEvent("onload",r);var t=!1;try{t=null==window.frameElement&&L.documentElement}catch(e){}t&&t.doScroll&&function e(){if(!A.isReady){try{t.doScroll("left")}catch(t){return setTimeout(e,50)}n(),A.ready()}}()}return U.promise(e)};var H;for(H in A(B))break;B.ownLast="0"!==H,B.inlineBlockNeedsLayout=!1,A(function(){var e,t,n,r;(n=L.getElementsByTagName("body")[0])&&n.style&&(t=L.createElement("div"),r=L.createElement("div"),r.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(r).appendChild(t),void 0!==t.style.zoom&&(t.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",B.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(r))}),function(){var e=L.createElement("div");if(null==B.deleteExpando){B.deleteExpando=!0;try{delete e.test}catch(e){B.deleteExpando=!1}}e=null}(),A.acceptData=function(e){var t=A.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||!0!==t&&e.getAttribute("classid")===t)};var K=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,F=/([A-Z])/g;A.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return!!(e=e.nodeType?A.cache[e[A.expando]]:e[A.expando])&&!i(e)},data:function(e,t,n){return a(e,t,n)},removeData:function(e,t){return s(e,t)},_data:function(e,t,n){return a(e,t,n,!0)},_removeData:function(e,t){return s(e,t,!0)}}),A.fn.extend({data:function(e,t){var n,r,i,a=this[0],s=a&&a.attributes;if(void 0===e){if(this.length&&(i=A.data(a),1===a.nodeType&&!A._data(a,"parsedAttrs"))){for(n=s.length;n--;)s[n]&&(r=s[n].name,0===r.indexOf("data-")&&(r=A.camelCase(r.slice(5)),o(a,r,i[r])));A._data(a,"parsedAttrs",!0)}return i}return"object"==typeof e?this.each(function(){A.data(this,e)}):arguments.length>1?this.each(function(){A.data(this,e,t)}):a?o(a,e,A.data(a,e)):void 0},removeData:function(e){return this.each(function(){A.removeData(this,e)})}}),A.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=A._data(e,t),n&&(!r||A.isArray(n)?r=A._data(e,t,A.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=A.queue(e,t),r=n.length,o=n.shift(),i=A._queueHooks(e,t),a=function(){A.dequeue(e,t)};"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===t&&n.unshift("inprogress"),delete i.stop,o.call(e,a,i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return A._data(e,n)||A._data(e,n,{empty:A.Callbacks("once memory").add(function(){A._removeData(e,t+"queue"),A._removeData(e,n)})})}}),A.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length=0&&(p=f.split("."),f=p.shift(),p.sort()),i=f.indexOf(":")<0&&"on"+f,e=e[A.expando]?e:new A.Event(f,"object"==typeof e&&e),e.isTrigger=r?2:3,e.namespace=p.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:A.makeArray(t,[e]),u=A.event.special[f]||{},r||!u.trigger||!1!==u.trigger.apply(n,t))){if(!r&&!u.noBubble&&!A.isWindow(n)){for(s=u.delegateType||f,G.test(s+f)||(a=a.parentNode);a;a=a.parentNode)d.push(a),c=a;c===(n.ownerDocument||L)&&d.push(c.defaultView||c.parentWindow||window)}for(l=0;(a=d[l++])&&!e.isPropagationStopped();)e.type=l>1?s:u.bindType||f,o=(A._data(a,"events")||{})[e.type]&&A._data(a,"handle"),o&&o.apply(a,t),(o=i&&a[i])&&o.apply&&A.acceptData(a)&&(e.result=o.apply(a,t),!1===e.result&&e.preventDefault());if(e.type=f,!r&&!e.isDefaultPrevented()&&(!u._default||!1===u._default.apply(d.pop(),t))&&A.acceptData(n)&&i&&n[f]&&!A.isWindow(n)){c=n[i],c&&(n[i]=null),A.event.triggered=f;try{n[f]()}catch(e){}A.event.triggered=void 0,c&&(n[i]=c)}return e.result}},dispatch:function(e){e=A.event.fix(e);var t,n,r,o,i,a=[],s=C.call(arguments),u=(A._data(this,"events")||{})[e.type]||[],c=A.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,e)){for(a=A.event.handlers.call(this,e,u),t=0;(o=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,i=0;(r=o.handlers[i++])&&!e.isImmediatePropagationStopped();)e.namespace_re&&!e.namespace_re.test(r.namespace)||(e.handleObj=r,e.data=r.data,void 0!==(n=((A.event.special[r.origType]||{}).handle||r.handler).apply(o.elem,s))&&!1===(e.result=n)&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,o,i,a=[],s=t.delegateCount,u=e.target;if(s&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(!0!==u.disabled||"click"!==e.type)){for(o=[],i=0;i=0:A.find(n,this,null,[u]).length),o[n]&&o.push(r);o.length&&a.push({elem:u,handlers:o})}return s0?4:0,o=e>=200&&e<300||304===e,n&&(k=p(f,R,n)),k=h(f,k,R,o),o?(f.ifModified&&(x=R.getResponseHeader("Last-Modified"),x&&(A.lastModified[i]=x),(x=R.getResponseHeader("etag"))&&(A.etag[i]=x)),204===e||"HEAD"===f.type?T="nocontent":304===e?T="notmodified":(T=k.state,l=k.data,d=k.error,o=!d)):(d=T,!e&&T||(T="error",e<0&&(e=0))),R.status=e,R.statusText=(t||T)+"",o?m.resolveWith(g,[l,T,R]):m.rejectWith(g,[R,T,d]),R.statusCode(C),C=void 0,u&&y.trigger(o?"ajaxSuccess":"ajaxError",[R,f,o?l:d]),v.fireWith(g,[R,T]),u&&(y.trigger("ajaxComplete",[R,f]),--A.active||A.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var r,o,i,a,s,u,c,l,f=A.ajaxSetup({},t),g=f.context||f,y=f.context&&(g.nodeType||g.jquery)?A(g):A.event,m=A.Deferred(),v=A.Callbacks("once memory"),C=f.statusCode||{},k={},x={},b=0,T="canceled",R={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!l)for(l={};t=ee.exec(a);)l[t[1].toLowerCase()]=t[2];t=l[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=x[n]=x[n]||e,k[e]=t),this},overrideMimeType:function(e){return b||(f.mimeType=e),this},statusCode:function(e){var t;if(e)if(b<2)for(t in e)C[t]=[C[t],e[t]];else R.always(e[R.status]);return this},abort:function(e){var t=e||T;return c&&c.abort(t),n(0,t),this}};if(m.promise(R).complete=v.add,R.success=R.done,R.error=R.fail,f.url=((e||f.url||Q)+"").replace(Y,"").replace(re,J[1]+"//"),f.type=t.method||t.type||f.method||f.type,f.dataTypes=A.trim(f.dataType||"*").toLowerCase().match(D)||[""],null==f.crossDomain&&(r=oe.exec(f.url.toLowerCase()),f.crossDomain=!(!r||r[1]===J[1]&&r[2]===J[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(J[3]||("http:"===J[1]?"80":"443")))),f.data&&f.processData&&"string"!=typeof f.data&&(f.data=A.param(f.data,f.traditional)),d(ie,f,t,R),2===b)return R;u=f.global,u&&0==A.active++&&A.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!ne.test(f.type),i=f.url,f.hasContent||(f.data&&(i=f.url+=(V.test(i)?"&":"?")+f.data,delete f.data),!1===f.cache&&(f.url=Z.test(i)?i.replace(Z,"$1_="+X++):i+(V.test(i)?"&":"?")+"_="+X++)),f.ifModified&&(A.lastModified[i]&&R.setRequestHeader("If-Modified-Since",A.lastModified[i]),A.etag[i]&&R.setRequestHeader("If-None-Match",A.etag[i])),(f.data&&f.hasContent&&!1!==f.contentType||t.contentType)&&R.setRequestHeader("Content-Type",f.contentType);for(o in f.headers)R.setRequestHeader(o,f.headers[o]);if(f.beforeSend&&(!1===f.beforeSend.call(g,R,f)||2===b))return R.abort();T="abort";for(o in{success:1,error:1,complete:1})R[o](f[o]);if(c=d(ae,f,t,R)){R.readyState=1,u&&y.trigger("ajaxSend",[R,f]),f.async&&f.timeout>0&&(s=setTimeout(function(){R.abort("timeout")},f.timeout));try{b=1,c.send(k,n)}catch(e){if(!(b<2))throw e;n(-1,e)}}else n(-1,"No Transport");return R},getJSON:function(e,t,n){return A.get(e,t,n,"json")},getScript:function(e,t){return A.get(e,void 0,t,"script")}}),A.each(["get","post"],function(e,t){A[t]=function(e,n,r,o){return A.isFunction(n)&&(o=o||r,r=n,n=void 0),A.ajax({url:e,type:t,dataType:o,data:n,success:r})}}),A.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){A.fn[t]=function(e){return this.on(t,e)}}),A._evalUrl=function(e){return A.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})};var ue=/%20/g,ce=/\[\]$/,le=/\r?\n/g,de=/^(?:submit|button|image|reset|file)$/i,fe=/^(?:input|select|textarea|keygen)/i;A.param=function(e,t){var n,r=[],o=function(e,t){t=A.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=A.ajaxSettings&&A.ajaxSettings.traditional),A.isArray(e)||e.jquery&&!A.isPlainObject(e))A.each(e,function(){o(this.name,this.value)});else for(n in e)g(n,e[n],t,o);return r.join("&").replace(ue,"+")},A.fn.extend({serialize:function(){return A.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=A.prop(this,"elements");return e?A.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!A(this).is(":disabled")&&fe.test(this.nodeName)&&!de.test(e)&&(this.checked||!rcheckableType.test(e))}).map(function(e,t){var n=A(this).val();return null==n?null:A.isArray(n)?A.map(n,function(e){return{name:t.name,value:e.replace(le,"\r\n")}}):{name:t.name,value:n.replace(le,"\r\n")}}).get()}}),A.ajaxSettings.xhr=void 0!==window.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&y()||m()}:y;var pe=0,he={},ge=A.ajaxSettings.xhr();window.ActiveXObject&&A(window).on("unload",function(){for(var e in he)he[e](void 0,!0)}),B.cors=!!ge&&"withCredentials"in ge,ge=B.ajax=!!ge,ge&&A.ajaxTransport(function(e){if(!e.crossDomain||B.cors){var t;return{send:function(n,r){var o,i=e.xhr(),a=++pe;if(i.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(o in e.xhrFields)i[o]=e.xhrFields[o];e.mimeType&&i.overrideMimeType&&i.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(o in n)void 0!==n[o]&&i.setRequestHeader(o,n[o]+"");i.upload&&e.progress&&(i.upload.onprogress=e.progress),i.send(e.hasContent&&(e.body||e.data)||null),t=function(n,o){var s,u,c;if(t&&(o||4===i.readyState))if(delete he[a],t=void 0,i.onreadystatechange=A.noop,o)4!==i.readyState&&i.abort();else{c={},s=i.status,"string"==typeof i.responseText&&(c.text=i.responseText);try{u=i.statusText}catch(e){u=""}s||!e.isLocal||e.crossDomain?1223===s&&(s=204):s=c.text?200:404}c&&r(s,u,c,i.getAllResponseHeaders())},e.async?4===i.readyState?setTimeout(t):i.onreadystatechange=he[a]=t:t()},abort:function(){t&&t(void 0,!0)}}}}),A.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return A.globalEval(e),e}}}),A.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),A.ajaxTransport("script",function(e){if(e.crossDomain){var t,n=L.head||A("head")[0]||L.documentElement;return{send:function(r,o){t=L.createElement("script"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){(n||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||o(200,"success"))},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(void 0,!0)}}}});var ye=[],me=/(=)\?(?=&|$)|\?\?/;return A.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=ye.pop()||A.expando+"_"+X++;return this[e]=!0,e}}),A.ajaxPrefilter("json jsonp",function(e,t,n){var r,o,i,a=!1!==e.jsonp&&(me.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&me.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=A.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(me,"$1"+r):!1!==e.jsonp&&(e.url+=(V.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return i||A.error(r+" was not called"),i[0]},e.dataTypes[0]="json",o=window[r],window[r]=function(){i=arguments},n.always(function(){window[r]=o,e[r]&&(e.jsonpCallback=t.jsonpCallback,ye.push(r)),i&&A.isFunction(o)&&o(i[0]),i=o=void 0}),"script"}),A.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||L;var r=rsingleTag.exec(e),o=!n&&[];return r?[t.createElement(r[1])]:(r=A.buildFragment([e],t,o),o&&o.length&&A(o).remove(),A.merge([],r.childNodes))},A}(),i=function(e,t){if(e=o.extend(!0,{headers:{},qs:{}},e),e.type=e.method,delete e.method,e.onProgress&&(e.progress=e.onProgress,delete e.onProgress),e.qs){var n=r.stringify(e.qs);n&&(e.url+=(-1===e.url.indexOf("?")?"?":"&")+n),delete e.qs}if(e.json&&(e.data=e.body,delete e.json,delete e.body,!e.headers&&(e.headers={}),e.headers["Content-Type"]="application/json"),e.body&&e.body.constructor!==window.File&&e.body.constructor!==window.Blob&&(e.data=e.body,delete e.body),e.headers){var i=e.headers;delete e.headers,e.beforeSend=function(e){for(var t in i)i.hasOwnProperty(t)&&"content-length"!==t.toLowerCase()&&"user-agent"!==t.toLowerCase()&&"origin"!==t.toLowerCase()&&"host"!==t.toLowerCase()&&e.setRequestHeader(t,i[t])}}var a=function(e){var t={};return e.getAllResponseHeaders().trim().split("\n").forEach(function(e){if(e){var n=e.indexOf(":"),r=e.substr(0,n).trim().toLowerCase(),o=e.substr(n+1).trim();t[r]=o}}),{statusCode:e.status,statusMessage:e.statusText,headers:t}};return e.success=function(e,n,r){t(null,a(r),e)},e.error=function(e){e.responseText?t(null,a(e),e.responseText):t(e.statusText,a(e),e.responseText)},e.dataType="text",o.ajax(e)};e.exports=i},function(e,t,n){"use strict";t.decode=t.parse=n(13),t.encode=t.stringify=n(14)},function(e,t,n){"use strict";function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,n,i){t=t||"&",n=n||"=";var a={};if("string"!=typeof e||0===e.length)return a;var s=/\+/g;e=e.split(t);var u=1e3;i&&"number"==typeof i.maxKeys&&(u=i.maxKeys);var c=e.length;u>0&&c>u&&(c=u);for(var l=0;l=0?(d=g.substr(0,y),f=g.substr(y+1)):(d=g,f=""),p=decodeURIComponent(d),h=decodeURIComponent(f),r(a,p)?o(a[p])?a[p].push(h):a[p]=[a[p],h]:a[p]=h}return a};var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,n){"use strict";function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r=0;r--)m[r][0]===e&&m[r][1]===t&&m.splice(r,1);m.unshift([e,t]);var i=this.options.UploadIdCacheLimit;m.length>i&&m.splice(i),i&&setTimeout(function(){try{k.localStorage.setItem(b,JSON.stringify(m))}catch(e){}})}function a(e){o.call(this),delete x[e];for(var t=m.length-1;t>=0;t--)m[t][1]===e&&m.splice(t,1);var n=this.options.UploadIdCacheLimit;m.length>n&&m.splice(n),n&&setTimeout(function(){try{m.length?k.localStorage.setItem(b,JSON.stringify(m)):k.localStorage.removeItem(b)}catch(e){}})}function s(e){o.call(this);for(var t=[],n=0;ng)return t(null,!1);if(n>1){if(Math.max(e[0].Size,e[1].Size)!==h)return t(null,!1)}var r=function(o){if(o=u.length)return void S.emit("has_upload_id",t);var s=u[e];return k.isInArray(t,s)?x[s]?void f(e+1):void l.call(d,{Bucket:r,Region:o,Key:i,UploadId:s},function(t,r){d._isRunningTask(n)&&(t?(a.call(d,s),f(e+1)):S.emit("upload_id_ready",{UploadId:s,PartList:r.PartList}))}):(a.call(d,s),void f(e+1))};f(0)}else S.emit("has_upload_id",t)}),S.on("get_remote_upload_id_list",function(t){c.call(d,{Bucket:r,Region:o,Key:i},function(t,r){if(d._isRunningTask(n)){if(t)return S.emit("error",t);var o=r.UploadList.filter(function(e){return e.Key===i&&(!u||e.StorageClass.toUpperCase()===u.toUpperCase())}).reverse().map(function(e){return e.UploadId||e.UploadID});if(o.length)S.emit("seek_local_avail_upload_id",o);else{var c,l=k.getFileUUID(e.Body,e.ChunkSize);l&&(c=s.call(d,l))&&k.each(c,function(e){a.call(d,e)}),S.emit("no_available_upload_id")}}})}),S.emit("get_remote_upload_id_list")}function c(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Prefix:e.Key},i=function(){n.multipartList(o,function(e,n){if(e)return t(e);r.push.apply(r,n.Upload||[]),"true"==n.IsTruncated?(o.KeyMarker=n.NextKeyMarker,o.UploadIdMarker=n.NextUploadIdMarker,i()):t(null,{UploadList:r})})};i()}function l(e,t){var n=this,r=[],o={Bucket:e.Bucket,Region:e.Region,Key:e.Key,UploadId:e.UploadId},i=function(){n.multipartListPart(o,function(e,n){if(e)return t(e);r.push.apply(r,n.Part||[]),"true"==n.IsTruncated?(o.PartNumberMarker=n.NextPartNumberMarker,i()):t(null,{PartList:r})})};i()}function d(e,t){var n=this,r=e.TaskId,o=e.Bucket,i=e.Region,a=e.Key,s=e.UploadData,u=e.FileSize,c=e.SliceSize,l=Math.min(e.AsyncLimit||n.options.ChunkParallelLimit||1,256),d=e.Body,p=Math.ceil(u/c),h=0,g=e.ServerSideEncryption,y=k.filter(s.PartList,function(e){return e.Uploaded&&(h+=e.PartNumber>=p?u%c||c:c),!e.Uploaded}),m=e.onProgress;v.eachLimit(y,l,function(e,t){if(n._isRunningTask(r)){var l=e.PartNumber,p=Math.min(u,e.PartNumber*c)-(e.PartNumber-1)*c,y=0;f.call(n,{TaskId:r,Bucket:o,Region:i,Key:a,SliceSize:c,FileSize:u,PartNumber:l,ServerSideEncryption:g,Body:d,UploadData:s,onProgress:function(e){h+=e.loaded-y,y=e.loaded,m({loaded:h,total:u})}},function(o,i){n._isRunningTask(r)&&(!k.isBrowser||o||i.ETag||(o='get ETag error, please add "ETag" to CORS ExposeHeader setting.'),o?h-=y:(h+=p-y,e.ETag=i.ETag),t(o||null,i))})}},function(e){if(n._isRunningTask(r))return e?t(e):void t(null,{UploadId:s.UploadId,SliceList:s.PartList})})}function f(e,t){var n=e.TaskId,r=e.Bucket,o=e.Region,i=e.Key,a=e.FileSize,s=e.Body,u=1*e.PartNumber,c=e.SliceSize,l=e.ServerSideEncryption,d=e.UploadData,f=this,p=c*(u-1),h=c,g=p+c;g>a&&(g=a,h=g-p);var y=k.fileSlice(s,p,g),m=d.PartList[u-1],C=m.ETag;v.retry(3,function(t){f._isRunningTask(n)&&f.multipartUpload({TaskId:n,Bucket:r,Region:o,Key:i,ContentLength:h,ContentSha1:C,PartNumber:u,UploadId:d.UploadId,ServerSideEncryption:l,Body:y,onProgress:e.onProgress},function(e,r){if(f._isRunningTask(n))return e?t(e):(m.Uploaded=!0,t(null,r))})},function(e,r){if(f._isRunningTask(n))return t(e,r)})}function p(e,t){var n=e.Bucket,r=e.Region,o=e.Key,i=e.UploadId,a=e.SliceList,s=this,u=a.map(function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}});s.multipartComplete({Bucket:n,Region:r,Key:o,UploadId:i,Parts:u},function(e,n){if(e)return t(e);t(null,n)})}function h(e,t){var n=e.Bucket,r=e.Region,o=e.Key,i=e.UploadId,a=e.Level||"task",s=e.AsyncLimit,u=this,l=new C;if(l.on("error",function(e){return t(e)}),l.on("get_abort_array",function(i){g.call(u,{Bucket:n,Region:r,Key:o,Headers:e.Headers,AsyncLimit:s,AbortArray:i},function(e,n){if(e)return t(e);t(null,n)})}),"bucket"===a)c.call(u,{Bucket:n,Region:r},function(e,n){if(e)return t(e);l.emit("get_abort_array",n.UploadList||[])});else if("file"===a){if(!o)return t({error:"abort_upload_task_no_key"});c.call(u,{Bucket:n,Region:r,Key:o},function(e,n){if(e)return t(e);l.emit("get_abort_array",n.UploadList||[])})}else{if("task"!==a)return t({error:"abort_unknown_level"});if(!i)return t({error:"abort_upload_task_no_id"});if(!o)return t({error:"abort_upload_task_no_key"});l.emit("get_abort_array",[{Key:o,UploadId:i}])}}function g(e,t){var n=e.Bucket,r=e.Region,o=e.Key,i=e.AbortArray,a=e.AsyncLimit||1,s=this,u=0,c=new Array(i.length);v.eachLimit(i,a,function(t,i){var a=u;if(o&&o!=t.Key)return i(null,{KeyNotMatch:!0});var l=t.UploadId||t.UploadID;s.multipartAbort({Bucket:n,Region:r,Key:t.Key,Headers:e.Headers,UploadId:l},function(e,o){var s={Bucket:n,Region:r,Key:t.Key,UploadId:l};c[a]={error:e,task:s},i(null)}),u++},function(e){if(e)return t(e);for(var n=[],r=[],o=0,i=c.length;o=r?"sliceUploadFile":"putObject";d.push({api:v,params:e,callback:m})}()}),n._addTasks(d)}var m,v=n(16),C=n(2).EventProxy,k=n(0),x={},b="cos_sdk_upload_cache",T={sliceUploadFile:r,abortUploadTask:h,uploadFiles:y};k.each(T,function(e,n){t[n]=k.apiWrapper(n,e)})},function(e,t){var n=function(e,t,n,r){if(r=r||function(){},!e.length||t<=0)return r();var o=0,i=0,a=0;!function s(){if(o>=e.length)return r();for(;a=e.length?r():s())})}()},r=function(e,t,n){var r=function(o){t(function(t,i){t&&o= SliceSize ? 'sliceUploadFile' : 'putObject', - params: fileParams, - callback: onFileFinish, - }); + // 添加上传任务 + var api = FileSize >= SliceSize ? 'sliceUploadFile' : 'putObject'; + taskList.push({ + api: api, + params: fileParams, + callback: onFileFinish, + }); + })(); }); self._addTasks(taskList); } diff --git a/lib/async.js b/src/async.js similarity index 100% rename from lib/async.js rename to src/async.js diff --git a/src/base.js b/src/base.js index 4284952..0c8e03a 100644 --- a/src/base.js +++ b/src/base.js @@ -640,7 +640,7 @@ function deleteBucketLifecycle(params, callback) { function putBucketVersioning(params, callback) { if (!params['VersioningConfiguration']) { - callback({error: 'lack of param VersioningConfiguration'}); + callback({error: 'missing param VersioningConfiguration'}); return; } var VersioningConfiguration = params['VersioningConfiguration'] || {}; @@ -911,7 +911,7 @@ function getObject(params, callback) { * @param {String} params.Bucket Bucket名称,必须 * @param {String} params.Region 地域名称,必须 * @param {String} params.Key 文件名称,必须 - * @param {File || Blob} params.Body 上传文件对象 + * @param {File || Blob || String} params.Body 上传文件对象或字符串 * @param {String} params.CacheControl RFC 2616 中定义的缓存策略,将作为 Object 元数据保存,非必须 * @param {String} params.ContentDisposition RFC 2616 中定义的文件名称,将作为 Object 元数据保存,非必须 * @param {String} params.ContentEncoding RFC 2616 中定义的编码格式,将作为 Object 元数据保存,非必须 @@ -932,28 +932,10 @@ function getObject(params, callback) { * @return {String} data.ETag 为对应上传文件的 ETag 值 */ function putObject(params, callback) { - var self = this; - var headers = params.Headers; - var Body = params.Body; - var readStream; - - if (util.isBrowser && Body && (Body instanceof global.Blob || Body instanceof global.File)) { // 在浏览器允许传入 Blob 或者 File 文件内容 - headers['Content-Length'] = Body.size; - } else if (util.isBrowser && typeof Body === 'string') { // 在浏览器允许传入字符串作为内容 'hello' - headers['Content-Length'] = Body.length; - } else if (Body && typeof Body.pipe === 'function') { // fs.createReadStream(filepath) - readStream = Body; - Body = null; - if (headers['Content-Length'] === undefined) { - callback({error: 'lack of param ContentLength'}); - return; - } - } else { - callback({error: 'params body format error, Only allow Buffer, Stream, Blob.'}); - return; - } - var onProgress = util.throttleOnProgress.call(self, headers['Content-Length'], params.onProgress); + var self = this; + var FileSize = params.Headers['Content-Length']; + var onProgress = util.throttleOnProgress.call(self, params.Headers['Content-Length'], params.onProgress); submitRequest.call(this, { TaskId: params.TaskId, @@ -961,14 +943,15 @@ function putObject(params, callback) { Bucket: params.Bucket, Region: params.Region, Key: params.Key, - headers: headers, - body: Body, + headers: params.Headers, + body: params.Body, onProgress: onProgress, }, function (err, data) { - onProgress(null, true); if (err) { + onProgress(null, true); return callback(err); } + onProgress({loaded: FileSize, total: FileSize}, true); if (data && data.headers && data.headers['etag']) { var url = getUrl({ protocol: self.options.Protocol, @@ -1281,7 +1264,7 @@ function deleteMultipleObject(params, callback) { function restoreObject(params, callback) { var headers = params.Headers; if (!params['RestoreRequest']) { - callback({error: 'lack of param RestoreRequest'}); + callback({error: 'missing param RestoreRequest'}); return; } @@ -1356,20 +1339,59 @@ function multipartInit(params, callback) { /** * 分块上传 - * @param {Object} params 参数对象,必须 - * @param {String} params.Bucket Bucket名称,必须 - * @param {String} params.Region 地域名称,必须 - * @param {String} params.Key object名称,必须 - * @param {String} params.ContentLength RFC 2616 中定义的 HTTP 请求内容长度(字节),非必须 - * @param {String} params.Expect 当使用 Expect: 100-continue 时,在收到服务端确认后,才会发送请求内容,非必须 - * @param {String} params.ServerSideEncryption 支持按照指定的加密算法进行服务端数据加密,格式 x-cos-server-side-encryption: "AES256",非必须 - * @param {String} params.ContentSha1 RFC 3174 中定义的 160-bit 内容 SHA-1 算法校验值,非必须 - * @param {Function} callback 回调函数,必须 - * @return {Object} err 请求失败的错误,如果请求成功,则为空。 - * @return {Object} data 返回的数据 - * @return {Object} data.ETag 返回的文件分块 sha1 值 + * @param {Object} params 参数对象,必须 + * @param {String} params.Bucket Bucket名称,必须 + * @param {String} params.Region 地域名称,必须 + * @param {String} params.Key object名称,必须 + * @param {File || Blob || String} params.Body 上传文件对象或字符串 + * @param {String} params.ContentLength RFC 2616 中定义的 HTTP 请求内容长度(字节),非必须 + * @param {String} params.Expect 当使用 Expect: 100-continue 时,在收到服务端确认后,才会发送请求内容,非必须 + * @param {String} params.ServerSideEncryption 支持按照指定的加密算法进行服务端数据加密,格式 x-cos-server-side-encryption: "AES256",非必须 + * @param {String} params.ContentSha1 RFC 3174 中定义的 160-bit 内容 SHA-1 算法校验值,非必须 + * @param {Function} callback 回调函数,必须 + * @return {Object} err 请求失败的错误,如果请求成功,则为空。 + * @return {Object} data 返回的数据 + * @return {Object} data.ETag 返回的文件分块 sha1 值 */ function multipartUpload(params, callback) { + + // 获取 filesize + var size; + if (util.isBrowser) { + if (typeof params.Body === 'string') { + params.Body = new global.Blob([params.Body]); + } + if (params.Body instanceof global.File || params.Body instanceof global.Blob) { + size = params.Body.size; + } else { + callback({error: 'params body format error, Only allow File|Blob|String.'}); + return; + } + } else { + if (params.Body) { + if (typeof params.Body === 'string') { + params.Body = global.Buffer(params.Body); + } + if (params.Body instanceof global.Buffer) { + size = params.Body.length; + } else if (typeof params.Body.pipe === 'function') { + if (params.ContentLength === undefined) { + callback({error: 'missing param ContentLength'}); + return; + } else { + size = params.ContentLength; + } + } else { + callback({error: 'params Body format error, Only allow Buffer|Stream|String.'}); + return; + } + } else { + callback({error: 'missing param Body'}); + return; + } + } + params.ContentLength = size || 0; + submitRequest.call(this, { TaskId: params.TaskId, method: 'PUT', @@ -1656,6 +1678,7 @@ function getObjectUrl(params, callback) { Region: params.Region || '', Method: params.Method || 'get', Key: params.Key, + Expires: params.Expires, }, function (AuthData) { if (!callback) return; var result = { @@ -1847,6 +1870,7 @@ function getAuthorizationAsync(params, callback) { Key: params.Key || '', Query: params.Query, Headers: params.Headers, + Expires: params.Expires, }); callback && callback({Authorization: Authorization}); return Authorization; diff --git a/src/cos.js b/src/cos.js index ccbd4de..d1d24ba 100644 --- a/src/cos.js +++ b/src/cos.js @@ -10,11 +10,11 @@ var defaultOptions = { AppId: '', // AppId 已废弃,请拼接到 Bucket 后传入,例如:test-1250000000 SecretId: '', SecretKey: '', - UploadIdCacheLimit: 50, FileParallelLimit: 3, ChunkParallelLimit: 3, ChunkSize: 1024 * 1024, ProgressInterval: 1000, + UploadIdCacheLimit: 50, Domain: '', ServiceDomain: '', SliceSize: 1024 * 1024 * 20, @@ -35,6 +35,6 @@ util.extend(COS.prototype, base); util.extend(COS.prototype, advance); COS.getAuthorization = util.getAuth; -COS.version = '0.4.5'; +COS.version = '0.4.6'; module.exports = COS; diff --git a/src/task.js b/src/task.js index bebd787..62a62cf 100644 --- a/src/task.js +++ b/src/task.js @@ -103,29 +103,75 @@ var initTask = function (cos) { cos._addTasks = function (taskList) { util.each(taskList, function (task) { - task.params.IgnoreAddEvent = true; - cos._addTask(task.api, task.params, task.callback); + cos._addTask(task.api, task.params, task.callback, true); }); emitListUpdate(); }; - cos._addTask = function (api, params, callback) { + cos._addTask = function (api, params, callback, ignoreAddEvent) { + + // 复制参数对象 + params = util.extend({}, params); + ignoreAddEvent && (params.ignoreAddEvent = true); // 生成 id var id = util.uuid(); params.TaskReady && params.TaskReady(id); + // 获取 filesize var size; - if (params.Body && params.Body.size !== undefined) { - size = params.Body.size; - } else if (params.Body && params.Body.length !== undefined) { - size = params.Body.length; - } else if (params.ContentLength !== undefined) { - size = params.ContentLength; + if (util.isBrowser) { + if (typeof params.Body === 'string') { + params.Body = new global.Blob([params.Body]); + } + if (params.Body instanceof global.File || params.Body instanceof global.Blob) { + size = params.Body.size; + } else { + callback({error: 'params body format error, Only allow File|Blob|String.'}); + return; + } + } else { + if (api === 'sliceUploadFile') { + if (params.FilePath) { + if (params.ContentLength === undefined) { + try { + size = fs.statSync(params.FilePath).size; + } catch (err) { + callback(err); + return; + } + } else { + size = params.ContentLength; + } + } else { + callback({error: 'missing param FilePath'}); + return; + } + } else if (api === 'putObject') { + if (params.Body) { + if (typeof params.Body === 'string') { + params.Body = global.Buffer(params.Body); + } + if (params.Body instanceof global.Buffer) { + size = params.Body.length; + } else if (typeof params.Body.pipe === 'function') { + if (params.ContentLength === undefined) { + callback({error: 'missing param ContentLength'}); + return; + } else { + size = params.ContentLength; + } + } else { + callback({error: 'params Body format error, Only allow Buffer|Stream|String.'}); + return; + } + } else { + callback({error: 'missing param Body'}); + return; + } + } } - - if (params.ContentLength === undefined) params.ContentLength = size; - size = size || 0; + params.ContentLength = size = size || 0; params.TaskId = id; var task = { diff --git a/src/util.js b/src/util.js index 8815794..5d4332e 100644 --- a/src/util.js +++ b/src/util.js @@ -26,8 +26,8 @@ var getAuth = function (opt) { var headers = clone(opt.Headers || opt.headers || {}); pathname.indexOf('/') !== 0 && (pathname = '/' + pathname); - if (!SecretId) return console.error('lack of param SecretId'); - if (!SecretKey) return console.error('lack of param SecretKey'); + if (!SecretId) return console.error('missing param SecretId'); + if (!SecretKey) return console.error('missing param SecretKey'); var getObjectKeys = function (obj) { var list = []; @@ -141,14 +141,6 @@ var readAsBinaryString = function (blob, callback) { readFun.call(fr, blob); }; -// 获取文件 sha1 值 -var getFileSHA = function (blob, callback) { - readAsBinaryString(blob, function (content) { - var hash = CryptoJS.SHA1(content).toString(); - callback(null, hash); - }); -}; - // 获取文件 md5 值 var getFileMd5 = function (blob, callback) { readAsBinaryString(blob, function (content) { @@ -227,17 +219,19 @@ var uuid = function () { return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4()); }; -var checkParams = function (apiName, params) { - var bucket = params.Bucket; - var region = params.Region; - var object = params.Key; +var hasMissingParams = function (apiName, params) { + var Bucket = params.Bucket; + var Region = params.Region; + var Key = params.Key; if (apiName.indexOf('Bucket') > -1 || apiName === 'deleteMultipleObject' || apiName === 'multipartList' || apiName === 'listObjectVersions') { - return bucket && region; - } - if (apiName.indexOf('Object') > -1 || apiName.indexOf('multipart') > -1 || apiName === 'sliceUploadFile' || apiName === 'abortUploadTask') { - return bucket && region && object; + if (!Bucket) return 'Bucket'; + if (!Region) return 'Region'; + } else if (apiName.indexOf('Object') > -1 || apiName.indexOf('multipart') > -1 || apiName === 'sliceUploadFile' || apiName === 'abortUploadTask') { + if (!Bucket) return 'Bucket'; + if (!Region) return 'Region'; + if (!Key) return 'Key'; } - return true; + return false; }; var apiWrapper = function (apiName, apiFn) { @@ -253,47 +247,49 @@ var apiWrapper = function (apiName, apiFn) { params = extend({}, params); // 统一处理 Headers - var Headers = params.Headers || {}; - if (params && typeof params === 'object') { - (function () { - for (var key in params) { - if (params.hasOwnProperty(key) && key.indexOf('x-cos-') > -1) { - Headers[key] = params[key]; + if (apiName !== 'getAuth' && apiName !== 'getObjectUrl') { + var Headers = params.Headers || {}; + if (params && typeof params === 'object') { + (function () { + for (var key in params) { + if (params.hasOwnProperty(key) && key.indexOf('x-cos-') > -1) { + Headers[key] = params[key]; + } } - } - })(); - - // params headers - Headers['x-cos-mfa'] = params['MFA']; - Headers['Content-MD5'] = params['ContentMD5']; - Headers['Content-Length'] = params['ContentLength']; - Headers['Content-Type'] = params['ContentType']; - Headers['Expect'] = params['Expect']; - Headers['Expires'] = params['Expires']; - Headers['Cache-Control'] = params['CacheControl']; - Headers['Content-Disposition'] = params['ContentDisposition']; - Headers['Content-Encoding'] = params['ContentEncoding']; - Headers['Range'] = params['Range']; - Headers['If-Modified-Since'] = params['IfModifiedSince']; - Headers['If-Unmodified-Since'] = params['IfUnmodifiedSince']; - Headers['If-Match'] = params['IfMatch']; - Headers['If-None-Match'] = params['IfNoneMatch']; - Headers['x-cos-copy-source'] = params['CopySource']; - Headers['x-cos-copy-source-Range'] = params['CopySourceRange']; - Headers['x-cos-metadata-directive'] = params['MetadataDirective']; - Headers['x-cos-copy-source-If-Modified-Since'] = params['CopySourceIfModifiedSince']; - Headers['x-cos-copy-source-If-Unmodified-Since'] = params['CopySourceIfUnmodifiedSince']; - Headers['x-cos-copy-source-If-Match'] = params['CopySourceIfMatch']; - Headers['x-cos-copy-source-If-None-Match'] = params['CopySourceIfNoneMatch']; - Headers['x-cos-server-side-encryption'] = params['ServerSideEncryption']; - Headers['x-cos-acl'] = params['ACL']; - Headers['x-cos-grant-read'] = params['GrantRead']; - Headers['x-cos-grant-write'] = params['GrantWrite']; - Headers['x-cos-grant-full-control'] = params['GrantFullControl']; - Headers['x-cos-grant-read-acp'] = params['GrantReadAcp']; - Headers['x-cos-grant-write-acp'] = params['GrantWriteAcp']; - Headers['x-cos-storage-class'] = params['StorageClass']; - params.Headers = clearKey(Headers); + })(); + + // params headers + Headers['x-cos-mfa'] = params['MFA']; + Headers['Content-MD5'] = params['ContentMD5']; + Headers['Content-Length'] = params['ContentLength']; + Headers['Content-Type'] = params['ContentType']; + Headers['Expect'] = params['Expect']; + Headers['Expires'] = params['Expires']; + Headers['Cache-Control'] = params['CacheControl']; + Headers['Content-Disposition'] = params['ContentDisposition']; + Headers['Content-Encoding'] = params['ContentEncoding']; + Headers['Range'] = params['Range']; + Headers['If-Modified-Since'] = params['IfModifiedSince']; + Headers['If-Unmodified-Since'] = params['IfUnmodifiedSince']; + Headers['If-Match'] = params['IfMatch']; + Headers['If-None-Match'] = params['IfNoneMatch']; + Headers['x-cos-copy-source'] = params['CopySource']; + Headers['x-cos-copy-source-Range'] = params['CopySourceRange']; + Headers['x-cos-metadata-directive'] = params['MetadataDirective']; + Headers['x-cos-copy-source-If-Modified-Since'] = params['CopySourceIfModifiedSince']; + Headers['x-cos-copy-source-If-Unmodified-Since'] = params['CopySourceIfUnmodifiedSince']; + Headers['x-cos-copy-source-If-Match'] = params['CopySourceIfMatch']; + Headers['x-cos-copy-source-If-None-Match'] = params['CopySourceIfNoneMatch']; + Headers['x-cos-server-side-encryption'] = params['ServerSideEncryption']; + Headers['x-cos-acl'] = params['ACL']; + Headers['x-cos-grant-read'] = params['GrantRead']; + Headers['x-cos-grant-write'] = params['GrantWrite']; + Headers['x-cos-grant-full-control'] = params['GrantFullControl']; + Headers['x-cos-grant-read-acp'] = params['GrantReadAcp']; + Headers['x-cos-grant-write-acp'] = params['GrantWriteAcp']; + Headers['x-cos-storage-class'] = params['StorageClass']; + params.Headers = clearKey(Headers); + } } // 代理回调函数 @@ -310,18 +306,19 @@ var apiWrapper = function (apiName, apiFn) { if (apiName !== 'getService' && apiName !== 'abortUploadTask') { // 判断参数是否完整 - if (!checkParams(apiName, params)) { - _callback({error: 'lack of required params'}); + var missingResult; + if (missingResult = hasMissingParams(apiName, params)) { + _callback({error: 'missing param ' + missingResult}); return; } // 判断 region 格式 if (params.Region && params.Region.indexOf('-') === -1 && params.Region !== 'yfb') { - _callback({error: 'Region format error, find help here: https://cloud.tencent.com/document/product/436/6224'}); + _callback({error: 'param Region format error, find help here: https://cloud.tencent.com/document/product/436/6224'}); return; } // 判断 region 格式 if (params.Region && params.Region.indexOf('cos.') > -1) { - _callback({error: 'Region should not be start with "cos."'}); + _callback({error: 'param Region should not be start with "cos."'}); return; } // 兼容不带 AppId 的 Bucket @@ -424,5 +421,14 @@ util.fileSlice = function (file, start, end) { return file.webkitSlice(start, end); } }; +util.localStorage = global.localStorage; +util.getFileUUID = function (file, ChunkSize) { + // 如果信息不完整,不获取 + if (file.name && file.size && file.lastModifiedDate && ChunkSize) { + return util.md5([file.name, file.size, file.lastModifiedDate, ChunkSize].join('::')); + } else { + return null; + } +}; module.exports = util; \ No newline at end of file