From cf63a53109c09c2144db32aa9a25749b7a55a679 Mon Sep 17 00:00:00 2001 From: qcqcqc <1220204124@zust.edu.cn> Date: Thu, 15 Jan 2026 12:05:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=BA=9Bass?= =?UTF-8?q?ert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- es/utils/cos/aliyun.backend.js | 2 ++ es/utils/cos/s3.backend.js | 6 ++++-- lib/utils/cos/aliyun.backend.js | 2 ++ lib/utils/cos/s3.backend.js | 10 ++++++---- package.json | 1 - src/utils/cos/aliyun.backend.ts | 5 +++++ src/utils/cos/s3.backend.ts | 10 +++++++--- tsconfig.es.json | 8 +++++++- tsconfig.lib.json | 3 ++- 9 files changed, 35 insertions(+), 12 deletions(-) diff --git a/es/utils/cos/aliyun.backend.js b/es/utils/cos/aliyun.backend.js index a0ea00646..e8b91d500 100644 --- a/es/utils/cos/aliyun.backend.js +++ b/es/utils/cos/aliyun.backend.js @@ -151,6 +151,7 @@ export default class ALiYunBackend extends ALiYun { const { instance, config: aliyunCosConfig } = this.getConfigAndInstance(application); const b = aliyunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket); assert(b, `extraFile中的bucket名称在阿里云配置中找不到「${extraFile.bucket}」`); + assert(extraFile.chunkInfo?.uploadId, 'extraFile缺少chunkInfo.uploadId,无法中止分片上传操作'); await instance.abortMultipartUpload(extraFile.bucket, b.zone, key, extraFile.chunkInfo.uploadId); } async listMultipartUploads(application, extraFile, context) { @@ -158,6 +159,7 @@ export default class ALiYunBackend extends ALiYun { const { instance, config: aliyunCosConfig } = this.getConfigAndInstance(application); const b = aliyunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket); assert(b, `extraFile中的bucket名称在阿里云配置中找不到「${extraFile.bucket}」`); + assert(extraFile.chunkInfo?.uploadId, 'extraFile缺少chunkInfo.uploadId,无法列出分片上传信息'); return await instance.listParts(extraFile.bucket, b.zone, key, extraFile.chunkInfo.uploadId); } async presignFile(methods, application, extraFile, context) { diff --git a/es/utils/cos/s3.backend.js b/es/utils/cos/s3.backend.js index da1def03e..f5924f24a 100644 --- a/es/utils/cos/s3.backend.js +++ b/es/utils/cos/s3.backend.js @@ -134,13 +134,15 @@ export default class S3Backend extends S3 { async abortMultipartUpload(application, extraFile, context) { const key = this.formKey(extraFile); const { instance, config: s3CosConfig } = this.getConfigAndInstance(application, extraFile.bucket); + assert(extraFile.chunkInfo?.uploadId, 'extraFile缺少chunkInfo.uploadId,无法中止分片上传操作'); await instance.abortMultipartUpload(extraFile.bucket, key, extraFile.chunkInfo.uploadId, s3CosConfig.endpoint); } async listMultipartUploads(application, extraFile, context) { const key = this.formKey(extraFile); const { instance, config: s3CosConfig } = this.getConfigAndInstance(application, extraFile.bucket); - const result = await instance.listParts(extraFile.bucket, key, extraFile.chunkInfo.uploadId, s3CosConfig.endpoint, 101); - assert(result.isTruncated === false, `分片数量超过101,无法列出所有分片信息,不应当出现这个情况,触发器中已经限制了最大分片数量为100`); + const result = await instance.listParts(extraFile.bucket, key, extraFile.chunkInfo.uploadId, s3CosConfig.endpoint, 1001); + assert(result.isTruncated === false, `分片数量超过1001,无法列出所有分片信息,不应当出现这个情况,触发器中已经限制了最大分片数量为100`); + assert(extraFile.chunkInfo?.uploadId, 'extraFile缺少chunkInfo.uploadId,无法列出分片上传信息'); return { parts: result.parts.map((part) => ({ partNumber: part.partNumber, diff --git a/lib/utils/cos/aliyun.backend.js b/lib/utils/cos/aliyun.backend.js index 432b43b39..e3a95f8b8 100644 --- a/lib/utils/cos/aliyun.backend.js +++ b/lib/utils/cos/aliyun.backend.js @@ -154,6 +154,7 @@ class ALiYunBackend extends aliyun_1.default { const { instance, config: aliyunCosConfig } = this.getConfigAndInstance(application); const b = aliyunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket); (0, assert_1.assert)(b, `extraFile中的bucket名称在阿里云配置中找不到「${extraFile.bucket}」`); + (0, assert_1.assert)(extraFile.chunkInfo?.uploadId, 'extraFile缺少chunkInfo.uploadId,无法中止分片上传操作'); await instance.abortMultipartUpload(extraFile.bucket, b.zone, key, extraFile.chunkInfo.uploadId); } async listMultipartUploads(application, extraFile, context) { @@ -161,6 +162,7 @@ class ALiYunBackend extends aliyun_1.default { const { instance, config: aliyunCosConfig } = this.getConfigAndInstance(application); const b = aliyunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket); (0, assert_1.assert)(b, `extraFile中的bucket名称在阿里云配置中找不到「${extraFile.bucket}」`); + (0, assert_1.assert)(extraFile.chunkInfo?.uploadId, 'extraFile缺少chunkInfo.uploadId,无法列出分片上传信息'); return await instance.listParts(extraFile.bucket, b.zone, key, extraFile.chunkInfo.uploadId); } async presignFile(methods, application, extraFile, context) { diff --git a/lib/utils/cos/s3.backend.js b/lib/utils/cos/s3.backend.js index ecf02aa1b..f10f54579 100644 --- a/lib/utils/cos/s3.backend.js +++ b/lib/utils/cos/s3.backend.js @@ -117,8 +117,8 @@ class S3Backend extends s3_1.default { }; } /** - * 完成分片上传后的合并操作 - */ +* 完成分片上传后的合并操作 +*/ async mergeChunkedUpload(application, extraFile, parts, context) { const key = this.formKey(extraFile); const { instance, config: s3CosConfig } = this.getConfigAndInstance(application, extraFile.bucket); @@ -137,13 +137,15 @@ class S3Backend extends s3_1.default { async abortMultipartUpload(application, extraFile, context) { const key = this.formKey(extraFile); const { instance, config: s3CosConfig } = this.getConfigAndInstance(application, extraFile.bucket); + (0, assert_1.assert)(extraFile.chunkInfo?.uploadId, 'extraFile缺少chunkInfo.uploadId,无法中止分片上传操作'); await instance.abortMultipartUpload(extraFile.bucket, key, extraFile.chunkInfo.uploadId, s3CosConfig.endpoint); } async listMultipartUploads(application, extraFile, context) { const key = this.formKey(extraFile); const { instance, config: s3CosConfig } = this.getConfigAndInstance(application, extraFile.bucket); - const result = await instance.listParts(extraFile.bucket, key, extraFile.chunkInfo.uploadId, s3CosConfig.endpoint, 101); - (0, assert_1.assert)(result.isTruncated === false, `分片数量超过101,无法列出所有分片信息,不应当出现这个情况,触发器中已经限制了最大分片数量为100`); + const result = await instance.listParts(extraFile.bucket, key, extraFile.chunkInfo.uploadId, s3CosConfig.endpoint, 1001); + (0, assert_1.assert)(result.isTruncated === false, `分片数量超过1001,无法列出所有分片信息,不应当出现这个情况,触发器中已经限制了最大分片数量为100`); + (0, assert_1.assert)(extraFile.chunkInfo?.uploadId, 'extraFile缺少chunkInfo.uploadId,无法列出分片上传信息'); return { parts: result.parts.map((part) => ({ partNumber: part.partNumber, diff --git a/package.json b/package.json index 53b950dd2..e8a4707b8 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,6 @@ "classnames": "^2.3.1", "compressorjs": "^1.2.1", "copy-to-clipboard": "^3.3.3", - "csstype": "^3.1.3", "dayjs": "^1.11.9", "nodemailer": "^6.9.14", "oak-common-aspect": "file:../oak-common-aspect", diff --git a/src/utils/cos/aliyun.backend.ts b/src/utils/cos/aliyun.backend.ts index f27882ad6..5545b8e34 100644 --- a/src/utils/cos/aliyun.backend.ts +++ b/src/utils/cos/aliyun.backend.ts @@ -268,6 +268,8 @@ export default class ALiYunBackend `extraFile中的bucket名称在阿里云配置中找不到「${extraFile.bucket}」` ); + assert(extraFile.chunkInfo?.uploadId, 'extraFile缺少chunkInfo.uploadId,无法中止分片上传操作'); + await instance.abortMultipartUpload( extraFile.bucket!, b.zone, @@ -298,6 +300,9 @@ export default class ALiYunBackend b, `extraFile中的bucket名称在阿里云配置中找不到「${extraFile.bucket}」` ); + + assert(extraFile.chunkInfo?.uploadId, 'extraFile缺少chunkInfo.uploadId,无法列出分片上传信息'); + return await instance.listParts( extraFile.bucket!, b.zone, diff --git a/src/utils/cos/s3.backend.ts b/src/utils/cos/s3.backend.ts index bbf5d0630..26d3023db 100644 --- a/src/utils/cos/s3.backend.ts +++ b/src/utils/cos/s3.backend.ts @@ -250,10 +250,12 @@ export default class S3Backend extends S3 implements CosBackend { const { instance, config: s3CosConfig } = this.getConfigAndInstance(application, extraFile.bucket!); + assert(extraFile.chunkInfo?.uploadId, 'extraFile缺少chunkInfo.uploadId,无法中止分片上传操作'); + await instance.abortMultipartUpload( extraFile.bucket!, key, - extraFile.chunkInfo!.uploadId!, + extraFile.chunkInfo!.uploadId, s3CosConfig.endpoint! ); } @@ -279,14 +281,16 @@ export default class S3Backend extends S3 implements CosBackend { key, extraFile.chunkInfo!.uploadId!, s3CosConfig.endpoint!, - 101, + 1001, ); assert( result.isTruncated === false, - `分片数量超过101,无法列出所有分片信息,不应当出现这个情况,触发器中已经限制了最大分片数量为100` + `分片数量超过1001,无法列出所有分片信息,不应当出现这个情况,触发器中已经限制了最大分片数量为100` ); + assert(extraFile.chunkInfo?.uploadId, 'extraFile缺少chunkInfo.uploadId,无法列出分片上传信息'); + return { parts: result.parts.map((part) => ({ partNumber: part.partNumber, diff --git a/tsconfig.es.json b/tsconfig.es.json index 4aff95e6b..df9cd63f6 100644 --- a/tsconfig.es.json +++ b/tsconfig.es.json @@ -2,7 +2,8 @@ "compilerOptions": { "jsx": "react-native", /* Basic Options */ - // "incremental": true, /* Enable incremental compilation */ + "incremental": true, /* Enable incremental compilation */ + "tsBuildInfoFile": ".tsbuildinfo", "target": "ESNext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ "module": "ESNext", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ "lib": [ @@ -90,6 +91,11 @@ "test", "scripts" ], + // 解决编译时多类型冲突的问题 + "paths": { + "react": ["./node_modules/@types/react"], + "csstype": ["./node_modules/csstype"] + }, "oakBuildChecks": { "context": { "checkAsyncContext": false diff --git a/tsconfig.lib.json b/tsconfig.lib.json index cc8e8f2a5..d1e3f6b00 100644 --- a/tsconfig.lib.json +++ b/tsconfig.lib.json @@ -2,7 +2,8 @@ "compilerOptions": { "jsx": "react-jsx", /* Basic Options */ - // "incremental": true, /* Enable incremental compilation */ + "incremental": true, /* Enable incremental compilation */ + "tsBuildInfoFile": ".tsbuildinfo", "target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ "lib": [