diff --git a/packages/builder/src/storage/providers/github-provider.ts b/packages/builder/src/storage/providers/github-provider.ts index 9c51efd9..001a2f9b 100644 --- a/packages/builder/src/storage/providers/github-provider.ts +++ b/packages/builder/src/storage/providers/github-provider.ts @@ -242,7 +242,8 @@ export class GitHubStorageProvider implements StorageProvider { if (!obj.key) continue const dir = path.dirname(obj.key) - const basename = path.basename(obj.key, path.extname(obj.key)) + // use path.parse to safely get the filename without extension (case-insensitive extension handling) + const basename = path.parse(obj.key).name const groupKey = `${dir}/${basename}` if (!fileGroups.has(groupKey)) { diff --git a/packages/builder/src/storage/providers/local-provider.ts b/packages/builder/src/storage/providers/local-provider.ts index 3d8cc1c6..5672ed47 100644 --- a/packages/builder/src/storage/providers/local-provider.ts +++ b/packages/builder/src/storage/providers/local-provider.ts @@ -236,7 +236,9 @@ export class LocalStorageProvider implements StorageProvider { // 如果是图片文件,查找对应的视频文件 if (SUPPORTED_FORMATS.has(ext)) { - const baseName = path.basename(obj.key, ext) + // use path.parse to get the name without extension to avoid issues + // when the file extension has different casing (e.g. .HEIC) + const baseName = path.parse(obj.key).name const dirName = path.dirname(obj.key) // 查找对应的 .mov 文件 diff --git a/packages/builder/src/storage/providers/s3-provider.ts b/packages/builder/src/storage/providers/s3-provider.ts index 1ebd0ae8..c99ee2dd 100644 --- a/packages/builder/src/storage/providers/s3-provider.ts +++ b/packages/builder/src/storage/providers/s3-provider.ts @@ -229,7 +229,7 @@ export class S3StorageProvider implements StorageProvider { if (!obj.key) continue const dir = path.dirname(obj.key) - const basename = path.basename(obj.key, path.extname(obj.key)) + const basename = path.parse(obj.key).name const groupKey = `${dir}/${basename}` if (!fileGroups.has(groupKey)) {