From e6a9ac1e707b6daac4571b7e20e07b3e075a7b54 Mon Sep 17 00:00:00 2001 From: jordanqin Date: Wed, 18 Dec 2024 10:31:50 +0800 Subject: [PATCH] 1.1.1 --- AppScope/app.json5 | 4 +- README.md | 2 +- cosSdk/BuildProfile.ets | 2 +- cosSdk/CHANGELOG.md | 3 + cosSdk/README.md | 2 +- cosSdk/foundation110.har | Bin 20429 -> 0 bytes cosSdk/foundation111.har | Bin 0 -> 20819 bytes cosSdk/oh-package-lock.json5 | 8 +- cosSdk/oh-package.json5 | 4 +- cosSdk/src/main/ets/CosXmlBaseService.ets | 5 +- cosSdk/src/main/ets/CosXmlServiceConfig.ets | 6 + .../ets/converter/ResponseFileConverter.ets | 12 +- .../ets/test/transfer/Download.test.ets | 39 ++++ .../ets/test/transfer/Upload.test.ets | 9 +- cosTransferPractice/cosSdk-1.1.0.har | Bin 68290 -> 0 bytes cosTransferPractice/cosSdk-1.1.1.har | Bin 0 -> 68843 bytes cosTransferPractice/oh-package-lock.json5 | 21 +- cosTransferPractice/oh-package.json5 | 4 +- cosTransferPractice/src/main/ets/Const.ets | 8 +- foundation/BuildProfile.ets | 2 +- foundation/Index.ets | 2 +- foundation/oh-package.json5 | 2 +- foundation/src/main/ets/net/HttpProgress.ets | 32 +++ foundation/src/main/ets/net/HttpRequest.ets | 6 +- .../src/main/ets/net/QCloudHttpRequest.ets | 4 +- .../src/main/ets/task/QCloudTaskManager.ets | 6 +- .../src/main/ets/task/http/QCloudHTTPTask.ets | 1 + .../main/ets/task/http/QCloudRequestData.ets | 1 + .../ets/task/http/TaskHTTPExecuteFunc.ets | 11 +- oh-package.json5 | 2 +- .../@tencentcloud/cos}/BuildProfile.ets | 2 +- .../oh_modules/@tencentcloud/cos/CHANGELOG.md | 3 + .../oh_modules/@tencentcloud/cos/Index.ets | 0 .../oh_modules/@tencentcloud/cos/LICENSE | 0 .../oh_modules/@tencentcloud/cos/README.md | 2 +- .../@tencentcloud/cos/ResourceTable.txt | 0 .../@tencentcloud/cos/build-profile.json5 | 0 .../@tencentcloud/cos/consumer-rules.txt | 0 .../@tencentcloud/cos/foundation111.har | Bin 0 -> 20819 bytes .../@tencentcloud/cos/hvigorfile.ts | 0 .../@tencentcloud/cos/obfuscation-rules.txt | 0 .../@tencentcloud/cos/obfuscation.txt | 0 .../@tencentcloud/cos/oh-package-lock.json5 | 8 +- .../@tencentcloud/cos/oh-package.json5 | 2 +- .../cos/src/main/ets/CosXmlBaseService.ets | 5 +- .../cos/src/main/ets/CosXmlServiceConfig.ets | 6 + .../cos/src/main/ets/common/Constants.ets | 0 .../cos/src/main/ets/common/Range.ets | 0 .../converter/CosResponseBodyConverter.ets | 0 .../ResponseArrayBufferConverter.ets | 0 .../ets/converter/ResponseCosXmlConverter.ets | 0 .../ets/converter/ResponseFileConverter.ets | 12 +- .../cos/src/main/ets/error/CosClientError.ets | 0 .../cos/src/main/ets/error/CosError.ets | 0 .../cos/src/main/ets/error/CosErrorCode.ets | 0 .../ets/error/CosInvalidArgumentError.ets | 0 .../src/main/ets/error/CosServiceError.ets | 0 .../main/ets/error/CosTransferPauseError.ets | 0 .../cos/src/main/ets/model/CosXmlRequest.ets | 0 .../cos/src/main/ets/model/CosXmlResult.ets | 0 .../model/object/AbortMultiUploadRequest.ets | 0 .../model/object/AbortMultiUploadResult.ets | 0 .../object/CompleteMultiUploadRequest.ets | 0 .../object/CompleteMultiUploadResult.ets | 0 .../ets/model/object/DeleteObjectRequest.ets | 0 .../ets/model/object/DeleteObjectResult.ets | 0 .../object/GetObjectArrayBufferRequest.ets | 0 .../object/GetObjectArrayBufferResult.ets | 0 .../ets/model/object/GetObjectRequest.ets | 0 .../main/ets/model/object/GetObjectResult.ets | 0 .../ets/model/object/HeadObjectRequest.ets | 0 .../ets/model/object/HeadObjectResult.ets | 0 .../object/InitMultipartUploadRequest.ets | 0 .../object/InitMultipartUploadResult.ets | 0 .../ets/model/object/ListPartsRequest.ets | 0 .../main/ets/model/object/ListPartsResult.ets | 0 .../main/ets/model/object/ObjectRequest.ets | 0 .../ets/model/object/PresignedUrlRequest.ets | 0 .../ets/model/object/PresignedUrlResult.ets | 0 .../ets/model/object/PutObjectRequest.ets | 0 .../main/ets/model/object/PutObjectResult.ets | 0 .../main/ets/model/object/TransferRequest.ets | 0 .../ets/model/object/UploadPartRequest.ets | 0 .../ets/model/object/UploadPartResult.ets | 0 .../cos/src/main/ets/model/pic/ImageInfo.ets | 0 .../cos/src/main/ets/model/pic/PicObject.ets | 0 .../src/main/ets/model/pic/PicOperations.ets | 0 .../main/ets/model/pic/PicOriginalInfo.ets | 0 .../src/main/ets/transfer/DownloadTask.ets | 0 .../src/main/ets/transfer/TransferConfig.ets | 0 .../src/main/ets/transfer/TransferTask.ets | 0 .../cos/src/main/ets/transfer/UploadTask.ets | 0 .../cos/src/main/ets/util/CosErrorUtils.ets | 0 .../@tencentcloud/cos/src/main/module.json | 4 +- .../main/resources/base/element/string.json | 0 .../main/resources/en_US/element/string.json | 0 .../main/resources/zh_CN/element/string.json | 0 .../cos/src/mock/mock-config.json5 | 0 .../oh_modules/@tencentcloud/foundation | 1 + .../@tencentcloud/cos/BuildProfile.ets | 17 -- .../@tencentcloud/cos/foundation110.har | Bin 20429 -> 0 bytes .../oh_modules/@tencentcloud/foundation | 1 - .../@tencentcloud/foundation/Index.ets | 27 --- .../foundation/ResourceTable.txt | 1 - .../foundation/build-profile.json5 | 31 --- .../foundation/consumer-rules.txt | 0 .../@tencentcloud/foundation/hvigorfile.ts | 6 - .../foundation/obfuscation-rules.txt | 18 -- .../@tencentcloud/foundation/obfuscation.txt | 0 .../foundation/oh-package-lock.json5 | 9 - .../@tencentcloud/foundation/oh-package.json5 | 1 - .../main/ets/authentation/CredentialCache.ets | 29 --- .../QCloudAuthentationCreator.ets | 172 -------------- .../ets/authentation/QCloudCredential.ets | 43 ---- .../main/ets/authentation/QCloudSignature.ets | 22 -- .../authentation/QCloudSignatureBuilder.ets | 46 ---- .../ets/error/QCloudAuthenticationError.ets | 10 - .../src/main/ets/error/QCloudNetError.ets | 10 - .../src/main/ets/error/QCloudTaskError.ets | 10 - .../main/ets/error/QCloudUserCancelError.ets | 8 - .../src/main/ets/logger/LoggerOptions.ets | 8 - .../src/main/ets/logger/QCloudLogger.ets | 209 ------------------ .../main/ets/net/HarmonyHttpClientImpl.ets | 17 -- .../src/main/ets/net/HarmonyProxy.ets | 20 -- .../src/main/ets/net/HttpConstants.ets | 27 --- .../src/main/ets/net/HttpProgress.ets | 10 - .../src/main/ets/net/HttpRequest.ets | 205 ----------------- .../src/main/ets/net/HttpResponse.ets | 7 - .../src/main/ets/net/HttpResult.ets | 3 - .../src/main/ets/net/NetworkClient.ets | 30 --- .../src/main/ets/net/NetworkProxy.ets | 13 -- .../src/main/ets/net/QCloudHttpClient.ets | 37 ---- .../src/main/ets/net/QCloudHttpRequest.ets | 24 -- .../main/ets/net/RequestBodySerializer.ets | 42 ---- .../main/ets/net/RequestFileBodyWrapper.ets | 43 ---- .../main/ets/net/ResponseBodyConverter.ets | 48 ---- .../src/main/ets/retry/RetryHandler.ets | 30 --- .../src/main/ets/task/QCloudTaskManager.ets | 70 ------ .../src/main/ets/task/base/QCloudTask.ets | 84 ------- .../main/ets/task/base/QCloudTransferData.ets | 13 -- .../src/main/ets/task/http/QCloudHTTPTask.ets | 200 ----------------- .../main/ets/task/http/QCloudRequestData.ets | 12 - .../ets/task/http/TaskHTTPExecuteFunc.ets | 125 ----------- .../src/main/ets/task/queue/QCloudQueue.ets | 193 ---------------- .../src/main/ets/util/CryptoUtil.ets | 70 ------ .../src/main/ets/util/HttpUtils.ets | 19 -- .../src/main/ets/util/StringUtils.ets | 51 ----- .../foundation/src/main/ets/util/XmlUtils.ets | 161 -------------- .../foundation/src/main/module.json | 36 --- .../main/resources/base/element/string.json | 8 - .../main/resources/en_US/element/string.json | 8 - .../main/resources/zh_CN/element/string.json | 8 - .../foundation/src/mock/mock-config.json5 | 2 - oh_modules/.ohpm/oh_modules/@tencentcloud/cos | 2 +- 154 files changed, 175 insertions(+), 2364 deletions(-) delete mode 100644 cosSdk/foundation110.har create mode 100644 cosSdk/foundation111.har delete mode 100644 cosTransferPractice/cosSdk-1.1.0.har create mode 100644 cosTransferPractice/cosSdk-1.1.1.har rename oh_modules/.ohpm/{@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation => @tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos}/BuildProfile.ets (93%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/CHANGELOG.md (73%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/Index.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/LICENSE (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/README.md (99%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/ResourceTable.txt (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/build-profile.json5 (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/consumer-rules.txt (100%) create mode 100644 oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/foundation111.har rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/hvigorfile.ts (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/obfuscation-rules.txt (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/obfuscation.txt (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/oh-package-lock.json5 (56%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/oh-package.json5 (75%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/CosXmlBaseService.ets (98%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/CosXmlServiceConfig.ets (93%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/common/Constants.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/common/Range.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/converter/CosResponseBodyConverter.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseArrayBufferConverter.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseCosXmlConverter.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseFileConverter.ets (88%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/error/CosClientError.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/error/CosError.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/error/CosErrorCode.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/error/CosInvalidArgumentError.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/error/CosServiceError.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/error/CosTransferPauseError.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/CosXmlRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/CosXmlResult.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/AbortMultiUploadRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/AbortMultiUploadResult.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/CompleteMultiUploadRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/CompleteMultiUploadResult.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/DeleteObjectRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/DeleteObjectResult.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectArrayBufferRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectArrayBufferResult.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectResult.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/HeadObjectRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/HeadObjectResult.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/InitMultipartUploadRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/InitMultipartUploadResult.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ListPartsRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ListPartsResult.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ObjectRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PresignedUrlRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PresignedUrlResult.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PutObjectRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PutObjectResult.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/TransferRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/UploadPartRequest.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/object/UploadPartResult.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/ImageInfo.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicObject.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicOperations.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicOriginalInfo.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/transfer/DownloadTask.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/transfer/TransferConfig.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/transfer/TransferTask.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/transfer/UploadTask.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/ets/util/CosErrorUtils.ets (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/module.json (92%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/resources/base/element/string.json (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/resources/en_US/element/string.json (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/main/resources/zh_CN/element/string.json (100%) rename oh_modules/.ohpm/{@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg= => @tencentcloud+cos@1.1.1}/oh_modules/@tencentcloud/cos/src/mock/mock-config.json5 (100%) create mode 120000 oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/foundation delete mode 100644 oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/BuildProfile.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/foundation110.har delete mode 120000 oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/foundation delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/Index.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/ResourceTable.txt delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/build-profile.json5 delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/consumer-rules.txt delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/hvigorfile.ts delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/obfuscation-rules.txt delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/obfuscation.txt delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/oh-package-lock.json5 delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/oh-package.json5 delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/CredentialCache.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudAuthentationCreator.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudCredential.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudSignature.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudSignatureBuilder.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudAuthenticationError.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudNetError.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudTaskError.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudUserCancelError.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/logger/LoggerOptions.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/logger/QCloudLogger.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HarmonyHttpClientImpl.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HarmonyProxy.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpConstants.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpProgress.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpRequest.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpResponse.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpResult.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/NetworkClient.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/NetworkProxy.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/QCloudHttpClient.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/QCloudHttpRequest.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/RequestBodySerializer.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/RequestFileBodyWrapper.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/ResponseBodyConverter.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/retry/RetryHandler.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/QCloudTaskManager.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/base/QCloudTask.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/base/QCloudTransferData.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/http/QCloudHTTPTask.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/http/QCloudRequestData.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/http/TaskHTTPExecuteFunc.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/queue/QCloudQueue.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/CryptoUtil.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/HttpUtils.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/StringUtils.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/XmlUtils.ets delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/module.json delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/resources/base/element/string.json delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/resources/en_US/element/string.json delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/resources/zh_CN/element/string.json delete mode 100644 oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/mock/mock-config.json5 diff --git a/AppScope/app.json5 b/AppScope/app.json5 index 00bf53f..0d3f046 100644 --- a/AppScope/app.json5 +++ b/AppScope/app.json5 @@ -2,8 +2,8 @@ "app": { "bundleName": "com.tencent.cloud.cos", "vendor": "example", - "versionCode": 1010100, - "versionName": "1.1.0", + "versionCode": 1010101, + "versionName": "1.1.1", "icon": "$media:app_icon", "label": "$string:app_name" } diff --git a/README.md b/README.md index 3349442..5299a0f 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ ``` bash "dependencies": { ... - "@tencentcloud/cos":"1.1.0" + "@tencentcloud/cos":"1.1.1" } ``` 2. SDK 需要网络权限,用于与 COS 服务器进行通信,请在应用模块下的 module.json5 中添加如下权限声明: diff --git a/cosSdk/BuildProfile.ets b/cosSdk/BuildProfile.ets index cab3453..b844baf 100644 --- a/cosSdk/BuildProfile.ets +++ b/cosSdk/BuildProfile.ets @@ -1,7 +1,7 @@ /** * Use these variables when you tailor your ArkTS code. They must be of the const type. */ -export const HAR_VERSION = '1.1.0'; +export const HAR_VERSION = '1.1.1'; export const BUILD_MODE_NAME = 'release'; export const DEBUG = false; export const TARGET_NAME = 'default'; diff --git a/cosSdk/CHANGELOG.md b/cosSdk/CHANGELOG.md index 34f1625..7db462b 100644 --- a/cosSdk/CHANGELOG.md +++ b/cosSdk/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.1.1 +- 进度回调增加频控 + ## 1.1.0 - 更换http网络库到rcp - http重定向默认不开启 diff --git a/cosSdk/README.md b/cosSdk/README.md index 3349442..5299a0f 100644 --- a/cosSdk/README.md +++ b/cosSdk/README.md @@ -16,7 +16,7 @@ ``` bash "dependencies": { ... - "@tencentcloud/cos":"1.1.0" + "@tencentcloud/cos":"1.1.1" } ``` 2. SDK 需要网络权限,用于与 COS 服务器进行通信,请在应用模块下的 module.json5 中添加如下权限声明: diff --git a/cosSdk/foundation110.har b/cosSdk/foundation110.har deleted file mode 100644 index 993a1b8250a199c5505428dbaef7f364682126a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20429 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 diff --git a/cosSdk/foundation111.har b/cosSdk/foundation111.har new file mode 100644 index 0000000000000000000000000000000000000000..ecbef7e213131d336edf693f32246b1c3fdcee9f GIT binary patch literal 20819 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.filePath, cosXmlRequest.fileOffset, cosXmlResult, - cosXmlRequest.onProgress); + this.cosXmlServiceConfig.progressGranularity, cosXmlRequest.onProgress); } else if (cosXmlRequest instanceof GetObjectArrayBufferRequest) { responseBodyConverter = new ResponseArrayBufferConverter(cosXmlResult); } else { @@ -196,7 +196,8 @@ export class CosXmlBaseService { cosXmlRequest.getQueries(), cosXmlRequest.isNeedMD5, cosXmlRequest.isSignedInURL, - this.cosXmlServiceConfig.requestConfiguration + this.cosXmlServiceConfig.requestConfiguration, + this.cosXmlServiceConfig.progressGranularity ); qcloudHttpRequest.noSignHeaderKeys = new Set(Array.from(cosXmlRequest.noSignHeaderKeys).concat(Array.from(this.cosXmlServiceConfig.noSignHeaderKeys))); diff --git a/cosSdk/src/main/ets/CosXmlServiceConfig.ets b/cosSdk/src/main/ets/CosXmlServiceConfig.ets index 5ebed49..e29e3a4 100644 --- a/cosSdk/src/main/ets/CosXmlServiceConfig.ets +++ b/cosSdk/src/main/ets/CosXmlServiceConfig.ets @@ -88,6 +88,12 @@ export class CosXmlServiceConfig { */ region: string|undefined; + /** + * 单次网络请求的进度回调的时间颗粒度,默认为200ms + * 主要用于进度回调的频控,防止频率过高导致的anr等问题 + */ + progressGranularity: number = 200; + constructor(region?: string) { this.region = region; } diff --git a/cosSdk/src/main/ets/converter/ResponseFileConverter.ets b/cosSdk/src/main/ets/converter/ResponseFileConverter.ets index 1eb5edb..27b28d0 100644 --- a/cosSdk/src/main/ets/converter/ResponseFileConverter.ets +++ b/cosSdk/src/main/ets/converter/ResponseFileConverter.ets @@ -1,4 +1,4 @@ -import { HttpHeader, HttpProgress, HttpRequest, HttpUtils } from '@tencentcloud/foundation'; +import { HttpHeader, HttpProgress, HttpRequest, HttpUtils, ProgressController } from '@tencentcloud/foundation'; import { CosXmlResult } from '../model/CosXmlResult'; import { CosResponseBodyConverter } from './CosResponseBodyConverter'; import fs from '@ohos.file.fs'; @@ -10,19 +10,19 @@ export class ResponseFileConverter extends CosResponseBodyConverter { private filePath: string; private fileOffset: number = 0; private cosXmlResult: CosXmlResult; - private onProgress?:Callback; + private progressController: ProgressController; private file?: fs.File; // 重试修改range前已经下载的长度 private lastTimeBytes: number = 0; // 已传输的数据长度 private bytesTotal: number = 0; - constructor(filePath: string, fileOffset: number, cosXmlResult: CosXmlResult, onProgress?:Callback) { + constructor(filePath: string, fileOffset: number, cosXmlResult: CosXmlResult, progressGranularity: number, onProgress?:Callback) { super(); this.filePath = filePath; this.fileOffset = fileOffset; this.cosXmlResult = cosXmlResult; - this.onProgress = onProgress; + this.progressController = new ProgressController(onProgress, progressGranularity); } // 拿到header 因为http状态码最后才能拿到 需要跟进content type判断文件写入等 @@ -61,8 +61,8 @@ export class ResponseFileConverter extends CosResponseBodyConverter { this.bytesTotal += fs.writeSync(this.file.fd, arrayBuffer, { offset: this.bytesTotal + this.fileOffset, }) - if (this.onProgress) { - this.onProgress(new HttpProgress(this.bytesTotal, this.contentLength+this.lastTimeBytes)); + if (this.progressController) { + this.progressController.updateProgress(this.bytesTotal, this.contentLength+this.lastTimeBytes); } } diff --git a/cosSdk/src/ohosTest/ets/test/transfer/Download.test.ets b/cosSdk/src/ohosTest/ets/test/transfer/Download.test.ets index e576d93..5ed654a 100644 --- a/cosSdk/src/ohosTest/ets/test/transfer/Download.test.ets +++ b/cosSdk/src/ohosTest/ets/test/transfer/Download.test.ets @@ -110,6 +110,45 @@ export default function downloadTest(cosXmlBaseService: CosXmlBaseService) { } downloadTask.start(); }) + + // it('big_522m', 0, async (done: Function) => { + // let context = TestUtils.getContext(); + // let filePath = context.filesDir + '/big_object'; + // let request = new GetObjectRequest(TestConst.PERSIST_BUCKET, TestConst.PERSIST_BUCKET_BIG_FILE_PATH, filePath); + // let config = new CosXmlServiceConfig(TestConst.PERSIST_BUCKET_REGION); + // config.readTimeout = 15000 * 1000; + // let credentialCallBack: CredentialCallBack|undefined; + // if(cosXmlBaseService){ + // credentialCallBack = cosXmlBaseService.credentialCallBack; + // } else { + // credentialCallBack = CosXmlBaseService.default().credentialCallBack; + // } + // let cosBaseService = new CosXmlBaseService(context, config, credentialCallBack); + // await TestUtils.requestAddCredential(request, TestUtils.getCosXmlBaseService(cosBaseService)); + // let downloadTask = TestUtils.getCosXmlBaseService(cosXmlBaseService).download(request); + // let progressCount = 0; + // downloadTask.onProgress = (progress: HttpProgress)=>{ + // Logger.info(`已下载:${progress.complete},总大小:${progress.target}`) + // progressCount++; + // } + // downloadTask.onResult = { + // onSuccess: async (request: GetObjectRequest, result: CosXmlDownloadTaskResult)=>{ + // Logger.info(`下载成功:`) + // Logger.info(`下载_progressCount:${progressCount}/`) + // Logger.info(result) + // expect(true).assertTrue(); + // done(); + // }, + // onFail: (request: GetObjectRequest, error: CosError)=>{ + // Logger.info(`下载失败:`) + // Logger.info(`下载_progressCount:${progressCount}/`) + // TestUtils.printError(error); + // expect().assertFail(); + // done(); + // } + // } + // downloadTask.start(); + // }) // it('big', 0, async (done: Function) => { // let context = TestUtils.getContext(); // let filePath = context.filesDir + '/522m.zip'; diff --git a/cosSdk/src/ohosTest/ets/test/transfer/Upload.test.ets b/cosSdk/src/ohosTest/ets/test/transfer/Upload.test.ets index 1c6c9f3..2a0e55a 100644 --- a/cosSdk/src/ohosTest/ets/test/transfer/Upload.test.ets +++ b/cosSdk/src/ohosTest/ets/test/transfer/Upload.test.ets @@ -229,19 +229,26 @@ export default function uploadTest(cosXmlBaseService: CosXmlBaseService) { let filePath = FileUtils.getFile(100 * 1024 * 1024,'bigUpload'); let putRequest = new PutObjectRequest(TestConst.PERSIST_BUCKET, `uploadTest/UT/bigUpload`, filePath); await TestUtils.requestAddCredential(putRequest, TestUtils.getCosXmlBaseService(cosXmlBaseService)); - let task: UploadTask = TestUtils.getCosXmlBaseService(cosXmlBaseService).upload(putRequest); + let task: UploadTask = TestUtils.getCosXmlBaseService(cosXmlBaseService).upload( + putRequest, + + ); + let progressCount = 0; task.onProgress = (progress: HttpProgress) => { Logger.info(`bigUpload_onProgress:${progress.complete}/${progress.target}`) + progressCount++; }; task.onResult = { onSuccess: (request, result) => { Logger.info(`bigUpload_success`) + Logger.info(`bigUpload_progressCount:${progressCount}/`) Logger.info(result) expect(true).assertTrue(); done(); }, onFail: (request, error) => { Logger.info(`bigUpload_fail`) + Logger.info(`bigUpload_progressCount:${progressCount}/`) Logger.info(error) expect().assertFail() done(); diff --git a/cosTransferPractice/cosSdk-1.1.0.har b/cosTransferPractice/cosSdk-1.1.0.har deleted file mode 100644 index 4b9ed8c6f6a2dc83b70278e36907f1f37e72e4b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68290 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 diff --git a/cosTransferPractice/cosSdk-1.1.1.har b/cosTransferPractice/cosSdk-1.1.1.har new file mode 100644 index 0000000000000000000000000000000000000000..9152808878f2d6c43dddb428a689d62f0bd76381 GIT binary patch literal 68843 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 literal 0 HcmV?d00001 diff --git a/cosTransferPractice/oh-package-lock.json5 b/cosTransferPractice/oh-package-lock.json5 index 86e72e9..8453f20 100644 --- a/cosTransferPractice/oh-package-lock.json5 +++ b/cosTransferPractice/oh-package-lock.json5 @@ -5,23 +5,24 @@ "lockfileVersion": 3, "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", "specifiers": { - "@tencentcloud/cos@cosSdk-1.1.0.har": "@tencentcloud/cos@cosSdk-1.1.0.har", - "@tencentcloud/foundation@../oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/foundation110.har": "@tencentcloud/foundation@../cosSdk/foundation110.har" + "@tencentcloud/cos@^1.1.1": "@tencentcloud/cos@1.1.1", + "@tencentcloud/foundation@../oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/foundation111.har": "@tencentcloud/foundation@../foundation" }, "packages": { - "@tencentcloud/cos@cosSdk-1.1.0.har": { + "@tencentcloud/cos@1.1.1": { "name": "@tencentcloud/cos", - "version": "1.1.0", - "resolved": "cosSdk-1.1.0.har", - "registryType": "local", + "version": "1.1.1", + "integrity": "sha512-DGZ3O74k24y7ajsdllHbBMiCyzDfA4LbrlXmBYzKWavUu4xLQEkzRHqg7HhSzQiiyfPtPMzOgTJ2HzucUQNkGg==", + "resolved": "https://ohpm.openharmony.cn/ohpm/@tencentcloud/cos/-/cos-1.1.1.har", + "registryType": "ohpm", "dependencies": { - "@tencentcloud/foundation": "file:./foundation110.har" + "@tencentcloud/foundation": "file:./foundation111.har" } }, - "@tencentcloud/foundation@../cosSdk/foundation110.har": { + "@tencentcloud/foundation@../foundation": { "name": "@tencentcloud/foundation", - "version": "1.1.0", - "resolved": "../cosSdk/foundation110.har", + "version": "1.1.1", + "resolved": "../foundation", "registryType": "local" } } diff --git a/cosTransferPractice/oh-package.json5 b/cosTransferPractice/oh-package.json5 index 416aecd..8a54ba3 100644 --- a/cosTransferPractice/oh-package.json5 +++ b/cosTransferPractice/oh-package.json5 @@ -7,8 +7,8 @@ "license": "", "dependencies": { // "@tencentcloud/cos": "file:../cosSdk" - "@tencentcloud/cos": "file:./cosSdk-1.1.0.har" -// "@tencentcloud/cos": "^1.1.0" +// "@tencentcloud/cos": "file:./cosSdk-1.1.1.har" + "@tencentcloud/cos": "^1.1.1" }, "devDependencies": {}, "dynamicDependencies": {} diff --git a/cosTransferPractice/src/main/ets/Const.ets b/cosTransferPractice/src/main/ets/Const.ets index 03d00d8..934ca0d 100644 --- a/cosTransferPractice/src/main/ets/Const.ets +++ b/cosTransferPractice/src/main/ets/Const.ets @@ -9,12 +9,12 @@ export enum CredentialType { export class Const { public static readonly CREDENTIAL_TYPE: CredentialType = CredentialType.STS;// 临时密钥STS和固定密钥CONST - public static readonly STS_CREDENTIAL_URL = "http://x.x.x.x:3000/sts"; + public static readonly STS_CREDENTIAL_URL = "http://*********:3000/sts"; public static readonly CONST_SECRET_ID = "XXXXXXXXXXXXXXXXXXXXXXX"; public static readonly CONST_SECRET_KEY = "XXXXXXXXXXXXXXXXXXXXXXX"; - public static readonly TEST_BUCKET_REGION = "ap-guangzhou"; - public static readonly TEST_BUCKET = "mobile-ut-1253960454"; + public static readonly TEST_BUCKET_REGION = "ap-nanjing"; + public static readonly TEST_BUCKET = "000garenwang-1253960454"; public static readonly TEST_UPLOAD_DIR = "uploadTest/"; - public static readonly TEST_DOWNLOAD_PATH = "do_not_remove/video.mp4"; + public static readonly TEST_DOWNLOAD_PATH = "test_video.mp4"; } \ No newline at end of file diff --git a/foundation/BuildProfile.ets b/foundation/BuildProfile.ets index cab3453..b844baf 100644 --- a/foundation/BuildProfile.ets +++ b/foundation/BuildProfile.ets @@ -1,7 +1,7 @@ /** * Use these variables when you tailor your ArkTS code. They must be of the const type. */ -export const HAR_VERSION = '1.1.0'; +export const HAR_VERSION = '1.1.1'; export const BUILD_MODE_NAME = 'release'; export const DEBUG = false; export const TARGET_NAME = 'default'; diff --git a/foundation/Index.ets b/foundation/Index.ets index cfdfb98..d3fcd03 100644 --- a/foundation/Index.ets +++ b/foundation/Index.ets @@ -7,7 +7,7 @@ export { QCloudCredential} from './src/main/ets/authentation/QCloudCredential' export { CredentialCache} from './src/main/ets/authentation/CredentialCache' export { QCloudSignatureBuilder, CredentialCallBack, SelfSignCallBack} from './src/main/ets/authentation/QCloudSignatureBuilder' export { HttpRequest } from './src/main/ets/net/HttpRequest' -export { HttpProgress } from './src/main/ets/net/HttpProgress' +export { HttpProgress, ProgressController } from './src/main/ets/net/HttpProgress' export { HttpResponse } from './src/main/ets/net/HttpResponse' export { ResponseBodyConverter } from './src/main/ets/net/ResponseBodyConverter' export { RequestBodySerializer, BaseRequestBodyWrapper } from './src/main/ets/net/RequestBodySerializer' diff --git a/foundation/oh-package.json5 b/foundation/oh-package.json5 index acaf30f..a6cd6f3 100644 --- a/foundation/oh-package.json5 +++ b/foundation/oh-package.json5 @@ -1,6 +1,6 @@ { "name": "@tencentcloud/foundation", - "version": "1.1.0", + "version": "1.1.1", "description": "Tencent cloud cos sdk basic library", "main": "Index.ets", "author": "Cos", diff --git a/foundation/src/main/ets/net/HttpProgress.ets b/foundation/src/main/ets/net/HttpProgress.ets index feb7ff4..0f99fb6 100644 --- a/foundation/src/main/ets/net/HttpProgress.ets +++ b/foundation/src/main/ets/net/HttpProgress.ets @@ -7,4 +7,36 @@ export class HttpProgress{ this.target = target; } +} + +/** + * 进度控制器,目前用于频控 + */ +export class ProgressController { + private lastUpdateTime = 0; + private timeGranularity: number | undefined; + private onProgress: Callback | undefined; + + // 时间颗粒度默认为200ms + constructor(onProgress: Callback | undefined, timeGranularity: number | undefined) { + this.onProgress = onProgress; + this.timeGranularity = timeGranularity; + } + + public updateProgress(complete: number, target: number) { + if(this.timeGranularity) { + const now = Date.now(); + const progress = (complete / target) * 100; + if (progress >= 100 || now - this.lastUpdateTime >= this.timeGranularity) { + this.lastUpdateTime = now; + if (this.onProgress) { + this.onProgress(new HttpProgress(complete, target)); + } + } + } else { + if (this.onProgress) { + this.onProgress(new HttpProgress(complete, target)); + } + } + } } \ No newline at end of file diff --git a/foundation/src/main/ets/net/HttpRequest.ets b/foundation/src/main/ets/net/HttpRequest.ets index 93ef0d0..f840b2d 100644 --- a/foundation/src/main/ets/net/HttpRequest.ets +++ b/foundation/src/main/ets/net/HttpRequest.ets @@ -29,11 +29,12 @@ export class HttpRequest { dnsOverHttps?: string; dnsServers?: string[]; requestConfiguration?: rcp.Configuration; + progressGranularity?: number; constructor(method: http.RequestMethod, protocol: string, host: string, port: number, path: string, requestBodySerializer: RequestBodySerializer | undefined, responseBodyConverter: ResponseBodyConverter, headers?: Map, queries?: Map, isNeedMD5?: boolean, - isSignedInURL?: boolean, requestConfiguration?: rcp.Configuration) { + isSignedInURL?: boolean, requestConfiguration?: rcp.Configuration, progressGranularity?: number) { this.method = method; this.protocol = protocol; this.host = host; @@ -47,7 +48,8 @@ export class HttpRequest { this.noSignQueryKeys = new Set(); this.isNeedMD5 = isNeedMD5 || false; this.isSignedInURL = isSignedInURL || false; - this.requestConfiguration = requestConfiguration + this.requestConfiguration = requestConfiguration; + this.progressGranularity = progressGranularity; } addHeader(key: string, value: string): void { diff --git a/foundation/src/main/ets/net/QCloudHttpRequest.ets b/foundation/src/main/ets/net/QCloudHttpRequest.ets index 4a74fc0..2eb810c 100644 --- a/foundation/src/main/ets/net/QCloudHttpRequest.ets +++ b/foundation/src/main/ets/net/QCloudHttpRequest.ets @@ -17,8 +17,8 @@ export class QCloudHttpRequest extends HttpRequest { constructor(method: http.RequestMethod, protocol: string, host: string, port: number, path: string, requestBodySerializer: RequestBodySerializer | undefined, responseBodyConverter: ResponseBodyConverter, headers?: Map, queries?: Map, isNeedMD5?: boolean, - isSignedInURL?: boolean, requestConfiguration?: rcp.Configuration) { + isSignedInURL?: boolean, requestConfiguration?: rcp.Configuration, progressGranularity?: number) { super(method, protocol, host, port, path, requestBodySerializer, responseBodyConverter, headers, queries, isNeedMD5, - isSignedInURL, requestConfiguration); + isSignedInURL, requestConfiguration, progressGranularity); } } \ No newline at end of file diff --git a/foundation/src/main/ets/task/QCloudTaskManager.ets b/foundation/src/main/ets/task/QCloudTaskManager.ets index bb300ca..0ee09f5 100644 --- a/foundation/src/main/ets/task/QCloudTaskManager.ets +++ b/foundation/src/main/ets/task/QCloudTaskManager.ets @@ -29,15 +29,15 @@ export class QCloudTaskManager{ this.requestQueue.customConcurrentCount = count; } - public addDownloadTask(task:QCloudHTTPTask){ + public addDownloadTask(task:QCloudTask){ this.downloadQueue.addTask(task); } - public addUploadTask(task:QCloudHTTPTask){ + public addUploadTask(task:QCloudTask){ this.uploadQueue.addTask(task); } - public addRequestTask(task:QCloudHTTPTask){ + public addRequestTask(task:QCloudTask){ this.requestQueue.addTask(task); } diff --git a/foundation/src/main/ets/task/http/QCloudHTTPTask.ets b/foundation/src/main/ets/task/http/QCloudHTTPTask.ets index c28c7a8..ac56eaa 100644 --- a/foundation/src/main/ets/task/http/QCloudHTTPTask.ets +++ b/foundation/src/main/ets/task/http/QCloudHTTPTask.ets @@ -68,6 +68,7 @@ export class QCloudHTTPTask extends QCloudTask { this.requestData.content = this.httpRequest.buildBody(); this.requestData.method = this.httpRequest.method; this.requestData.requestConfiguration = this.httpRequest.buildRequestConfiguration(); + this.requestData.progressGranularity = this.httpRequest.progressGranularity; this.requestData.taskId = this.taskId; return true; } diff --git a/foundation/src/main/ets/task/http/QCloudRequestData.ets b/foundation/src/main/ets/task/http/QCloudRequestData.ets index 19ca79e..3ca7fc6 100644 --- a/foundation/src/main/ets/task/http/QCloudRequestData.ets +++ b/foundation/src/main/ets/task/http/QCloudRequestData.ets @@ -9,4 +9,5 @@ export class QCloudRequestData extends Object{ public cookies?: rcp.RequestCookies public transferRange?: rcp.TransferRange | rcp.TransferRange[] public requestConfiguration?: rcp.Configuration + public progressGranularity?: number } \ No newline at end of file diff --git a/foundation/src/main/ets/task/http/TaskHTTPExecuteFunc.ets b/foundation/src/main/ets/task/http/TaskHTTPExecuteFunc.ets index 37ad657..ff66caa 100644 --- a/foundation/src/main/ets/task/http/TaskHTTPExecuteFunc.ets +++ b/foundation/src/main/ets/task/http/TaskHTTPExecuteFunc.ets @@ -3,7 +3,7 @@ import { QCloudTransferData } from '../base/QCloudTransferData'; import emitter from '@ohos.events.emitter'; import http from '@ohos.net.http'; import { QCloudRequestData } from './QCloudRequestData'; -import { HttpProgress } from '../../net/HttpProgress'; +import { HttpProgress, ProgressController } from '../../net/HttpProgress'; import { QCloudLogger } from '../../logger/QCloudLogger'; import { HashMap } from '@kit.ArkTS'; import { rcp } from '@kit.RemoteCommunicationKit'; @@ -63,20 +63,21 @@ export function TaskHTTPExecuteFunc(qcloudRequestData: QCloudRequestData) { } } + const progressController = new ProgressController((progress: HttpProgress) => { + SendEvent(new QCloudTransferData(QCloudEventType.dataProgress, progress, null)); + }, qcloudRequestData.progressGranularity); const customHttpEventsHandler: rcp.HttpEventsHandler = { onDataReceive: (incomingData: ArrayBuffer) => { SendEvent(new QCloudTransferData(QCloudEventType.dataReceive, incomingData, null)); }, onUploadProgress: (totalSize: number, transferredSize: number) => { if (qcloudRequestData.method == http.RequestMethod.PUT) { - SendEvent(new QCloudTransferData(QCloudEventType.dataProgress, new HttpProgress(transferredSize, totalSize), - null)); + progressController.updateProgress(transferredSize, totalSize); } }, onDownloadProgress: (totalSize: number, transferredSize: number) => { if (qcloudRequestData.method == http.RequestMethod.GET) { - SendEvent(new QCloudTransferData(QCloudEventType.dataProgress, new HttpProgress(transferredSize, totalSize), - null)); + progressController.updateProgress(transferredSize, totalSize); } }, onHeaderReceive: (headers: rcp.ResponseHeaders) => { diff --git a/oh-package.json5 b/oh-package.json5 index 29342ed..f9d2307 100644 --- a/oh-package.json5 +++ b/oh-package.json5 @@ -1,7 +1,7 @@ { "modelVersion": "5.0.0", "name": "tencentcloud_cos_sdk", - "version": "1.1.0", + "version": "1.1.1", "description": "Please describe the basic information.", "main": "", "author": "", diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/BuildProfile.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/BuildProfile.ets similarity index 93% rename from oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/BuildProfile.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/BuildProfile.ets index cab3453..b844baf 100644 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/BuildProfile.ets +++ b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/BuildProfile.ets @@ -1,7 +1,7 @@ /** * Use these variables when you tailor your ArkTS code. They must be of the const type. */ -export const HAR_VERSION = '1.1.0'; +export const HAR_VERSION = '1.1.1'; export const BUILD_MODE_NAME = 'release'; export const DEBUG = false; export const TARGET_NAME = 'default'; diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/CHANGELOG.md b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/CHANGELOG.md similarity index 73% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/CHANGELOG.md rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/CHANGELOG.md index 34f1625..7db462b 100644 --- a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/CHANGELOG.md +++ b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.1.1 +- 进度回调增加频控 + ## 1.1.0 - 更换http网络库到rcp - http重定向默认不开启 diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/Index.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/Index.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/Index.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/Index.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/LICENSE b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/LICENSE similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/LICENSE rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/LICENSE diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/README.md b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/README.md similarity index 99% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/README.md rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/README.md index 3349442..5299a0f 100644 --- a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/README.md +++ b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/README.md @@ -16,7 +16,7 @@ ``` bash "dependencies": { ... - "@tencentcloud/cos":"1.1.0" + "@tencentcloud/cos":"1.1.1" } ``` 2. SDK 需要网络权限,用于与 COS 服务器进行通信,请在应用模块下的 module.json5 中添加如下权限声明: diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/ResourceTable.txt b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/ResourceTable.txt similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/ResourceTable.txt rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/ResourceTable.txt diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/build-profile.json5 b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/build-profile.json5 similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/build-profile.json5 rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/build-profile.json5 diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/consumer-rules.txt b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/consumer-rules.txt similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/consumer-rules.txt rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/consumer-rules.txt diff --git a/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/foundation111.har b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/foundation111.har new file mode 100644 index 0000000000000000000000000000000000000000..ecbef7e213131d336edf693f32246b1c3fdcee9f GIT binary patch literal 20819 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.filePath, cosXmlRequest.fileOffset, cosXmlResult, - cosXmlRequest.onProgress); + this.cosXmlServiceConfig.progressGranularity, cosXmlRequest.onProgress); } else if (cosXmlRequest instanceof GetObjectArrayBufferRequest) { responseBodyConverter = new ResponseArrayBufferConverter(cosXmlResult); } else { @@ -196,7 +196,8 @@ export class CosXmlBaseService { cosXmlRequest.getQueries(), cosXmlRequest.isNeedMD5, cosXmlRequest.isSignedInURL, - this.cosXmlServiceConfig.requestConfiguration + this.cosXmlServiceConfig.requestConfiguration, + this.cosXmlServiceConfig.progressGranularity ); qcloudHttpRequest.noSignHeaderKeys = new Set(Array.from(cosXmlRequest.noSignHeaderKeys).concat(Array.from(this.cosXmlServiceConfig.noSignHeaderKeys))); diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/CosXmlServiceConfig.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/CosXmlServiceConfig.ets similarity index 93% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/CosXmlServiceConfig.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/CosXmlServiceConfig.ets index 5ebed49..e29e3a4 100644 --- a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/CosXmlServiceConfig.ets +++ b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/CosXmlServiceConfig.ets @@ -88,6 +88,12 @@ export class CosXmlServiceConfig { */ region: string|undefined; + /** + * 单次网络请求的进度回调的时间颗粒度,默认为200ms + * 主要用于进度回调的频控,防止频率过高导致的anr等问题 + */ + progressGranularity: number = 200; + constructor(region?: string) { this.region = region; } diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/common/Constants.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/common/Constants.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/common/Constants.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/common/Constants.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/common/Range.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/common/Range.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/common/Range.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/common/Range.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/converter/CosResponseBodyConverter.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/converter/CosResponseBodyConverter.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/converter/CosResponseBodyConverter.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/converter/CosResponseBodyConverter.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseArrayBufferConverter.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseArrayBufferConverter.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseArrayBufferConverter.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseArrayBufferConverter.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseCosXmlConverter.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseCosXmlConverter.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseCosXmlConverter.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseCosXmlConverter.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseFileConverter.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseFileConverter.ets similarity index 88% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseFileConverter.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseFileConverter.ets index 1eb5edb..27b28d0 100644 --- a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseFileConverter.ets +++ b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/converter/ResponseFileConverter.ets @@ -1,4 +1,4 @@ -import { HttpHeader, HttpProgress, HttpRequest, HttpUtils } from '@tencentcloud/foundation'; +import { HttpHeader, HttpProgress, HttpRequest, HttpUtils, ProgressController } from '@tencentcloud/foundation'; import { CosXmlResult } from '../model/CosXmlResult'; import { CosResponseBodyConverter } from './CosResponseBodyConverter'; import fs from '@ohos.file.fs'; @@ -10,19 +10,19 @@ export class ResponseFileConverter extends CosResponseBodyConverter { private filePath: string; private fileOffset: number = 0; private cosXmlResult: CosXmlResult; - private onProgress?:Callback; + private progressController: ProgressController; private file?: fs.File; // 重试修改range前已经下载的长度 private lastTimeBytes: number = 0; // 已传输的数据长度 private bytesTotal: number = 0; - constructor(filePath: string, fileOffset: number, cosXmlResult: CosXmlResult, onProgress?:Callback) { + constructor(filePath: string, fileOffset: number, cosXmlResult: CosXmlResult, progressGranularity: number, onProgress?:Callback) { super(); this.filePath = filePath; this.fileOffset = fileOffset; this.cosXmlResult = cosXmlResult; - this.onProgress = onProgress; + this.progressController = new ProgressController(onProgress, progressGranularity); } // 拿到header 因为http状态码最后才能拿到 需要跟进content type判断文件写入等 @@ -61,8 +61,8 @@ export class ResponseFileConverter extends CosResponseBodyConverter { this.bytesTotal += fs.writeSync(this.file.fd, arrayBuffer, { offset: this.bytesTotal + this.fileOffset, }) - if (this.onProgress) { - this.onProgress(new HttpProgress(this.bytesTotal, this.contentLength+this.lastTimeBytes)); + if (this.progressController) { + this.progressController.updateProgress(this.bytesTotal, this.contentLength+this.lastTimeBytes); } } diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/error/CosClientError.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/error/CosClientError.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/error/CosClientError.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/error/CosClientError.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/error/CosError.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/error/CosError.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/error/CosError.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/error/CosError.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/error/CosErrorCode.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/error/CosErrorCode.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/error/CosErrorCode.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/error/CosErrorCode.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/error/CosInvalidArgumentError.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/error/CosInvalidArgumentError.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/error/CosInvalidArgumentError.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/error/CosInvalidArgumentError.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/error/CosServiceError.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/error/CosServiceError.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/error/CosServiceError.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/error/CosServiceError.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/error/CosTransferPauseError.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/error/CosTransferPauseError.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/error/CosTransferPauseError.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/error/CosTransferPauseError.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/CosXmlRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/CosXmlRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/CosXmlRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/CosXmlRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/CosXmlResult.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/CosXmlResult.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/CosXmlResult.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/CosXmlResult.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/AbortMultiUploadRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/AbortMultiUploadRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/AbortMultiUploadRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/AbortMultiUploadRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/AbortMultiUploadResult.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/AbortMultiUploadResult.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/AbortMultiUploadResult.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/AbortMultiUploadResult.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/CompleteMultiUploadRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/CompleteMultiUploadRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/CompleteMultiUploadRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/CompleteMultiUploadRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/CompleteMultiUploadResult.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/CompleteMultiUploadResult.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/CompleteMultiUploadResult.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/CompleteMultiUploadResult.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/DeleteObjectRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/DeleteObjectRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/DeleteObjectRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/DeleteObjectRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/DeleteObjectResult.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/DeleteObjectResult.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/DeleteObjectResult.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/DeleteObjectResult.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectArrayBufferRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectArrayBufferRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectArrayBufferRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectArrayBufferRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectArrayBufferResult.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectArrayBufferResult.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectArrayBufferResult.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectArrayBufferResult.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectResult.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectResult.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectResult.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/GetObjectResult.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/HeadObjectRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/HeadObjectRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/HeadObjectRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/HeadObjectRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/HeadObjectResult.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/HeadObjectResult.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/HeadObjectResult.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/HeadObjectResult.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/InitMultipartUploadRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/InitMultipartUploadRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/InitMultipartUploadRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/InitMultipartUploadRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/InitMultipartUploadResult.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/InitMultipartUploadResult.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/InitMultipartUploadResult.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/InitMultipartUploadResult.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ListPartsRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ListPartsRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ListPartsRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ListPartsRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ListPartsResult.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ListPartsResult.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ListPartsResult.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ListPartsResult.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ObjectRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ObjectRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ObjectRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/ObjectRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PresignedUrlRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PresignedUrlRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PresignedUrlRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PresignedUrlRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PresignedUrlResult.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PresignedUrlResult.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PresignedUrlResult.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PresignedUrlResult.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PutObjectRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PutObjectRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PutObjectRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PutObjectRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PutObjectResult.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PutObjectResult.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PutObjectResult.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/PutObjectResult.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/TransferRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/TransferRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/TransferRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/TransferRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/UploadPartRequest.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/UploadPartRequest.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/UploadPartRequest.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/UploadPartRequest.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/UploadPartResult.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/UploadPartResult.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/object/UploadPartResult.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/object/UploadPartResult.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/ImageInfo.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/ImageInfo.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/ImageInfo.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/ImageInfo.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicObject.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicObject.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicObject.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicObject.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicOperations.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicOperations.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicOperations.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicOperations.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicOriginalInfo.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicOriginalInfo.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicOriginalInfo.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/model/pic/PicOriginalInfo.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/transfer/DownloadTask.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/transfer/DownloadTask.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/transfer/DownloadTask.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/transfer/DownloadTask.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/transfer/TransferConfig.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/transfer/TransferConfig.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/transfer/TransferConfig.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/transfer/TransferConfig.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/transfer/TransferTask.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/transfer/TransferTask.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/transfer/TransferTask.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/transfer/TransferTask.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/transfer/UploadTask.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/transfer/UploadTask.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/transfer/UploadTask.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/transfer/UploadTask.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/util/CosErrorUtils.ets b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/util/CosErrorUtils.ets similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/ets/util/CosErrorUtils.ets rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/ets/util/CosErrorUtils.ets diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/module.json b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/module.json similarity index 92% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/module.json rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/module.json index 7dc524c..9d6fe7b 100644 --- a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/module.json +++ b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/module.json @@ -1,8 +1,8 @@ { "app": { "bundleName": "com.tencent.cloud.cos", - "versionCode": 1010100, - "versionName": "1.1.0", + "versionCode": 1010101, + "versionName": "1.1.1", "minAPIVersion": 50000012, "targetAPIVersion": 50000012, "apiReleaseType": "Release", diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/resources/base/element/string.json b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/resources/base/element/string.json similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/resources/base/element/string.json rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/resources/base/element/string.json diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/resources/en_US/element/string.json b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/resources/en_US/element/string.json similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/resources/en_US/element/string.json rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/resources/en_US/element/string.json diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/resources/zh_CN/element/string.json b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/resources/zh_CN/element/string.json similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/main/resources/zh_CN/element/string.json rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/main/resources/zh_CN/element/string.json diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/mock/mock-config.json5 b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/mock/mock-config.json5 similarity index 100% rename from oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/src/mock/mock-config.json5 rename to oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos/src/mock/mock-config.json5 diff --git a/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/foundation b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/foundation new file mode 120000 index 0000000..38b469e --- /dev/null +++ b/oh_modules/.ohpm/@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/foundation @@ -0,0 +1 @@ +../../../../../foundation \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/BuildProfile.ets b/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/BuildProfile.ets deleted file mode 100644 index cab3453..0000000 --- a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/BuildProfile.ets +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Use these variables when you tailor your ArkTS code. They must be of the const type. - */ -export const HAR_VERSION = '1.1.0'; -export const BUILD_MODE_NAME = 'release'; -export const DEBUG = false; -export const TARGET_NAME = 'default'; - -/** - * BuildProfile Class is used only for compatibility purposes. - */ -export default class BuildProfile { - static readonly HAR_VERSION = HAR_VERSION; - static readonly BUILD_MODE_NAME = BUILD_MODE_NAME; - static readonly DEBUG = DEBUG; - static readonly TARGET_NAME = TARGET_NAME; -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/foundation110.har b/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/cos/foundation110.har deleted file mode 100644 index 993a1b8250a199c5505428dbaef7f364682126a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20429 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 diff --git a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/foundation b/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/foundation deleted file mode 120000 index 6d85764..0000000 --- a/oh_modules/.ohpm/@tencentcloud+cos@yl4bdbzq7tz3mcdptfdy5sccjw8+yruuj7kq+neywlg=/oh_modules/@tencentcloud/foundation +++ /dev/null @@ -1 +0,0 @@ -../../../@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/Index.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/Index.ets deleted file mode 100644 index cfdfb98..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/Index.ets +++ /dev/null @@ -1,27 +0,0 @@ -export { QCloudTask, QCloudPriority, QCloudEventType } from './src/main/ets/task/base/QCloudTask'; -export { QCloudHTTPTask } from './src/main/ets/task/http/QCloudHTTPTask'; -export { QCloudTaskManager } from './src/main/ets/task/QCloudTaskManager'; -export { QCloudHttpRequest } from './src/main/ets/net/QCloudHttpRequest' -export { QCloudLogger } from './src/main/ets/logger/QCloudLogger' -export { QCloudCredential} from './src/main/ets/authentation/QCloudCredential' -export { CredentialCache} from './src/main/ets/authentation/CredentialCache' -export { QCloudSignatureBuilder, CredentialCallBack, SelfSignCallBack} from './src/main/ets/authentation/QCloudSignatureBuilder' -export { HttpRequest } from './src/main/ets/net/HttpRequest' -export { HttpProgress } from './src/main/ets/net/HttpProgress' -export { HttpResponse } from './src/main/ets/net/HttpResponse' -export { ResponseBodyConverter } from './src/main/ets/net/ResponseBodyConverter' -export { RequestBodySerializer, BaseRequestBodyWrapper } from './src/main/ets/net/RequestBodySerializer' -export { RequestFileBodyWrapper } from './src/main/ets/net/RequestFileBodyWrapper' -export { HttpHeader, ContentType } from './src/main/ets/net/HttpConstants' -export { HttpUtils } from './src/main/ets/util/HttpUtils' -export { XmlUtils } from './src/main/ets/util/XmlUtils' -export { CryptoUtil } from './src/main/ets/util/CryptoUtil' -export { StringUtils } from './src/main/ets/util/StringUtils' -export { RetryHandler } from './src/main/ets/retry/RetryHandler' -export { QCloudAuthenticationError } from './src/main/ets/error/QCloudAuthenticationError' -export { QCloudUserCancelError } from './src/main/ets/error/QCloudUserCancelError' -export { QCloudNetError } from './src/main/ets/error/QCloudNetError' -export { QCloudTaskError } from './src/main/ets/error/QCloudTaskError' -export { QCloudTransferData } from './src/main/ets/task/base/QCloudTransferData' -export { TaskHTTPExecuteFunc } from './src/main/ets/task/http/TaskHTTPExecuteFunc' -export { LoggerOptions } from './src/main/ets/logger//LoggerOptions' diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/ResourceTable.txt b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/ResourceTable.txt deleted file mode 100644 index 95b3741..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/ResourceTable.txt +++ /dev/null @@ -1 +0,0 @@ -string page_show 0x03000000 \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/build-profile.json5 b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/build-profile.json5 deleted file mode 100644 index e6773f9..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/build-profile.json5 +++ /dev/null @@ -1,31 +0,0 @@ -{ - "apiType": "stageMode", - "buildOption": { - }, - "buildOptionSet": [ - { - "name": "release", - "arkOptions": { - "obfuscation": { - "ruleOptions": { - "enable": false, - "files": [ - "./obfuscation-rules.txt" - ] - }, - "consumerFiles": [ - "./consumer-rules.txt" - ] - } - }, - }, - ], - "targets": [ - { - "name": "default" - }, - { - "name": "ohosTest" - } - ] -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/consumer-rules.txt b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/consumer-rules.txt deleted file mode 100644 index e69de29..0000000 diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/hvigorfile.ts b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/hvigorfile.ts deleted file mode 100644 index 4218707..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/hvigorfile.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { harTasks } from '@ohos/hvigor-ohos-plugin'; - -export default { - system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ - plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/obfuscation-rules.txt b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/obfuscation-rules.txt deleted file mode 100644 index 985b2ae..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/obfuscation-rules.txt +++ /dev/null @@ -1,18 +0,0 @@ -# Define project specific obfuscation rules here. -# You can include the obfuscation configuration files in the current module's build-profile.json5. -# -# For more details, see -# https://gitee.com/openharmony/arkcompiler_ets_frontend/blob/master/arkguard/README.md - -# Obfuscation options: -# -disable-obfuscation: disable all obfuscations -# -enable-property-obfuscation: obfuscate the property names -# -enable-toplevel-obfuscation: obfuscate the names in the global scope -# -compact: remove unnecessary blank spaces and all line feeds -# -remove-log: remove all console.* statements -# -print-namecache: print the name cache that contains the mapping from the old names to new names -# -apply-namecache: reuse the given cache file - -# Keep options: -# -keep-property-name: specifies property names that you want to keep -# -keep-global-name: specifies names that you want to keep in the global scope \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/obfuscation.txt b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/obfuscation.txt deleted file mode 100644 index e69de29..0000000 diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/oh-package-lock.json5 b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/oh-package-lock.json5 deleted file mode 100644 index 22f9d34..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/oh-package-lock.json5 +++ /dev/null @@ -1,9 +0,0 @@ -{ - "meta": { - "stableOrder": true - }, - "lockfileVersion": 3, - "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", - "specifiers": {}, - "packages": {} -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/oh-package.json5 b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/oh-package.json5 deleted file mode 100644 index 9210c49..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/oh-package.json5 +++ /dev/null @@ -1 +0,0 @@ -{"name":"@tencentcloud/foundation","version":"1.1.0","description":"Tencent cloud cos sdk basic library","main":"Index.ets","author":"Cos","license":"Apache-2.0","devDependencies":{},"dynamicDependencies":{},"metadata":{"sourceRoots":["./src/main"],"debug":false},"compatibleSdkVersion":12,"compatibleSdkType":"HarmonyOS","obfuscated":false} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/CredentialCache.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/CredentialCache.ets deleted file mode 100644 index 059f6c1..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/CredentialCache.ets +++ /dev/null @@ -1,29 +0,0 @@ -import { QCloudCredential } from './QCloudCredential'; - -export class CredentialCache { - - credential:QCloudCredential | null = null; - - private static instance: CredentialCache | undefined; - public static singleCache(): CredentialCache { - if (!CredentialCache.instance) { - CredentialCache.instance = new CredentialCache(); - } - return CredentialCache.instance; - } - - clearCredential(){ - CredentialCache.singleCache().credential = null; - } - - cacheCredential(credential:QCloudCredential){ - CredentialCache.singleCache().credential = credential; - } - - getCredential():QCloudCredential|null{ - if (CredentialCache.singleCache().credential?.valid()) { - return CredentialCache.singleCache().credential; - } - return null; - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudAuthentationCreator.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudAuthentationCreator.ets deleted file mode 100644 index 11c6079..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudAuthentationCreator.ets +++ /dev/null @@ -1,172 +0,0 @@ -import { QCloudCredential } from './QCloudCredential'; -import { ArrayList} from '@kit.ArkTS'; -import { CryptoUtil } from '../util/CryptoUtil'; -import { QCloudSignature } from './QCloudSignature'; -import { QCloudHttpRequest } from '../net/QCloudHttpRequest'; -import { http } from '@kit.NetworkKit'; - -function camSafeUrlEncode(str:string) { - return encodeURIComponent(str) - .replace(/!/g, '%21') - .replace(/'/g, '%27') - .replace(/\(/g, '%28') - .replace(/\)/g, '%29') - .replace(/\*/g, '%2A'); -} - -function getSignParams(headers:Map,noSign:Set,isHeader:boolean):Map { - let tempHeaders = new Map(); - let lowerCaseNoSign = new Set(Array.from(noSign, value => value.toLowerCase())); - for (const item of headers.keys()) { - let key = item.toLowerCase(); - if (isHeader){ - if (!lowerCaseNoSign.has(key) && !key.includes('x-cos-')) { - tempHeaders.set(item,headers.get(item)!); - } - }else{ - if (!lowerCaseNoSign.has(key)) { - tempHeaders.set(item,headers.get(item)!); - } - } - } - return tempHeaders; -}; - -function getObjectKeys(obj: Map): string[] { - let list:string[] = []; - for (let key of obj.keys()) { - list.push(camSafeUrlEncode(key).toLowerCase()); - } - - list.sort((a:string, b:string) => { - let aV = a.toLowerCase(); - let bV = b.toLowerCase(); - return aV === bV ? 0 : aV > bV ? 1 : -1; - }); - - return list; -} - -function obj2str(obj: Map, lowerCaseKey: boolean): string { - let val: string; - let list: string[] = []; - for (const key of obj.keys()) { - val = obj.get(key) === undefined || obj.get(key) === null ? '' : '' + obj.get(key); - let tkey = lowerCaseKey ? camSafeUrlEncode(key).toLowerCase() : camSafeUrlEncode(key); - val = camSafeUrlEncode(val) || ''; - list.push(tkey + '=' + val); - } - list.sort((a:string, b:string) => { - let aV = a.toLowerCase(); - let bV = b.toLowerCase(); - return aV === bV ? 0 : aV > bV ? 1 : -1; - }); - return list.join('&'); -} - -export class QCloudAuthentationCreator{ - - private credential:QCloudCredential; - - public tokenName:string = "x-cos-security-token"; - - excloudSignedList?:ArrayList; - - constructor(credential:QCloudCredential) { - this.credential = credential; - } - - getCredential(){ - return this.credential; - } - - setTokenName(tokenName:string){ - this.tokenName = tokenName; - } - - async buildSignature(httpRequest:QCloudHttpRequest): Promise { - - if (!this.credential || !this.credential.secretID || !this.credential.secretKey) { - return new QCloudSignature(); - } - if (this.credential.token) { - if (httpRequest.isSignedInURL) { - httpRequest.addQuery(this.tokenName,this.credential.token); - }else{ - httpRequest.addHeader(this.tokenName,this.credential.token); - } - } - const SecretId = this.credential.secretID; - const SecretKey = this.credential.secretKey; - const method = httpRequest?.method.toLowerCase(); - const queryParams:Map = httpRequest?.queries || new Map(); - const headerParams:Map = httpRequest?.headers || new Map(); - - - let now = new Date().getTime()/1000; - if (this.credential.startDate) { - now = this.credential.startDate.getTime()/1000; - } - - let exp = now + 1800; - - if (this.credential.expirationDate) { - exp = this.credential.expirationDate.getTime()/1000; - } - - const qSignAlgorithm = 'sha1'; - const qAk = SecretId; - const qSignTime = Math.floor(now) + ';' + Math.floor(exp); - const qKeyTime = Math.floor(now) + ';' + Math.floor(exp); - - let headers = getSignParams(headerParams!,httpRequest.noSignHeaderKeys,true); - let queries = getSignParams(queryParams!,httpRequest.noSignQueryKeys,false); - - if (this.credential.token ) { - if (httpRequest.isSignedInURL) { - queries.set(this.tokenName,this.credential.token); - }else{ - headers.set(this.tokenName,this.credential.token); - } - } - - const qHeaderList = getObjectKeys(headers).join(';').toLowerCase(); - const qUrlParamList = getObjectKeys(queries).join(';').toLowerCase(); - - // 签名算法说明文档:https://www.qcloud.com/document/product/436/7778 - // 步骤一:计算 SignKey - const signKey = await CryptoUtil.qcloudHmacSha1(qKeyTime, SecretKey); - - let path = httpRequest.path; - if (path.length > 0 && path.substring(0,1) != '/') { - path = '/' + path; - } - if (path.includes("?")) { - path = path.split("?")[0] - } - path = decodeURI(path); - // 步骤二:构成 FormatString - const formatString = [method, path, obj2str(queries, true), obj2str(headers, true), ''].join('\n'); - - // 步骤三:计算 StringToSign - const stringToSign = ['sha1', qSignTime, await CryptoUtil.qlcoudSha1(formatString), ''].join('\n'); - - // 步骤四:计算 Signature - const qSignature = await CryptoUtil.qcloudHmacSha1(stringToSign, signKey); - - // 步骤五:构造 Authorization - const authorization = [ - 'q-sign-algorithm=' + qSignAlgorithm, - 'q-ak=' + qAk, - 'q-sign-time=' + qSignTime, - 'q-key-time=' + qKeyTime, - 'q-header-list=' + qHeaderList, - 'q-url-param-list=' + qUrlParamList, - 'q-signature=' + qSignature, - ].join('&'); - - let signature = new QCloudSignature(authorization,this.credential.token); - signature.tokenName = this.tokenName; - return signature; - } -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudCredential.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudCredential.ets deleted file mode 100644 index 6e67c1d..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudCredential.ets +++ /dev/null @@ -1,43 +0,0 @@ - -export class QCloudCredential { - - /** - * 开发者拥有的项目身份识别 ID,用以身份认证 - */ - secretID?:string; - - /** - * 开发者拥有的项目身份密钥。可以为永久密钥,也可以是临时密钥(参考CAM系统)。 - */ - secretKey?:string; - - /** - * 签名有效期的起始时间。默认是设备的本地时间,如果传入起始时间,那么将以起始时间去计算签名。 - */ - startDate?:Date; - - /** - * 签名有效期截止的时间。没有设置的话,默认是起始时间加30分钟。 - */ - expirationDate?:Date; - - /** - * 当您使用了CAM系统获取临时密钥的时候,请设置改值,代表回话的ID。 - */ - token?:string; - - public valid():boolean{ - - if (!this.expirationDate) { - return true; - } - - let date = new Date() - - // 提前60刷新 - if (date.getTime() >= this.expirationDate.getTime() - (60 * 1000)) { - return false; - } - return true; - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudSignature.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudSignature.ets deleted file mode 100644 index 8f78dab..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudSignature.ets +++ /dev/null @@ -1,22 +0,0 @@ -/** - 访问腾讯云的服务需要对请求进行签名,以确定访问的用户身份,同时也保障访问的安全性。该类为腾讯云签名的抽象类。他代表了一个用于访问腾讯云服务的签名信息。 - 需要您注意的是,签名信息是有有效期的。而您在创建签名信息的时候,也请您赋值相应的有效期。 - 这个有效期在您进行签名的时候已经指定了,请确保此处的有效期和您进行签名的时候保持一致。否则将会产生不能访问腾讯云服务的问题。 - */ - -export class QCloudSignature{ - - - token?:string; - - tokenName?:string; - /** - 签名字符串,经过签名算法计算之后的字符串。 - */ - authorization?:string; - - constructor(authorization?:string,token?:string) { - this.authorization = authorization; - this.token = token; - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudSignatureBuilder.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudSignatureBuilder.ets deleted file mode 100644 index caf54b9..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/authentation/QCloudSignatureBuilder.ets +++ /dev/null @@ -1,46 +0,0 @@ -import { QCloudAuthenticationError } from '../error/QCloudAuthenticationError'; -import { QCloudLogger } from '../logger/QCloudLogger'; -import { HttpRequest } from '../net/HttpRequest'; -import { QCloudHttpRequest } from '../net/QCloudHttpRequest'; -import { CredentialCache } from './CredentialCache'; -import { QCloudAuthentationCreator } from './QCloudAuthentationCreator'; -import { QCloudCredential } from './QCloudCredential'; -import { QCloudSignature } from './QCloudSignature'; - -export type SelfSignCallBack = (reqeust:HttpRequest) => Promise; - -export type CredentialCallBack = (reqeust:HttpRequest) => Promise; - -export class QCloudSignatureBuilder{ - public static async signatureBuild(request:QCloudHttpRequest):Promise{ - return new Promise( async (resolve,reject)=>{ - let credential:QCloudCredential|null = null; - // 凭证获取优先级:常量凭证>缓存凭证>回调获取 - if (request.credential){ - credential = request.credential; - }else if (CredentialCache.singleCache().getCredential() != null && CredentialCache.singleCache().getCredential() != undefined){ - credential = CredentialCache.singleCache().getCredential()!; - }else if(request.credentialCallBack){ - QCloudLogger.log("Credential_buildRequestData" + ":" + "getNewCredentialCallBack") - try { - setTimeout(()=>{reject(new QCloudAuthenticationError(Error("timeout getting temporary key")))}, 20 * 1000); - credential = await request.credentialCallBack(request); - CredentialCache.singleCache().cacheCredential(credential) - } catch (e) { - reject(new QCloudAuthenticationError(e)) - } - } - if(credential){ - try { - let creator = new QCloudAuthentationCreator(credential); - let signature = await creator.buildSignature(request) - resolve(signature); - } catch (e) { - reject(new QCloudAuthenticationError(e)) - } - } else { - resolve(null); - } - }) - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudAuthenticationError.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudAuthenticationError.ets deleted file mode 100644 index 8c29e77..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudAuthenticationError.ets +++ /dev/null @@ -1,10 +0,0 @@ -/** - * 凭证验证error - */ -export class QCloudAuthenticationError extends Error { - public error: object; - constructor(error: object) { - super(); - this.error = error; - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudNetError.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudNetError.ets deleted file mode 100644 index aaca997..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudNetError.ets +++ /dev/null @@ -1,10 +0,0 @@ -/** - * 网络error - */ -export class QCloudNetError extends Error { - public netError: object; - constructor(netError: object) { - super(); - this.netError = netError; - } -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudTaskError.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudTaskError.ets deleted file mode 100644 index a4789e7..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudTaskError.ets +++ /dev/null @@ -1,10 +0,0 @@ -/** - * 任务error - */ -export class QCloudTaskError extends Error { - public taskError: object; - constructor(taskError: object) { - super(); - this.taskError = taskError; - } -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudUserCancelError.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudUserCancelError.ets deleted file mode 100644 index 001cc8b..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/error/QCloudUserCancelError.ets +++ /dev/null @@ -1,8 +0,0 @@ -/** - * 用户取消error - */ -export class QCloudUserCancelError extends Error { - constructor() { - super("user cancel"); - } -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/logger/LoggerOptions.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/logger/LoggerOptions.ets deleted file mode 100644 index 4d73d79..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/logger/LoggerOptions.ets +++ /dev/null @@ -1,8 +0,0 @@ -export class LoggerOptions { - tag?: string - domain?: number - close?: boolean - isHilog?: boolean - showLogLocation?: boolean - logSize?: number -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/logger/QCloudLogger.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/logger/QCloudLogger.ets deleted file mode 100644 index 60d0097..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/logger/QCloudLogger.ets +++ /dev/null @@ -1,209 +0,0 @@ -import hilog from '@ohos.hilog' -import { LoggerOptions } from './LoggerOptions' - -export class QCloudLogger { - private static mTag?: string = "QCloudLog" - private static mDomain?: number = 0x0369 //日志对应的领域标识,范围是0x0~0xFFFF - private static mHilog?: boolean = true //默认是用hilog进行打印 - private static mShowLogLocation?: boolean = false //展示点击的位置 - private static mLogSize = 1024 //打印的最大长度,默认是1024 - private static mClose?: boolean = true - - static setClose(close: boolean) { - QCloudLogger.mClose = close - } - - /* - * 初始化tag、domain等属性 - * */ - static init(options: LoggerOptions) { - const tag: string | undefined = options.tag //日志输出Tag - const domain: number | undefined = options.domain //日志对应的领域标识,范围是0x0~0xFFFF - const close: boolean | undefined = options.close //是否关闭日志 - const isHilog: boolean | undefined = options.isHilog //是否是hilog打印 - const showLogLocation: boolean | undefined = options.showLogLocation //是否展示日志位置 - const logSize: number | undefined = options.logSize //日志输出大小 - if (tag != undefined) { - QCloudLogger.mTag = tag - } - if (domain != undefined) { - QCloudLogger.mDomain = domain - } - if (close != undefined) { - QCloudLogger.mClose = close - } - if (isHilog != undefined) { - QCloudLogger.mHilog = isHilog - } - if (showLogLocation != undefined) { - QCloudLogger.mShowLogLocation = showLogLocation - } - if (logSize != undefined) { - QCloudLogger.mLogSize = logSize - } - - } - - //需要先调用isLoggable确认某个domain、tag和日志级别是否被禁止打印日志 - static isLoggable(level: hilog.LogLevel): boolean { - return hilog.isLoggable(QCloudLogger.mDomain, QCloudLogger.mTag, level) - } - - /* -* debug日志 -* */ - static debug(message: string | object, tag?: string) { - QCloudLogger.logLevel(hilog.LogLevel.DEBUG, tag, message) - } - - /* -* info日志 -* */ - static info(message: string | object, tag?: string) { - QCloudLogger.logLevel(hilog.LogLevel.INFO, tag, message) - } - - /* -* error日志,不带标签 -* */ - static error(message: string | object, tag?: string) { - QCloudLogger.logLevel(hilog.LogLevel.ERROR, tag, message) - } - - - /* -* warn日志 -* */ - static warn(message: string | object, tag?: string) { - QCloudLogger.logLevel(hilog.LogLevel.WARN, tag, message) - } - - /* -* fatal日志 -* */ - static fatal(message: string, tag?: string) { - QCloudLogger.logLevel(hilog.LogLevel.FATAL, tag, message) - } - - /* -* console形式打印log日志,只支持console -* */ - static log(message: string | object, tag?: string | undefined) { - QCloudLogger.logLevel(hilog.LogLevel.INFO, tag, message) - } - - /* - *统一输出日志 - * */ - private static logLevel(level: hilog.LogLevel, tag?: string, message: string | object = "") { - //如果关闭状态,则不打印日志 - if (QCloudLogger.mClose) { - return - } - - //未传递时 - if (tag == undefined) { - tag = QCloudLogger.mTag - } - - const content = QCloudLogger.getMessage(level, tag, message) //最终的内容展示 - - const len = content.length / QCloudLogger.mLogSize - for (let i = 0; i < len; i++) { - let con = content.substring(i * QCloudLogger.mLogSize, (i + 1) * QCloudLogger.mLogSize) - if (i != 0) { - con = "|" + con - } - //打印日志 - if (QCloudLogger.mHilog) { - //使用hilog - switch (level) { - case hilog.LogLevel.INFO: //info - hilog.info(QCloudLogger.mDomain, tag, con) - break - case hilog.LogLevel.WARN: //WARN - hilog.warn(QCloudLogger.mDomain, tag, con) - break - case hilog.LogLevel.DEBUG: //DEBUG - hilog.debug(QCloudLogger.mDomain, tag, con) - break - case hilog.LogLevel.ERROR: //ERROR - hilog.error(QCloudLogger.mDomain, tag, con) - break - case hilog.LogLevel.FATAL: //FATAL - hilog.fatal(QCloudLogger.mDomain, tag, con) - break - } - } else { - //使用console - switch (level) { - case hilog.LogLevel.INFO: //info - console.info(con) - break - case hilog.LogLevel.WARN: //WARN - console.warn(con) - break - case hilog.LogLevel.DEBUG: //DEBUG - console.debug(con) - break - case hilog.LogLevel.ERROR: //ERROR - console.error(con) - break - case hilog.LogLevel.FATAL: //FATAL - console.log(con) - break - } - } - - } - - } - - /** - * 获取输出位置 - * */ - static getMessage(level: hilog.LogLevel, tag: string = "", message: string | object): string { - let log = "┌───────" + tag + "────────────────────────────────────────────────────────────────────────────────" - log = log.substring(0, log.length - tag.length) + "\n" - - try { - if (QCloudLogger.mShowLogLocation && level == hilog.LogLevel.ERROR) { - //展示位置 - const stackTrace = new Error().stack - const traceArray = stackTrace!.split('\n') - const trace = traceArray[traceArray.length-2] - log = log + "|" + trace - } - - let type = typeof message - if (type == "object") { - //是对象 - message = QCloudLogger.getObjectToJson(message) - } else if (type == "string") { - //判断是否包含大括号 - const content = message + "" - if (content.startsWith("{") && content.endsWith("}")) { - //对象 - const obj: object = JSON.parse(message.toString()) - message = QCloudLogger.getObjectToJson(obj) - } else { - message = content - } - } - log = log + "\n| " + message - } catch (e) { - - } - log = log + "\n└───────────────────────────────────────────────────────────────────────────────────────" - return log - } - - /* - *对象转Json - * */ - private static getObjectToJson(message: string | object): string { - const json = JSON.stringify(message, null, 2) - const endMessage = json.replace(/\n/g, "\n| ") - return endMessage - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HarmonyHttpClientImpl.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HarmonyHttpClientImpl.ets deleted file mode 100644 index 9517d3c..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HarmonyHttpClientImpl.ets +++ /dev/null @@ -1,17 +0,0 @@ -// /** -// * 鸿蒙自带网络端 实现 -// */ -// import { HarmonyProxy } from './HarmonyProxy'; -// import { NetworkClient } from './NetworkClient'; -// import { NetworkProxy } from './NetworkProxy'; -// -// export class HarmonyHttpClientImpl extends NetworkClient { -// constructor(enableDebugLog?: boolean, readTimeout?: number, connectTimeout?: number, -// dnsOverHttps?: string | undefined, dnsServers?: string[] | undefined) { -// super(enableDebugLog, readTimeout, connectTimeout, dnsOverHttps, dnsServers); -// } -// -// getNetworkProxy(): NetworkProxy { -// return new HarmonyProxy(); -// } -// } \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HarmonyProxy.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HarmonyProxy.ets deleted file mode 100644 index 1116602..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HarmonyProxy.ets +++ /dev/null @@ -1,20 +0,0 @@ -// /** -// * 网络端 鸿蒙执行代理实现 -// */ -// import { HttpRequest } from './HttpRequest'; -// import { NetworkProxy } from './NetworkProxy'; -// import http from '@ohos.net.http'; -// import { HttpResult } from './HttpResult'; -// import { taskpool } from '@kit.ArkTS'; -// import { QCloudEventType } from '../task/base/QCloudTask'; -// import { QCloudTransferData } from '../task/base/QCloudTransferData'; -// import { QCloudRequestData } from '../task/http/QCloudRequestData'; -// import { HttpProgress } from './HttpProgress'; -// import { QCloudLogger } from '../logger/QCloudLogger'; -// -// export class HarmonyProxy extends NetworkProxy { -// executeHttpRequest(qcloudRequestData: QCloudRequestData) { -// let httpRequest = http.createHttp(); -// -// } -// } \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpConstants.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpConstants.ets deleted file mode 100644 index af0c07e..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpConstants.ets +++ /dev/null @@ -1,27 +0,0 @@ -/** - * http常量定义 - */ -export class HttpHeader { - public static readonly USER_AGENT = "User-Agent"; - public static readonly CONTENT_TYPE = "Content-Type"; - public static readonly RESPONSE_CONTENT_TYPE = "content-type"; - public static readonly AUTHORIZATION = "Authorization"; - public static readonly CONTENT_LENGTH = "content-length"; - public static readonly CONTENT_MD5 = "Content-MD5"; - public static readonly RANGE = "Range"; - public static readonly CONTENT_RANGE = "content-range"; - public static readonly HOST = "Host"; - - public static readonly X_COS_REQUEST_ID = "x-cos-request-id"; - public static readonly X_COS_TRACE_ID = "x-cos-trace-id"; - public static readonly ETAG = "etag"; - -} - -export class ContentType { - public static readonly XML = "application/xml"; - public static readonly OCTET_STREAM = "application/octet-stream"; - public static readonly JSON = "application/json"; - public static readonly TEXT_PLAIN = "text/plain"; - public static readonly X_WWW_FORM_URLENCODED = "application/x-www-form-urlencoded"; -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpProgress.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpProgress.ets deleted file mode 100644 index feb7ff4..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpProgress.ets +++ /dev/null @@ -1,10 +0,0 @@ -export class HttpProgress{ - public complete:number; - public target:number; - - constructor(complete: number, target: number) { - this.complete = complete; - this.target = target; - } - -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpRequest.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpRequest.ets deleted file mode 100644 index 93ef0d0..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpRequest.ets +++ /dev/null @@ -1,205 +0,0 @@ -import http from '@ohos.net.http'; -import { CryptoUtil } from '../util/CryptoUtil'; -import { HttpHeader } from './HttpConstants'; -import { RequestBodySerializer } from './RequestBodySerializer'; - -import { ResponseBodyConverter } from './ResponseBodyConverter'; -import { rpc } from '@kit.IPCKit'; -import { rcp } from '@kit.RemoteCommunicationKit'; - -/** - * http请求类 - */ -export class HttpRequest { - method: http.RequestMethod; - protocol: string; - host: string; - port: number; - path: string; - headers: Map; - queries: Map; - noSignHeaderKeys: Set; - noSignQueryKeys: Set; - isSignedInURL: boolean = false; - isNeedMD5: boolean = false; - requestBodySerializer: RequestBodySerializer | undefined; - responseBodyConverter: ResponseBodyConverter; - readTimeout: number = 60000; // 单位毫秒(ms) - connectTimeout: number = 60000; // 单位毫秒(ms) - dnsOverHttps?: string; - dnsServers?: string[]; - requestConfiguration?: rcp.Configuration; - - constructor(method: http.RequestMethod, protocol: string, host: string, port: number, path: string, - requestBodySerializer: RequestBodySerializer | undefined, responseBodyConverter: ResponseBodyConverter, - headers?: Map, queries?: Map, isNeedMD5?: boolean, - isSignedInURL?: boolean, requestConfiguration?: rcp.Configuration) { - this.method = method; - this.protocol = protocol; - this.host = host; - this.port = port; - this.path = path; - this.requestBodySerializer = requestBodySerializer; - this.responseBodyConverter = responseBodyConverter; - this.headers = headers || new Map(); - this.queries = queries || new Map(); - this.noSignHeaderKeys = new Set(); - this.noSignQueryKeys = new Set(); - this.isNeedMD5 = isNeedMD5 || false; - this.isSignedInURL = isSignedInURL || false; - this.requestConfiguration = requestConfiguration - } - - addHeader(key: string, value: string): void { - this.headers.set(key, value); - } - - shouldRetry(error: Error) { - return true; - } - - removeHeader(key: string): void { - this.headers.delete(key); - } - - getHeader(key: string): string | undefined { - return this.headers.get(key); - } - - addQuery(key: string, value?: string): void { - this.queries.set(key, value); - } - - removeQuery(key: string): void { - this.queries.delete(key); - } - - getQuery(key: string): string | undefined { - return this.queries.get(key); - } - - addNoSignHeaderKey(key: string): void { - this.noSignHeaderKeys.add(key); - } - - addNoSignQueryKey(key: string): void { - this.noSignQueryKeys.add(key); - } - - setUserAgent(userAgent: string): void { - this.headers.set(HttpHeader.USER_AGENT, userAgent); - } - - async prepareRequestData() { - let buffer = this.requestBodySerializer?.body(); - if (this.isNeedMD5 && buffer && buffer instanceof ArrayBuffer) { - let md5 = await CryptoUtil.qcloudMd5ArrayBuffer(buffer); - this.addHeader(HttpHeader.CONTENT_MD5, md5); - } - - this.addHeader(HttpHeader.HOST, this.host); - - let contentType = this.requestBodySerializer?.contentType() - let contentLength = this.requestBodySerializer?.contentLength() - if (!this.headers.get(HttpHeader.CONTENT_TYPE) && contentType) { - this.addHeader(HttpHeader.CONTENT_TYPE, contentType); - } - - if (contentLength) { - this.addHeader(HttpHeader.CONTENT_LENGTH, contentLength.toString()); - } else { - this.addHeader(HttpHeader.CONTENT_LENGTH, "0"); - } - } - - - /** - * 生成URL - * @returns URL - */ - buildURL(): string { - let url = `${this.protocol}://${this.host}${this.port == -1 ? "" : `:${this.port}`}/${this.path}`; - if (this.queries.size > 0) { - url += '?'; - for (const q of this.queries) { - if (q[1]) { - url += `${q[0]}=${encodeURIComponent(q[1])}&`; - } else { - url += `${q[0]}&`; - } - } - // Remove the trailing '&' - url = url.slice(0, -1); - } - return url; - } - - buildBody(): rcp.RequestContent { - let body = this.requestBodySerializer?.body() - let headers: Record = {}; - this.headers.forEach((value, key) => { - if (key) { - headers[key] = value; - } - }) - if (body instanceof ArrayBuffer && body.byteLength == 0) { - body = undefined; - } - return body as rcp.RawDataContent; - } - - buildHeader(): rcp.RequestHeaders { - let headers: rcp.RequestHeaders = {}; - this.headers.forEach((value, key) => { - if (key) { - headers[key] = value; - } - }) - return headers; - } - - buildRequestConfiguration(): rcp.Configuration { - if (this.requestConfiguration) { - return this.requestConfiguration; - } - - const requestConfig: rcp.Configuration = { - transfer: { - autoRedirect: false, - timeout: { - connectMs: this.connectTimeout, - transferMs: this.readTimeout - }, - } - } - - if (this.dnsServers) { - if (!requestConfig.dns) { - requestConfig.dns = {}; - } - let customDnsServers: rcp.DnsServers = this.dnsServers.map(item => { - let ipItem: rcp.IpAndPort = { ip: item } - return ipItem; - }) - requestConfig.dns.dnsRules = customDnsServers; - } - - - if (this.dnsOverHttps) { - if (!requestConfig.dns) { - requestConfig.dns = {}; - } - let dohConfig: rcp.DnsOverHttpsConfiguration = { - url: this.dnsOverHttps, - skipCertificatesValidation: true - }; - requestConfig.dns.dnsOverHttps = dohConfig; - } - return requestConfig; - } - - reset() { - this.removeHeader(HttpHeader.AUTHORIZATION); - this.responseBodyConverter.reset(this); - } -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpResponse.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpResponse.ets deleted file mode 100644 index 2ff5353..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpResponse.ets +++ /dev/null @@ -1,7 +0,0 @@ -// http响应 -export class HttpResponse{ - public httpCode?:number; - public headers?:Record; - public content?: T; - -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpResult.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpResult.ets deleted file mode 100644 index c917f3b..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/HttpResult.ets +++ /dev/null @@ -1,3 +0,0 @@ -// 腾讯云网络请求结果,包括具体的业务实体 -export class HttpResult { -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/NetworkClient.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/NetworkClient.ets deleted file mode 100644 index e9e46cf..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/NetworkClient.ets +++ /dev/null @@ -1,30 +0,0 @@ -// /** -// * 网络端 抽象类 -// */ -// import { NetworkProxy } from './NetworkProxy'; -// -// export abstract class NetworkClient { -// // 网络client配置:日志开关、dns等, 后续复杂后考虑改为构建模式 -// protected enableDebugLog: boolean = false; -// protected readTimeout: number = 30 * 1000; -// protected connectTimeout: number = 15 * 1000; -// protected dnsOverHttps: string | undefined; -// protected dnsServers: Array | undefined; -// -// constructor(enableDebugLog?: boolean, readTimeout?: number, connectTimeout?: number, dnsOverHttps?: string | undefined, -// dnsServers?: Array | undefined) { -// if(enableDebugLog){ -// this.enableDebugLog = enableDebugLog; -// } -// if(readTimeout){ -// this.readTimeout = readTimeout; -// } -// if(connectTimeout){ -// this.connectTimeout = connectTimeout; -// } -// this.dnsOverHttps = dnsOverHttps; -// this.dnsServers = dnsServers; -// } -// -// abstract getNetworkProxy(): NetworkProxy; -// } \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/NetworkProxy.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/NetworkProxy.ets deleted file mode 100644 index c81105b..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/NetworkProxy.ets +++ /dev/null @@ -1,13 +0,0 @@ -// import { HttpRequest } from './HttpRequest'; -// import { HttpResult } from './HttpResult'; -// import http from '@ohos.net.http'; -// import { QCloudRequestData } from '../task/http/QCloudRequestData'; -// -// /** -// * 网络端 执行代理 -// */ -// export abstract class NetworkProxy { -// abstract executeHttpRequest(qcloudRequestData: QCloudRequestData); -// // abstract convertResponse(httpRequest: HttpRequest, response: http.HttpResponse): HttpResult; -// // abstract cancel(); -// } \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/QCloudHttpClient.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/QCloudHttpClient.ets deleted file mode 100644 index b5f6acf..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/QCloudHttpClient.ets +++ /dev/null @@ -1,37 +0,0 @@ -// /** -// * 网络端 对外 -// */ -// import { QCloudSignatureBuilder } from '../authentation/QCloudSignatureBuilder'; -// import { QCloudHTTPTask } from '../task/http/QCloudHTTPTask'; -// import { QCloudRequestData } from '../task/http/QCloudRequestData'; -// import { HarmonyHttpClientImpl } from './HarmonyHttpClientImpl'; -// import { NetworkClient } from './NetworkClient'; -// import { QCloudHttpRequest } from './QCloudHttpRequest'; -// -// export class QCloudHttpClient { -// private static K_CLIENT_ID = 33333; -// public static readonly HTTP_LOG_TAG = "QCloudHttp"; -// private static clientMap: Map = new Map(); -// -// public static executeHttpRequest(qcloudRequestData: QCloudRequestData){ -// // if(qcloudRequestData.networkClientId){ -// // QCloudHttpClient.clientMap.get(qcloudRequestData.networkClientId)?.getNetworkProxy().executeHttpRequest(qcloudRequestData); -// // } -// let harmonyHttpClientImpl = new HarmonyHttpClientImpl(); -// harmonyHttpClientImpl.getNetworkProxy().executeHttpRequest(qcloudRequestData); -// } -// -// clientId: string; -// harmonyHttpClientImpl: HarmonyHttpClientImpl; -// -// constructor(enableDebugLog?: boolean, readTimeout?: number, connectTimeout?: number, -// dnsOverHttps?: string | undefined, dnsServers?: string[] | undefined) { -// this.harmonyHttpClientImpl = new HarmonyHttpClientImpl(enableDebugLog, readTimeout, connectTimeout, dnsOverHttps, dnsServers); -// this.clientId = (QCloudHttpClient.K_CLIENT_ID ++).toString(); -// QCloudHttpClient.clientMap.set(this.clientId, this.harmonyHttpClientImpl); -// } -// -// // public resolveRequest(request: QCloudHttpRequest, signatureBuilder?:QCloudSignatureBuilder): QCloudHTTPTask { -// // return new QCloudHTTPTask(request, this.clientId, signatureBuilder); -// // } -// } \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/QCloudHttpRequest.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/QCloudHttpRequest.ets deleted file mode 100644 index 4a74fc0..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/QCloudHttpRequest.ets +++ /dev/null @@ -1,24 +0,0 @@ -/** - * 腾讯云网络请求类,封装了签名等操作 - */ -import { HttpRequest } from './HttpRequest'; -import http from '@ohos.net.http'; -import { ResponseBodyConverter } from './ResponseBodyConverter'; -import { RequestBodySerializer } from './RequestBodySerializer'; -import { QCloudCredential } from '../authentation/QCloudCredential'; -import { CredentialCallBack, SelfSignCallBack } from '../authentation/QCloudSignatureBuilder'; -import { rcp } from '@kit.RemoteCommunicationKit'; - -export class QCloudHttpRequest extends HttpRequest { - credential?: QCloudCredential; - credentialCallBack?: CredentialCallBack; - selfSignCallBack?: SelfSignCallBack; - - constructor(method: http.RequestMethod, protocol: string, host: string, port: number, path: string, - requestBodySerializer: RequestBodySerializer | undefined, responseBodyConverter: ResponseBodyConverter, - headers?: Map, queries?: Map, isNeedMD5?: boolean, - isSignedInURL?: boolean, requestConfiguration?: rcp.Configuration) { - super(method, protocol, host, port, path, requestBodySerializer, responseBodyConverter, headers, queries, isNeedMD5, - isSignedInURL, requestConfiguration); - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/RequestBodySerializer.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/RequestBodySerializer.ets deleted file mode 100644 index a3b3653..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/RequestBodySerializer.ets +++ /dev/null @@ -1,42 +0,0 @@ -import { XmlUtils } from '../util/XmlUtils'; -import { ContentType } from './HttpConstants'; - -export abstract class RequestBodySerializer { - public abstract body(): string | ArrayBuffer | undefined; - public abstract contentType(): string; - public abstract contentLength(): number; - public static wrap(contentType: string, body: string | ArrayBuffer | undefined): RequestBodySerializer { - return new BaseRequestBodyWrapper(contentType, body); - } -} - -export class BaseRequestBodyWrapper extends RequestBodySerializer { - bodyw: string | ArrayBuffer | undefined = undefined; - contentTypew: string; - - constructor(contentType: string, body: string | ArrayBuffer | undefined) { - super(); - this.bodyw = body; - this.contentTypew = contentType; - } - - contentType(): string { - return this.contentTypew; - } - - contentLength(): number { - if (this.bodyw instanceof ArrayBuffer) { - return this.bodyw.byteLength; - } - - if (typeof this.bodyw == 'string') { - return this.bodyw.length; - } - - return 0; - } - - body(): string | ArrayBuffer | undefined { - return this.bodyw; - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/RequestFileBodyWrapper.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/RequestFileBodyWrapper.ets deleted file mode 100644 index c38c5db..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/RequestFileBodyWrapper.ets +++ /dev/null @@ -1,43 +0,0 @@ -import fs, { ReadOptions } from '@ohos.file.fs'; -import { ContentType } from './HttpConstants'; - -import { RequestBodySerializer } from './RequestBodySerializer'; - -export class RequestFileBodyWrapper extends RequestBodySerializer { - filePath :string; - offset :number = 0; - length :number = 0; - constructor(file: string, offset: number, length: number) { - super(); - this.filePath = file; - this.offset = offset; - this.length = length; - } - - body(): ArrayBuffer { - let file = fs.openSync(this.filePath,0); - let state = fs.statSync(file.fd); - if (this.length == 0) { - this.length = state.size; - this.offset = 0; - } - - let arrayBuffer = new ArrayBuffer(this.length); - let option: ReadOptions = { - offset: this.offset, - length: this.length - }; - fs.readSync(file.fd,arrayBuffer,option); - fs.closeSync(file); - return arrayBuffer; - } - - contentType(): string { - return ContentType.OCTET_STREAM; - } - - contentLength(): number { - return this.length; - } - -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/ResponseBodyConverter.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/ResponseBodyConverter.ets deleted file mode 100644 index 4bf55e1..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/net/ResponseBodyConverter.ets +++ /dev/null @@ -1,48 +0,0 @@ -import util from '@ohos.util'; -import { HttpRequest } from './HttpRequest'; - -export abstract class ResponseBodyConverter { - abstract headersReceive(header: Record); - abstract convertPart(arrayBuffer: ArrayBuffer); - abstract convertEnd(httpCode: number): T; - - reset(request:HttpRequest){ - - } - - protected concatenateArrayBuffers(...buffers: ArrayBuffer[]): ArrayBuffer { - let totalLength = 0; - for (const buffer of buffers) { - totalLength += buffer.byteLength; - } - - const result = new Uint8Array(totalLength); - let offset = 0; - for (const buffer of buffers) { - result.set(new Uint8Array(buffer), offset); - offset += buffer.byteLength; - } - - return result.buffer; - } - - protected arrayBufferToString(buffer: ArrayBuffer): string { - let textDecoder = util.TextDecoder.create('utf-8') - return textDecoder.decodeWithStream(new Uint8Array(buffer)) - } -} - -// export class ResponseStringConverter extends ResponseBodyConverter { -// headersReceive(header: Record): void { -// } -// buffers: ArrayBuffer[] = []; -// convertPart(arrayBuffer: ArrayBuffer): void { -// this.buffers.push(arrayBuffer); -// } -// -// convertEnd(httpCode: number): string { -// const combinedBuffer = this.concatenateArrayBuffers(...this.buffers); -// const result = this.arrayBufferToString(combinedBuffer); -// return result; -// } -// } \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/retry/RetryHandler.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/retry/RetryHandler.ets deleted file mode 100644 index df0c5c8..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/retry/RetryHandler.ets +++ /dev/null @@ -1,30 +0,0 @@ -export class RetryHandler{ - private currentTryCount:number = 0; - maxCount:number = 0; - sleep:number = 0; - - static defaultHandler(){ - return new RetryHandler(3,1); - } - - constructor(count:number,sleep:number) { - this.maxCount = count; - this.sleep = sleep; - } - - reset(){ - this.currentTryCount = 0; - } - - shouldRetry():boolean{ - if (this.currentTryCount>=this.maxCount){ - return false; - } - this.currentTryCount ++; - return true; - } - - copy():RetryHandler{ - return new RetryHandler(this.maxCount,this.sleep); - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/QCloudTaskManager.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/QCloudTaskManager.ets deleted file mode 100644 index bb300ca..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/QCloudTaskManager.ets +++ /dev/null @@ -1,70 +0,0 @@ -import { CredentialCallBack, QCloudSignatureBuilder } from '../authentation/QCloudSignatureBuilder'; -import { QCloudQueue } from './queue/QCloudQueue' -import { QCloudTask } from './base/QCloudTask'; -import { QCloudHTTPTask } from './http/QCloudHTTPTask'; - -export class QCloudTaskManager{ - - downloadQueue:QCloudQueue = new QCloudQueue('downloadQueue'); - uploadQueue:QCloudQueue = new QCloudQueue('uploadQueue'); - requestQueue:QCloudQueue = new QCloudQueue('requestQueue'); - private static service: QCloudTaskManager; - - public static manager(): QCloudTaskManager { - if (!QCloudTaskManager.service) { - QCloudTaskManager.service = new QCloudTaskManager(); - } - return QCloudTaskManager.service; - } - - setDownloadConcurrentCount(count:number){ - this.downloadQueue.customConcurrentCount = count; - } - - setUploadConcurrentCount(count:number){ - this.uploadQueue.customConcurrentCount = count; - } - - setRequestConcurrentCount(count:number){ - this.requestQueue.customConcurrentCount = count; - } - - public addDownloadTask(task:QCloudHTTPTask){ - this.downloadQueue.addTask(task); - } - - public addUploadTask(task:QCloudHTTPTask){ - this.uploadQueue.addTask(task); - } - - public addRequestTask(task:QCloudHTTPTask){ - this.requestQueue.addTask(task); - } - - public getRunningTask(taskId:number):QCloudTask|null{ - let queues: QCloudQueue[]= [this.downloadQueue,this.uploadQueue,this.requestQueue]; - for (let queue of queues) { - let task:QCloudTask|null = queue.getRunningTask(taskId); - if (task) { - return task; - } - } - return null; - } - - public cancel(taskId:number){ - let queues: QCloudQueue[]= [this.downloadQueue,this.uploadQueue,this.requestQueue]; - for (let queue of queues) { - if (queue.cancelTask(taskId)) { - break; - } - } - } - - public cancelAll(){ - let queues: QCloudQueue[]= [this.downloadQueue,this.uploadQueue,this.requestQueue]; - for (let queue of queues) { - queue.cancelAll(); - } - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/base/QCloudTask.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/base/QCloudTask.ets deleted file mode 100644 index 0b5b0c9..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/base/QCloudTask.ets +++ /dev/null @@ -1,84 +0,0 @@ -import { taskpool } from '@kit.ArkTS'; -import { QCloudLogger } from '../../logger/QCloudLogger'; -import { QCloudQueue } from '../queue/QCloudQueue'; - -import { QCloudTransferData } from './QCloudTransferData'; -import emitter from '@ohos.events.emitter'; -import { QCloudRequestData } from '../http/QCloudRequestData'; -import { RetryHandler } from '../../retry/RetryHandler'; - -export enum QCloudEventType { - netError = 'netError', - taskError = 'taskError', - cancel = 'cancel', - finish = 'finish', - headerReceive = 'headerReceive', - dataProgress = 'dataProgress', - dataReceive = 'dataReceive', // - dataEnd = 'dataEnd' // 结束 -} -export enum QCloudPriority {High = 0, Normal = 1, Low = 2 } -export enum QCloudTaskState {Init = 0,Waiting = 1, Process = 2, Cancel = 3,Finish = 4} - -export class QCloudTask { - - private static K_TASK_ID = 33333; - public static K_CANCEL_EVENT_BASE = 1000000; - mainFunc:Function; - runOnQueue?:QCloudQueue; - priority:QCloudPriority; - state = QCloudTaskState.Init; - taskId:number; - hTask?:taskpool.Task; - retry = RetryHandler.defaultHandler(); - - constructor(mainFunc:Function) { - this.mainFunc = mainFunc; - this.taskId = QCloudTask.K_TASK_ID ++; - this.priority = QCloudPriority.Normal; - this.state = QCloudTaskState.Init; - - let event: emitter.InnerEvent = { - eventId: this.taskId - }; - emitter.on(event, (eventData: emitter.EventData): void => { - let data = eventData.data; - this.runOnQueue?.taskReceiveData(this.taskId,data!["data"] as QCloudTransferData) - }); - } - - getRequestData():object{ - return new QCloudRequestData(); - } - - /*构建请求数据*/ - async buildRequestData(){ - return true; - } - /**/ - async executeTask(){ - await this.buildRequestData(); - } - - shouldRetry(error:Error):boolean{ - if (!this.retry.shouldRetry()) { - return false; - } - return true; - } - - cancel(){ - // 任务未开始,只需在manager等待队列中删除即可。 - if (this.state != QCloudTaskState.Process) { - return; - } - } - - reset(){ - this.state = QCloudTaskState.Waiting; - } - - public onTaskReceiveData(data:QCloudTransferData){ - QCloudLogger.info(`QCloudCOSFoundation:task_onTaskReceiveData:${this.taskId}_${data}`); - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/base/QCloudTransferData.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/base/QCloudTransferData.ets deleted file mode 100644 index 14a7ff7..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/base/QCloudTransferData.ets +++ /dev/null @@ -1,13 +0,0 @@ -import { QCloudEventType } from './QCloudTask'; - -export class QCloudTransferData { - eventType?:QCloudEventType; - error: Error|null; - result:object|number|null; - constructor(eventType:QCloudEventType,result:object|number|null,error:Error|null) { - this.eventType = eventType; - this.error = error; - this.result = result; - } -} - diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/http/QCloudHTTPTask.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/http/QCloudHTTPTask.ets deleted file mode 100644 index c28c7a8..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/http/QCloudHTTPTask.ets +++ /dev/null @@ -1,200 +0,0 @@ -import { QCloudEventType, QCloudTask } from '../base/QCloudTask'; -import { QCloudTransferData } from '../base/QCloudTransferData'; -import { QCloudRequestData } from './QCloudRequestData'; -import { HttpRequest } from '../../net/HttpRequest'; -import { QCloudSignatureBuilder } from '../../authentation/QCloudSignatureBuilder'; -import emitter from '@ohos.events.emitter'; -import { Callback } from '@ohos.base'; -import { HttpProgress } from '../../net/HttpProgress'; -import { HttpResponse } from '../../net/HttpResponse'; -import { TaskHTTPExecuteFunc } from './TaskHTTPExecuteFunc'; -import { QCloudUserCancelError } from '../../error/QCloudUserCancelError'; -import { QCloudNetError } from '../../error/QCloudNetError'; -import { QCloudTaskError } from '../../error/QCloudTaskError'; -import { QCloudHttpRequest } from '../../net/QCloudHttpRequest'; -import { QCloudAuthenticationError } from '../../error/QCloudAuthenticationError'; -import { QCloudLogger } from '../../logger/QCloudLogger'; -import { HttpHeader } from '../../net/HttpConstants'; - -export class QCloudHTTPTask extends QCloudTask { - private readonly TAG = "HTTP"; - httpRequest:QCloudHttpRequest; - - requestData:QCloudRequestData; - private httpResponse: HttpResponse|undefined; - - onHeaderReceive: Callback> | undefined; - onProgress: Callback | undefined; - onSuccess: Callback> | undefined; - onFailure: Callback | undefined; - - constructor(httpRequest:QCloudHttpRequest) { - super(TaskHTTPExecuteFunc); - this.httpRequest = httpRequest; - this.requestData = new QCloudRequestData(); - } - - async buildRequestData():Promise{ - await this.httpRequest.prepareRequestData(); - let url = this.httpRequest?.buildURL(); - - // 请求如果已经签名则不再本地或者服务端签名 - if(!this.httpRequest.headers.has(HttpHeader.AUTHORIZATION) || this.httpRequest.headers.get(HttpHeader.AUTHORIZATION)!.length == 0){ - // 客户端签名 - let signature = await QCloudSignatureBuilder.signatureBuild(this.httpRequest); - if (signature){ - if (!this.httpRequest.isSignedInURL) { - this.httpRequest.addHeader(HttpHeader.AUTHORIZATION,signature.authorization!); - }else{ - if (url.includes("?")) { - url += `&${signature.authorization}`; - }else{ - url += `?${signature.authorization}`; - } - if (signature.token && signature.token.length > 0) { - url += `&${signature.tokenName}=${signature.token}`; - } - } - } - - // 服务端签名 - if(this.httpRequest.selfSignCallBack){ - this.httpRequest.selfSignCallBack(this.httpRequest); - } - } - - this.requestData.url = url; - this.requestData.headers = this.httpRequest.buildHeader(); - this.requestData.content = this.httpRequest.buildBody(); - this.requestData.method = this.httpRequest.method; - this.requestData.requestConfiguration = this.httpRequest.buildRequestConfiguration(); - this.requestData.taskId = this.taskId; - return true; - } - - public onTaskReceiveData(data: QCloudTransferData): void { - if (data.eventType == QCloudEventType.netError) { - if(data.error){ - QCloudLogger.info(new QCloudNetError(data.error), this.TAG+"_err"); - } - if (this.onFailure) { - this.onFailure(new QCloudNetError(data.error) as Error); - return; - } - } - - if (data.eventType == QCloudEventType.taskError) { - if (this.onFailure) { - if(data.error instanceof QCloudAuthenticationError){ - // task执行过程中可能会抛QCloudAuthenticationError,需要单独抛出 - this.onFailure(data.error as Error); - } else { - this.onFailure(new QCloudTaskError(data.error) as Error); - } - return; - } - } - - if (data.eventType == QCloudEventType.cancel) { - if (this.onFailure) { - this.onFailure(new QCloudUserCancelError() as Error); - return; - } - } - - if (data.eventType == QCloudEventType.finish) { - try { - QCloudLogger.info((data.result as number).toString(), this.TAG+"_httpCode"); - let t = this.httpRequest.responseBodyConverter.convertEnd(data.result as number); - if (this.onSuccess) { - if(this.httpResponse){ - this.httpResponse.httpCode = data.result as number; - this.httpResponse.content = t; - } - } - } catch (err) { - if (this.onFailure) { - this.onFailure(err); - return; - } - } - if (this.onSuccess && this.httpResponse) { - this.onSuccess(this.httpResponse); - return; - } - } - - if (data.eventType == QCloudEventType.headerReceive) { - if(data.result){ - QCloudLogger.info(data.result as Record, this.TAG+"_headersReceive"); - } - try { - this.httpResponse = new HttpResponse() - if(this.httpResponse){ - this.httpResponse.headers = data.result as Record; - } - this.httpRequest.responseBodyConverter.headersReceive(data.result as Record) - } catch (err) { - if (this.onFailure) { - this.onFailure(err); - return; - } - } - if (this.onHeaderReceive) { - this.onHeaderReceive(data.result as Record); - } - } - - if (data.eventType == QCloudEventType.dataReceive) { - try { - this.httpRequest.responseBodyConverter.convertPart(data.result as ArrayBuffer) - } catch (err) { - if (this.onFailure) { - this.onFailure(err); - return; - } - } - } - - if (data.eventType == QCloudEventType.dataEnd) { - QCloudLogger.info("dataEnd !", this.TAG+"_dataEnd"); - } - - if (data.eventType == QCloudEventType.dataProgress) { - if (this.onProgress) { - let httpProgress: HttpProgress = data.result as HttpProgress; - this.onProgress(httpProgress); - } - } - } - - public getRequestData():QCloudRequestData { - if(this.requestData) { - QCloudLogger.info(this.requestData.url!, this.TAG + "_url"); - QCloudLogger.info(this.requestData.requestConfiguration!, this.TAG + "_request"); - } - return this.requestData; - } - - public cancel(){ - super.cancel(); - let event: emitter.InnerEvent = { - eventId: this.taskId + QCloudTask.K_CANCEL_EVENT_BASE, - priority: emitter.EventPriority.HIGH - }; - emitter.emit(event); - } - - - shouldRetry(error:Error):boolean{ - if (!super.shouldRetry(error)) { - return false; - } - return this.httpRequest.shouldRetry(error); - } - - public reset(): void { - super.reset(); - this.httpRequest.reset(); - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/http/QCloudRequestData.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/http/QCloudRequestData.ets deleted file mode 100644 index 19ca79e..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/http/QCloudRequestData.ets +++ /dev/null @@ -1,12 +0,0 @@ -import { rcp } from '@kit.RemoteCommunicationKit'; - -export class QCloudRequestData extends Object{ - public taskId:number = 0; - public url?:rcp.URLOrString; - public method?: rcp.HttpMethod - public headers?: rcp.RequestHeaders - public content?: rcp.RequestContent - public cookies?: rcp.RequestCookies - public transferRange?: rcp.TransferRange | rcp.TransferRange[] - public requestConfiguration?: rcp.Configuration -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/http/TaskHTTPExecuteFunc.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/http/TaskHTTPExecuteFunc.ets deleted file mode 100644 index 37ad657..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/http/TaskHTTPExecuteFunc.ets +++ /dev/null @@ -1,125 +0,0 @@ -import { QCloudEventType, QCloudTask } from '../base/QCloudTask'; -import { QCloudTransferData } from '../base/QCloudTransferData'; -import emitter from '@ohos.events.emitter'; -import http from '@ohos.net.http'; -import { QCloudRequestData } from './QCloudRequestData'; -import { HttpProgress } from '../../net/HttpProgress'; -import { QCloudLogger } from '../../logger/QCloudLogger'; -import { HashMap } from '@kit.ArkTS'; -import { rcp } from '@kit.RemoteCommunicationKit'; -import { BusinessError } from '@kit.BasicServicesKit'; - -enum SendEventOrder {} - -@Concurrent -export function TaskHTTPExecuteFunc(qcloudRequestData: QCloudRequestData) { - - let resultMap = new HashMap(); - let sendSet = new Set(); - - let event: emitter.InnerEvent = { - eventId: qcloudRequestData.taskId, - priority: emitter.EventPriority.HIGH - }; - - let cancelEvent: emitter.InnerEvent = { - eventId: qcloudRequestData.taskId + 1000000 - }; - emitter.once(cancelEvent, (eventData: emitter.EventData): void => { - session.cancel() - SendEvent(new QCloudTransferData(QCloudEventType.cancel, null, null)) - dealloc(); - }); - - let SendEvent = (data: QCloudTransferData) => { - let eventData: emitter.EventData = { - data: { - "taskId": qcloudRequestData.taskId, - "data": data, - } - }; - emitter.emit(event, eventData); - } - - let SendOrderEvent = (data: QCloudTransferData, order: number, totalCount: number) => { - resultMap.set(order, data); - for (let index = 0; index <= totalCount; index++) { - if (sendSet.has(index)) { - continue; - } - - let sendData = resultMap.get(index); - if (!sendData) { - break; - } - let eventData: emitter.EventData = { - data: { - "taskId": qcloudRequestData.taskId, - "data": sendData, - } - }; - emitter.emit(event, eventData); - sendSet.add(index); - } - } - - const customHttpEventsHandler: rcp.HttpEventsHandler = { - onDataReceive: (incomingData: ArrayBuffer) => { - SendEvent(new QCloudTransferData(QCloudEventType.dataReceive, incomingData, null)); - }, - onUploadProgress: (totalSize: number, transferredSize: number) => { - if (qcloudRequestData.method == http.RequestMethod.PUT) { - SendEvent(new QCloudTransferData(QCloudEventType.dataProgress, new HttpProgress(transferredSize, totalSize), - null)); - } - }, - onDownloadProgress: (totalSize: number, transferredSize: number) => { - if (qcloudRequestData.method == http.RequestMethod.GET) { - SendEvent(new QCloudTransferData(QCloudEventType.dataProgress, new HttpProgress(transferredSize, totalSize), - null)); - } - }, - onHeaderReceive: (headers: rcp.ResponseHeaders) => { - SendOrderEvent(new QCloudTransferData(QCloudEventType.headerReceive, headers, null), 0, 3); - }, - onDataEnd: () => { - SendOrderEvent(new QCloudTransferData(QCloudEventType.dataEnd, null, null), 1, 3); - }, - onCanceled: () => { - }, - }; - - let requestConfig = qcloudRequestData.requestConfiguration; - if (requestConfig?.tracing) { - requestConfig.tracing.httpEventsHandler = customHttpEventsHandler - } else { - const tracingConfig: rcp.TracingConfiguration = { - httpEventsHandler: customHttpEventsHandler - }; - requestConfig!.tracing = tracingConfig; - } - - const session = rcp.createSession({ - requestConfiguration: requestConfig - }); - - let req = new rcp.Request(qcloudRequestData.url!, qcloudRequestData.method); - req.headers = qcloudRequestData.headers; - if (qcloudRequestData?.content) { - req.content = qcloudRequestData.content - } - - session.fetch(req).then((response) => { - SendOrderEvent(new QCloudTransferData(QCloudEventType.finish, response.statusCode, null), 2, 3); - dealloc(); - }).catch((err: BusinessError) => { - SendEvent(new QCloudTransferData(QCloudEventType.netError, null, err)); - dealloc(); - }); - - let dealloc = () => { - resultMap.clear(); - sendSet.clear(); - session.close(); - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/queue/QCloudQueue.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/queue/QCloudQueue.ets deleted file mode 100644 index df268f0..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/task/queue/QCloudQueue.ets +++ /dev/null @@ -1,193 +0,0 @@ -import { LinkedList, taskpool } from '@kit.ArkTS' -import { QCloudLogger } from '../../logger/QCloudLogger'; -import { QCloudEventType, QCloudPriority, QCloudTask, QCloudTaskState } from '../base/QCloudTask' -import { QCloudTransferData } from '../base/QCloudTransferData'; -import { TaskHTTPExecuteFunc } from '../http/TaskHTTPExecuteFunc'; -import { QCloudTaskManager } from '../QCloudTaskManager'; - - -export class QCloudQueue { - - queueTag:string = 'queue'; - public maxConcurrentCount = 8; - public customConcurrentCount = 4; - - private runingTaskQueue:LinkedList; - - private heighWaitTaskQueue:LinkedList; - private normalWaitTaskQueue:LinkedList; - private lowWaitTaskQueue:LinkedList; - - constructor(tag?:string) { - if (tag) { - this.queueTag = tag; - } - this.runingTaskQueue = new LinkedList(); - this.heighWaitTaskQueue = new LinkedList(); - this.normalWaitTaskQueue = new LinkedList(); - this.lowWaitTaskQueue = new LinkedList(); - } - - private _logState(){ - QCloudLogger.log(`${this.queueTag}_state:runningCount:${this.runingTaskQueue.length},heighWaitCount:${this.heighWaitTaskQueue.length},normalWaitCount:${this.normalWaitTaskQueue.length},lowWaitCount:${this.lowWaitTaskQueue.length},customConcurrentCount:${this.customConcurrentCount}`,'cos_sdk_task_manager_log'); - } - - public addTask(task:QCloudTask){ - task.state = QCloudTaskState.Waiting; - if (task.priority == QCloudPriority.High) { - this.heighWaitTaskQueue?.add(task); - } - if (task.priority == QCloudPriority.Normal) { - this.normalWaitTaskQueue?.add(task); - } - if (task.priority == QCloudPriority.Low) { - this.lowWaitTaskQueue?.add(task); - } - QCloudLogger.log(`addTask:${task.taskId}`,'cos_sdk_task_manager_log'); - this._logState(); - this.startTask(); - task.runOnQueue = this; - } - - public cancelTask(taskId:number):boolean{ - let RemoveTask = (list: LinkedList): boolean => { - for (let i = 0; i < list.length; i++) { - let task = list.get(i); - if (task.taskId == taskId) { - task.state = QCloudTaskState.Cancel; - list.remove(task); - return true; - } - } - return false; - } - let result :boolean = RemoveTask(this.heighWaitTaskQueue); - if (!result) { - result = RemoveTask(this.normalWaitTaskQueue); - } - if (!result) { - result = RemoveTask(this.lowWaitTaskQueue); - } - if (!result) { - this.cancelRunningTask(taskId); - } - if (result) { - QCloudLogger.log(`cancelTask:${taskId}`,'cos_sdk_task_manager_log'); - } - this._logState(); - this.startTask(); - return result; - } - - private cancelRunningTask(taskId:number){ - for (let i = 0; i < this.runingTaskQueue.length; i++) { - let task = this.runingTaskQueue.get(i); - if (task.taskId == taskId) { - task.cancel(); - return; - } - } - } - - public cancelAll(){ - this.heighWaitTaskQueue.forEach((value)=>{value.state = QCloudTaskState.Cancel}) - this.normalWaitTaskQueue.forEach((value)=>{value.state = QCloudTaskState.Cancel}) - this.lowWaitTaskQueue.forEach((value)=>{value.state = QCloudTaskState.Cancel}) - - this.heighWaitTaskQueue.clear(); - this.normalWaitTaskQueue.clear(); - this.lowWaitTaskQueue.clear(); - - for (const task of this.runingTaskQueue) { - task.cancel(); - } - QCloudLogger.log(`cancelAll`,'cos_sdk_task_manager_log'); - this._logState(); - } - - private async startTask(){ - if (this.heighWaitTaskQueue.length == 0 && this.lowWaitTaskQueue.length == 0 && this.normalWaitTaskQueue.length == 0){ - return; - } - if (this.customConcurrentCount > 0 && this.runingTaskQueue.length >= this.customConcurrentCount) { - return; - } - let RuningTask = async (queue: LinkedList): Promise => { - let task = queue.getFirst(); - this.runingTaskQueue.add(task); - queue.remove(task); - try { - await task.executeTask(); - } catch (e) { - // 执行任务之前,构建异常,直接结束 - task.state = QCloudTaskState.Finish; - task.onTaskReceiveData(new QCloudTransferData(QCloudEventType.taskError,null,e)) - this.runingTaskQueue.remove(task); - return; - } - try { - let hTask = new taskpool.Task(TaskHTTPExecuteFunc,task.getRequestData()); - // task.hTask = hTask; - taskpool.execute(hTask); - QCloudLogger.log(`startTask:${task.taskId}`,'cos_sdk_task_manager_log'); - this._logState(); - task.state = QCloudTaskState.Process; - } catch (e) { - this.taskReceiveData(task.taskId,new QCloudTransferData(QCloudEventType.taskError,null,e)); - } - } - - if (this.heighWaitTaskQueue.length>0) { - RuningTask(this.heighWaitTaskQueue); - }else if (this.normalWaitTaskQueue.length>0) { - RuningTask(this.normalWaitTaskQueue); - }else if (this.lowWaitTaskQueue.length>0) { - RuningTask(this.lowWaitTaskQueue); - } - } - - public taskReceiveData(taskId:number,data:QCloudTransferData){ - let task = this.getRunningTask(taskId); - if (!task) { - return; - } - - if ((data.error && task.shouldRetry(data.error)) || - ((data.eventType === QCloudEventType.netError || (data.eventType === QCloudEventType.finish && (data.result as number) >= 500)) && task.retry.shouldRetry())){ - setTimeout(()=>{ - if (task) { - this.runingTaskQueue.remove(task); - task.reset(); - this.heighWaitTaskQueue.add(task); - QCloudLogger.log(`retryTask:${task.taskId}`,'cos_sdk_task_manager_log'); - this._logState(); - this.startTask() - } - },task.retry.sleep); - }else{ - if (data.eventType == QCloudEventType.finish || data.eventType == QCloudEventType.taskError || data.eventType == QCloudEventType.cancel) { - if (data.eventType == QCloudEventType.cancel) { - task.state = QCloudTaskState.Cancel; - } - if (data.eventType == QCloudEventType.finish || data.eventType == QCloudEventType.taskError) { - task.state = QCloudTaskState.Finish; - } - QCloudLogger.log(`removeTask:${task.taskId}`,'cos_sdk_task_manager_log'); - task.onTaskReceiveData(data); - this.runingTaskQueue.remove(task); - this.startTask(); - }else{ - task.onTaskReceiveData(data); - } - } - } - - public getRunningTask(taskId:number) : QCloudTask|null{ - for (const task of this.runingTaskQueue) { - if (taskId == task.taskId) { - return task; - } - } - return null; - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/CryptoUtil.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/CryptoUtil.ets deleted file mode 100644 index 514b8e0..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/CryptoUtil.ets +++ /dev/null @@ -1,70 +0,0 @@ -import cryptoFramework from '@ohos.security.cryptoFramework'; -import buffer from '@ohos.buffer'; -import { StringUtils } from './StringUtils'; - -export class CryptoUtil{ - - static async qlcoudSha1(str:string):Promise{ - return CryptoUtil.qlcoudSha1Uint8Array(new Uint8Array(buffer.from(str, 'utf-8').buffer)) - } - - static async qlcoudSha1Uint8Array(array:Uint8Array):Promise{ - let mdAlgName = "SHA1"; // 摘要算法名 - let md = cryptoFramework.createMd(mdAlgName); - // 假设信息总共43字节,根据utf-8解码后,也是43字节 - let messageData = array; - let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 - for (let i = 0; i < messageData.length; i += updateLength) { - let updateMessage = messageData.subarray(i, i + updateLength); - let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; - await md.update(updateMessageBlob); - } - let mdOutput = await md.digest(); - return StringUtils.uint8Array2String(mdOutput.data); - } - - static async qcloudHmacSha1(str:string,secret:string):Promise { - return CryptoUtil.qcloudHmacSha1Uint8Array(new Uint8Array(buffer.from(str, 'utf-8').buffer),secret); - } - - static async qcloudHmacSha1Uint8Array(array:Uint8Array,secret:string):Promise { - let keyData = new Uint8Array(buffer.from(secret, 'utf-8').buffer); - let symKeyBlob: cryptoFramework.DataBlob = { data: keyData }; - let aesGenerator = cryptoFramework.createSymKeyGenerator('HMAC'); - let key = await aesGenerator.convertKey(symKeyBlob); - let macAlgName = "SHA1"; // 摘要算法名 - let mac = cryptoFramework.createMac(macAlgName); - let messageData = array; - let updateLength = 1024 * 1024; // 假设以20字节为单位进行分段update,实际并无要求 - await mac.init(key); - for (let i = 0; i < messageData.length; i += updateLength) { - let updateMessage = messageData.subarray(i, i + updateLength); - let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; - await mac.update(updateMessageBlob); - } - let macOutput = await mac.doFinal(); - return StringUtils.uint8Array2String(macOutput.data); - } - - static async qcloudMd5Str(str:string):Promise { - return CryptoUtil.qcloudMd5ArrayBuffer(buffer.from(str, 'utf-8').buffer); - } - - static async qcloudMd5ArrayBuffer(array:ArrayBuffer):Promise { - let mdAlgName = "MD5"; // 摘要算法名 - let md = cryptoFramework.createMd(mdAlgName); - let _buffer = new Uint8Array(array); - // 假设信息总共43字节,根据utf-8解码后,也是43字节 - let messageData = _buffer; - let updateLength = 1024 * 1024; // 假设以20字节为单位进行分段update,实际并无要求 - for (let i = 0; i < messageData.length; i += updateLength) { - let updateMessage = messageData.subarray(i, i + updateLength); - let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; - await md.update(updateMessageBlob); - } - let mdOutput = await md.digest(); - let buffer1 = buffer.from(mdOutput.data); - return buffer1.toString("base64"); - } - -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/HttpUtils.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/HttpUtils.ets deleted file mode 100644 index 820b8fd..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/HttpUtils.ets +++ /dev/null @@ -1,19 +0,0 @@ -export class HttpUtils{ - public static parseContentRange(contentRange: string|undefined): number[] | undefined { - if (!contentRange) { - return undefined; - } - const lastBlankIndex = contentRange.lastIndexOf(" "); - const acrossIndex = contentRange.indexOf("-"); - const slashIndex = contentRange.indexOf("/"); - if (lastBlankIndex === -1 || acrossIndex === -1 || slashIndex === -1) { - return undefined; - } - - const start = Number(contentRange.substring(lastBlankIndex + 1, acrossIndex)); - const end = Number(contentRange.substring(acrossIndex + 1, slashIndex)); - const max = Number(contentRange.substring(slashIndex + 1)); - - return [start, end, max]; - } -} \ No newline at end of file diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/StringUtils.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/StringUtils.ets deleted file mode 100644 index 9b3899f..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/StringUtils.ets +++ /dev/null @@ -1,51 +0,0 @@ -import util from '@ohos.util'; - -export class StringUtils { - - /** - * Uint8Array 转 String - * @param input - */ - static uint8Array2String(input: Uint8Array):string { - if (!input) { - return ""; - } - let result = ''; - for (const item of input) { - result += `${item.toString(16).padStart(2, '0')}`; - } - return result; - } - /** - * ArrayBuffer 转 String - * @param input - * @returns - */ - static arrayBuffer2String(input: ArrayBuffer) :string{ - let textDecoder = util.TextDecoder.create('utf-8') - return textDecoder.decodeWithStream(new Uint8Array(input)) - } - - static parseInt(obj:string|number|undefined):number{ - if (typeof obj === 'string') { - return parseInt(obj); - } - if (typeof obj === 'number') { - return obj; - } - return 0; - } - - static parseBool(obj:string|number|boolean|undefined):boolean{ - if (typeof obj == 'string') { - return obj.toLowerCase() == 'true'; - } - if (typeof obj === 'number') { - return obj > 0; - } - if (typeof obj === 'boolean') { - return obj; - } - return obj !== undefined && obj !== null; - } -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/XmlUtils.ets b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/XmlUtils.ets deleted file mode 100644 index 9c374e3..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/ets/util/XmlUtils.ets +++ /dev/null @@ -1,161 +0,0 @@ -import convertxml from '@ohos.convertxml'; -import xml from '@ohos.xml'; -import util from '@ohos.util'; -import { List } from '@kit.ArkTS'; -import { QCloudLogger } from '../logger/QCloudLogger'; - -export class XmlUtils { - - static lowerCamel(name:string){ - let tempName = name; - if (tempName.length > 0) { - let first = tempName.substring(0, 1); - tempName = first.toLowerCase() + tempName.substring(1); - } - return tempName; - } - - static upperCamel(name:string){ - let tempName = name; - if (tempName.length > 0) { - let first = tempName.substring(0, 1); - tempName = first.toUpperCase() + tempName.substring(1); - } - return tempName; - } - - static obj2xml(obj:object,upperlCamel?:boolean):string|null{ - if (Array.isArray(obj)) { - QCloudLogger.warn("Array type does not support conversion to xml"); - return null - } - - try { - let arrayBuffer: ArrayBuffer = new ArrayBuffer(JSON.stringify(obj).length * 2); // 创建一个2048字节的缓冲区 - let thatSer: xml.XmlSerializer = new xml.XmlSerializer(arrayBuffer); // 基于Arraybuffer构造XmlSerializer对象 - - thatSer = XmlUtils.createXmlElement('',obj,thatSer,upperlCamel||true); - - let view: Uint8Array = new Uint8Array(arrayBuffer); // 使用Uint8Array读取arrayBuffer的数据 - let textDecoder: util.TextDecoder = util.TextDecoder.create(); // 调用util模块的TextDecoder类 - let res: string = textDecoder.decodeWithStream(view).trim(); // 对view解码 - return res - } catch (e) { - return null - } - } - - private static createXmlElement(key:string,obj: object,thatSer:xml.XmlSerializer,upperlCamel:boolean): xml.XmlSerializer{ - - if (typeof obj == 'string') { - thatSer.setText(obj); - }else if (typeof obj == 'number') { - let num:number = obj; - thatSer.setText(num.toString()); - }else if (typeof obj == 'boolean') { - let num:boolean = obj; - thatSer.setText(num?'true':'false'); - }else if (obj instanceof List) { - let array:List = obj; - for (const item of array) { - key = upperlCamel?XmlUtils.upperCamel(key):key; - thatSer.startElement(key); - thatSer = XmlUtils.createXmlElement(key,item,thatSer,upperlCamel); - thatSer.endElement(); - } - }else{ - for (const _itemKey of Object.keys(obj)) { - let _key = upperlCamel?XmlUtils.upperCamel(_itemKey):_itemKey; - let value:object = obj[_itemKey]; - if (value) { - if (value instanceof List ||value instanceof Array ){ - thatSer = XmlUtils.createXmlElement(_key,value,thatSer,upperlCamel); - }else{ - thatSer.startElement(_key); - thatSer = XmlUtils.createXmlElement(_key,value,thatSer,upperlCamel); - thatSer.endElement(); - } - }else{ - thatSer.startElement(_key); - thatSer.endElement(); - } - } - } - - return thatSer; - } - - static xml2obj(xml: string,lCamel?:boolean): object|null { - try { - let conv = new convertxml.ConvertXML() - let result: object = conv.convertToJSObject(xml); - let model = XmlUtils.getElementValue(result['_elements'][0],null,true,lCamel||true); - return model; - } catch (e) { - return null; - } - } - - private static getElementValue(element: object,pObj:object|null,root:boolean,lCamel:boolean): object|null { - let name:string = element['_name']; - if (name) { - name = lCamel?XmlUtils.lowerCamel(name):name; - } - let type: string = element['_type']; - if (type == 'text') { - return element['_text']; - } - - if (!Object.keys(element).includes('_elements')) { - return null; - } - - let elements:List = element['_elements']; - let obj = pObj; - if (!obj) { - obj = new Object(); - } - - if (type == 'element') { - for (const _element of elements) { - let _name: string = _element['_name']; - if (!_name) { - let value= XmlUtils.getElementValue(_element,obj,false,lCamel); - if (!root) { - return value; - } - obj[name] = value; - return obj; - }else{ - _name = lCamel?XmlUtils.lowerCamel(_name):_name; - let value= XmlUtils.getElementValue(_element,null,false,lCamel); - if (value) { - if (obj[_name]) { - if (Array.isArray(obj[_name]) || obj[_name] instanceof List) { - let array:List = obj[_name]; - array.add(value); - obj[_name] = array; - }else{ - let array = new List(); - array.add(obj[_name]); - array.add(value); - obj[_name] = array; - } - }else{ - obj[_name] = value; - } - }else{ - obj[_name] = null; - } - } - } - } - - if (root) { - let rObj:object = new Object(); - rObj[name] = obj; - return rObj; - } - return obj; - } -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/module.json b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/module.json deleted file mode 100644 index afb4f2a..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/module.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "app": { - "bundleName": "com.tencent.cloud.cos", - "versionCode": 1010100, - "versionName": "1.1.0", - "minAPIVersion": 50000012, - "targetAPIVersion": 50000012, - "apiReleaseType": "Release", - "compileSdkVersion": "5.0.0.71", - "compileSdkType": "HarmonyOS", - "appEnvironments": [], - "bundleType": "app" - }, - "module": { - "name": "foundation", - "type": "har", - "deviceTypes": [ - "default", - "tablet", - "2in1" - ], - "requestPermissions": [ - { - "name": "ohos.permission.INTERNET", - "usedScene": { - "when": "always" - } - } - ], - "packageName": "@tencentcloud/foundation", - "installationFree": false, - "virtualMachine": "ark12.0.2.0", - "compileMode": "esmodule", - "dependencies": [] - } -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/resources/base/element/string.json b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/resources/base/element/string.json deleted file mode 100644 index f51a9c8..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/resources/base/element/string.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "string": [ - { - "name": "page_show", - "value": "page from package" - } - ] -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/resources/en_US/element/string.json b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/resources/en_US/element/string.json deleted file mode 100644 index f51a9c8..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/resources/en_US/element/string.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "string": [ - { - "name": "page_show", - "value": "page from package" - } - ] -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/resources/zh_CN/element/string.json b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/resources/zh_CN/element/string.json deleted file mode 100644 index f51a9c8..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/main/resources/zh_CN/element/string.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "string": [ - { - "name": "page_show", - "value": "page from package" - } - ] -} diff --git a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/mock/mock-config.json5 b/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/mock/mock-config.json5 deleted file mode 100644 index 7a73a41..0000000 --- a/oh_modules/.ohpm/@tencentcloud+foundation@+z60my2zrzacmmd+ymgftrlhsfups7v9tic7zpvyc6i=/oh_modules/@tencentcloud/foundation/src/mock/mock-config.json5 +++ /dev/null @@ -1,2 +0,0 @@ -{ -} \ No newline at end of file diff --git a/oh_modules/.ohpm/oh_modules/@tencentcloud/cos b/oh_modules/.ohpm/oh_modules/@tencentcloud/cos index 87772fa..872f4f3 120000 --- a/oh_modules/.ohpm/oh_modules/@tencentcloud/cos +++ b/oh_modules/.ohpm/oh_modules/@tencentcloud/cos @@ -1 +1 @@ -../../@tencentcloud+cos@1.0.0/oh_modules/@tencentcloud/cos \ No newline at end of file +../../@tencentcloud+cos@1.1.1/oh_modules/@tencentcloud/cos \ No newline at end of file