【问题标题】:How to put object tags on existing tagged object如何在现有的标记对象上放置对象标签
【发布时间】:2022-04-07 01:11:10
【问题描述】:

我目前正在使用 NodeJS 和 AWS S3 SDK 开发 Lambda 函数。

在本地使用无服务器离线工作时,我可以轻松地将对象 TagSet 替换为 putObjectTagging 函数,但在生产环境中,我确实遇到了这个错误:

不能为多个标签提供相同的键

在阅读 putObjectTagging 和 AWS 标签文档时,我没有找到任何解决此错误的方法,因为我认为 putObjectTagging 会替换现有对象的所有标签。

在我的代码中,我获取了现有的 TagSet 并更新了值,然后将它们放入:

let tags = await S3.getObjectTagging(bucketParam).promise();
// process on tags and set in paramsPutObjectTagging
await S3.putObjectTagging(paramsPutObjectTagging).promise();

提前谢谢你, 问候。

【问题讨论】:

  • 正如 AWS 文档所说: > PUT 对象标记 – 替换对象上的标签。您在请求 > 正文中指定标签。使用此 API 的对象标签管理有两种不同的场景。 > - 对象没有标签 - 使用此 API,您可以向对象添加一组标签(> 对象没有先前的标签)。 > - 对象有一组现有的标签 - 要修改现有的标签集,您必须>首先检索现有的标签集,在客户端修改它,然后使用>此API替换标签集。

标签: javascript node.js amazon-web-services amazon-s3 lambda


【解决方案1】:

s3:PutObjectTagging 调用将用调用中提供的TagSet 替换对象上任何现有的TagSet。虽然调用请求正文中的TagSet属性是一个数组,但数组中每个项目的Key属性必须是不同的,TagSet中不能有重复的Keys。

要向对象添加新标签同时保留现有标签,您需要使用s3:GetObjectTagging 检索现有TagSet,然后将新标签附加到TagSet 数组,然后使用s3:PutObjectTagging如上所述。执行此操作时,您需要检查从 s3:GetObjectTagging 检索到的 TagSet 中是否没有与您尝试添加的新标签相同的 Key 的标签 - 这可能就是您要添加的原因得到那个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-22
    • 2017-05-23
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多