From 15c064492841be9eb6748dda1f31cf54dbf39ec1 Mon Sep 17 00:00:00 2001 From: abearxiong Date: Mon, 2 Mar 2026 01:40:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AF=B9=E8=B1=A1=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E6=97=B6=E5=AF=B9=20CopySource=20=E8=BF=9B=E8=A1=8C=20URL=20?= =?UTF-8?q?=E7=BC=96=E7=A0=81=E4=BB=A5=E5=A4=84=E7=90=86=E7=89=B9=E6=AE=8A?= =?UTF-8?q?=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/s3/copy-object.ts | 3 ++- src/s3/core.ts | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 13b0d69..c457b1e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kevisual/oss", - "version": "0.0.19", + "version": "0.0.20", "main": "dist/index.js", "scripts": { "build": "bun run bun.config.ts" diff --git a/src/s3/copy-object.ts b/src/s3/copy-object.ts index 0f8c8e1..0ae419d 100644 --- a/src/s3/copy-object.ts +++ b/src/s3/copy-object.ts @@ -27,9 +27,10 @@ export const copyObject = async ({ bucketName, newMetadata, objectName, client } const { standardHeaders, customMetadata } = extractStandardHeaders(mergedMeta); // 执行复制操作(同一对象,用于更新元数据) + // 注意:CopySource 中的 key 必须进行 URL 编码,否则包含特殊字符时会报错 const copyCommand = new CopyObjectCommand({ Bucket: bucketName, - CopySource: `${bucketName}/${objectName}`, + CopySource: `${bucketName}/${encodeURIComponent(objectName)}`, Key: objectName, ContentType: standardHeaders.ContentType, CacheControl: standardHeaders.CacheControl, diff --git a/src/s3/core.ts b/src/s3/core.ts index 6bdb709..5e66571 100644 --- a/src/s3/core.ts +++ b/src/s3/core.ts @@ -420,7 +420,7 @@ export class OssBase implements OssBaseOperation { async copyObject(sourceObject: string, targetObject: string): Promise { const command = new CopyObjectCommand({ Bucket: this.bucketName, - CopySource: `${this.bucketName}/${this.prefix}${sourceObject}`, + CopySource: `${this.bucketName}/${encodeURIComponent(this.prefix + sourceObject)}`, Key: `${this.prefix}${targetObject}`, }); const response = await this.client.send(command); @@ -443,7 +443,7 @@ export class OssBase implements OssBaseOperation { const command = new CopyObjectCommand({ Bucket: this.bucketName, - CopySource: `${this.bucketName}/${key}`, + CopySource: `${this.bucketName}/${encodeURIComponent(key)}`, Key: key, ContentType: standardHeaders.ContentType, CacheControl: standardHeaders.CacheControl,