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,