@@ -7448,7 +7448,7 @@ module.exports = function(module) {
74487448/*! exports provided: name, version, description, main, scripts, repository, author, license, dependencies, devDependencies, default */
74497449/***/ (function(module) {
74507450
7451- module.exports = JSON.parse("{\"name\":\"cos-wx-sdk-v5\",\"version\":\"1.7.0 \",\"description\":\"小程序 SDK for [腾讯云对象存储服务](https://cloud.tencent.com/product/cos)\",\"main\":\"demo/lib/cos-wx-sdk-v5.min.js\",\"scripts\":{\"prettier\":\"prettier --write src demo/demo-sdk.js demo/test.js demo/ciDemo\",\"dev\":\"cross-env NODE_ENV=development node build.js --mode=development\",\"build\":\"cross-env NODE_ENV=production node build.js --mode=production\",\"sts.js\":\"node server/sts.js\"},\"repository\":{\"type\":\"git\",\"url\":\"http://github.com/tencentyun/cos-wx-sdk-v5.git\"},\"author\":\"carsonxu\",\"license\":\"ISC\",\"dependencies\":{\"@xmldom/xmldom\":\"^0.8.6\",\"mime\":\"^2.4.6\"},\"devDependencies\":{\"@babel/core\":\"7.17.9\",\"@babel/preset-env\":\"7.16.11\",\"babel-loader\":\"8.2.5\",\"body-parser\":\"^1.18.3\",\"cross-env\":\"^7.0.3\",\"express\":\"^4.17.1\",\"prettier\":\"^3.0.1\",\"qcloud-cos-sts\":\"^3.0.2\",\"terser-webpack-plugin\":\"4.2.3\",\"webpack\":\"4.46.0\",\"webpack-cli\":\"4.10.0\"}}");
7451+ module.exports = JSON.parse("{\"name\":\"cos-wx-sdk-v5\",\"version\":\"1.7.1 \",\"description\":\"小程序 SDK for [腾讯云对象存储服务](https://cloud.tencent.com/product/cos)\",\"main\":\"demo/lib/cos-wx-sdk-v5.min.js\",\"scripts\":{\"prettier\":\"prettier --write src demo/demo-sdk.js demo/test.js demo/ciDemo\",\"dev\":\"cross-env NODE_ENV=development node build.js --mode=development\",\"build\":\"cross-env NODE_ENV=production node build.js --mode=production\",\"sts.js\":\"node server/sts.js\"},\"repository\":{\"type\":\"git\",\"url\":\"http://github.com/tencentyun/cos-wx-sdk-v5.git\"},\"author\":\"carsonxu\",\"license\":\"ISC\",\"dependencies\":{\"@xmldom/xmldom\":\"^0.8.6\",\"mime\":\"^2.4.6\"},\"devDependencies\":{\"@babel/core\":\"7.17.9\",\"@babel/preset-env\":\"7.16.11\",\"babel-loader\":\"8.2.5\",\"body-parser\":\"^1.18.3\",\"cross-env\":\"^7.0.3\",\"express\":\"^4.17.1\",\"prettier\":\"^3.0.1\",\"qcloud-cos-sts\":\"^3.0.2\",\"terser-webpack-plugin\":\"4.2.3\",\"webpack\":\"4.46.0\",\"webpack-cli\":\"4.10.0\"}}");
74527452
74537453/***/ }),
74547454
@@ -7522,12 +7522,20 @@ function sliceUploadFile(params, callback) {
75227522
75237523 // 上传分块完成,开始 uploadSliceComplete 操作
75247524 ep.on('upload_slice_complete', function (UploadData) {
7525+ var metaHeaders = {};
7526+ util.each(params.Headers, function (val, k) {
7527+ var shortKey = k.toLowerCase();
7528+ if (shortKey.indexOf('x-cos-meta-') === 0 || shortKey === 'pic-operations') {
7529+ metaHeaders[k] = val;
7530+ }
7531+ });
75257532 uploadSliceComplete.call(self, {
75267533 Bucket: Bucket,
75277534 Region: Region,
75287535 Key: Key,
75297536 UploadId: UploadData.UploadId,
75307537 SliceList: UploadData.SliceList,
7538+ Headers: metaHeaders,
75317539 tracker: tracker
75327540 }, function (err, data) {
75337541 if (!self._isRunningTask(TaskId)) return;
@@ -8167,6 +8175,7 @@ function uploadSliceComplete(params, callback) {
81678175 UploadId: UploadId,
81688176 Parts: Parts,
81698177 calledBySdk: 'sliceUploadFile',
8178+ Headers: params.Headers || {},
81708179 tracker: params.tracker
81718180 }, tryCallback);
81728181 }, function (err, data) {
@@ -12764,22 +12773,31 @@ function _submitRequest(params, callback) {
1276412773 return;
1276512774 }
1276612775
12776+ // 请求返回码不为 200
12777+ var statusCode = response.statusCode;
12778+ var statusSuccess = Math.floor(statusCode / 100) === 2; // 200 202 204 206
12779+
1276712780 // 不对 body 进行转换,body 直接挂载返回
12768- var jsonRes;
1276912781 if (rawBody) {
12770- jsonRes = {};
12771- jsonRes.body = body;
12772- } else {
12773- try {
12774- jsonRes = body && body.indexOf('<') > -1 && body.indexOf('>') > -1 && util.xml2json(body) || {};
12775- } catch (e) {
12776- jsonRes = body || {};
12782+ if (statusSuccess) {
12783+ return cb(null, {
12784+ body: body
12785+ });
12786+ } else {
12787+ // 报错但是返回了 ArrayBuffer,需要解析成 string
12788+ if (body instanceof ArrayBuffer) {
12789+ var errorStr = util.arrayBufferToString(body);
12790+ var json = util.parseResBody(errorStr);
12791+ var errorBody = json.Error || json;
12792+ return cb({
12793+ error: errorBody
12794+ });
12795+ }
1277712796 }
1277812797 }
1277912798
12780- // 请求返回码不为 200
12781- var statusCode = response.statusCode;
12782- var statusSuccess = Math.floor(statusCode / 100) === 2; // 200 202 204 206
12799+ // 解析body,兼容 xml、json,解析失败时完整返回
12800+ var jsonRes = util.parseResBody(body);
1278312801 if (!statusSuccess) {
1278412802 cb({
1278512803 error: jsonRes.Error || jsonRes
@@ -14240,7 +14258,9 @@ var formatParams = function formatParams(apiName, params) {
1424014258 // SSE-COS、SSE-KMS
1424114259 'x-cos-server-side-encryption': 'ServerSideEncryption',
1424214260 'x-cos-server-side-encryption-cos-kms-key-id': 'SSEKMSKeyId',
14243- 'x-cos-server-side-encryption-context': 'SSEContext'
14261+ 'x-cos-server-side-encryption-context': 'SSEContext',
14262+ // 上传时图片处理
14263+ 'Pic-Operations': 'PicOperations'
1424414264 };
1424514265 util.each(headerMap, function (paramKey, headerKey) {
1424614266 if (params[paramKey] !== undefined) {
@@ -14626,6 +14646,46 @@ var simplifyPath = function simplifyPath(path) {
1462614646 }
1462714647 return '/' + stack.join('/');
1462814648};
14649+
14650+ // 将ArrayBuffer转换为字符串
14651+ var arrayBufferToString = function arrayBufferToString(arrayBuffer) {
14652+ var decoder = new TextDecoder('utf-8');
14653+ return decoder.decode(arrayBuffer);
14654+ };
14655+
14656+ // 解析响应体,兼容 xml、json
14657+ var parseResBody = function parseResBody(responseBody) {
14658+ var json;
14659+ if (responseBody && typeof responseBody === 'string') {
14660+ var trimBody = responseBody.trim();
14661+ var isXml = trimBody.indexOf('<') === 0;
14662+ var isJson = trimBody.indexOf('{') === 0;
14663+ if (isXml) {
14664+ // xml 解析,解析失败返回{}
14665+ json = util.xml2json(responseBody) || {};
14666+ } else if (isJson) {
14667+ // json解析,解析失败返回原始 Body
14668+ try {
14669+ // 替换 json 中的换行符为空格,否则解析会出错
14670+ var formatBody = responseBody.replace(/\n/g, ' ');
14671+ var parsedBody = JSON.parse(formatBody);
14672+ // 确保解析出 json 对象
14673+ if (Object.prototype.toString.call(parsedBody) === '[object Object]') {
14674+ json = parsedBody;
14675+ } else {
14676+ json = responseBody;
14677+ }
14678+ } catch (e) {
14679+ json = responseBody;
14680+ }
14681+ } else {
14682+ json = responseBody;
14683+ }
14684+ } else {
14685+ json = responseBody || {};
14686+ }
14687+ return json;
14688+ };
1462914689var util = {
1463014690 noop: noop,
1463114691 formatParams: formatParams,
@@ -14661,7 +14721,9 @@ var util = {
1466114721 error: error,
1466214722 getSourceParams: getSourceParams,
1466314723 encodeBase64: encodeBase64,
14664- simplifyPath: simplifyPath
14724+ simplifyPath: simplifyPath,
14725+ arrayBufferToString: arrayBufferToString,
14726+ parseResBody: parseResBody
1466514727};
1466614728module.exports = util;
1466714729
0 commit comments