将AWS SDK V2上传函数重构至V3时获取Key字段的问题
AWS SDK V3 PutObjectCommand 无返回Key字段的解决办法
从AWS SDK V2迁移到V3时,用PutObjectCommand替代V2的.upload()方法后,确实会遇到响应里没有Key字段的情况——这不是bug,是两个API的设计差异:
- V2的
.upload()是高层封装的上传工具,返回的S3.ManagedUpload.SendData会主动把请求参数里的Key回传回来; - V3的
PutObjectCommand是底层API调用,AWS服务响应本身就不包含Key(因为请求时已经明确传了这个值,没必要重复返回)。
解决办法
既然请求时你已经持有key变量,直接复用它就行,没必要从响应里提取。如果需要让返回结果和V2的结构保持一致,可以自己组装返回对象:
const params = { Bucket: process.env.s3BucketAWS, Key: key, ContentType: mimeType, Body: streamData, }; const command = new PutObjectCommand(params); const data = await s3Client.send(command); // 组装包含Key的返回对象,和V2返回格式对齐 return { ...data, Key: key, Location: `https://${params.Bucket}.s3.amazonaws.com/${key}` // 可选:如果需要Location字段也可以自行拼接 };
这样返回的结果就和V2的SendData结构类似,包含你需要的Key字段了。
内容的提问来源于stack exchange,提问作者Aymen___Soussi
相关产品推荐
相关产品推荐

