【问题标题】:AWS S3 headObject not returning all metadata values in JS SDKAWS S3 headObject 未返回 JS SDK 中的所有元数据值
【发布时间】:2021-07-26 04:43:38
【问题描述】:

我在 AWS S3 存储桶中有一个对象,上面设置了一些元数据键。我在 AWS v2 JavaScript SDK 中使用 headObject() 获取键和值。

const headParams = {
    Bucket: "THE_BUCKET", 
    Key: "THE_KEY"
};

S3.headObject(headParams, (err, data) => {
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});

如果我随后使用 copyObject() 按键“修改”其中之一:

objectMetadata["SOME_EXISTING_METADATA_KEY"] = "Some New Value";

const params = {    
    Bucket: "THE_BUCKET", 
    Key: "THE_KEY",
    CopySource: "THE_BUCKET/THE_KEY",
    MetadataDirective: "REPLACE",
    ACL: "public-read",
    'Metadata': objectMetadata
};

S3.copyObject(params, (err, data) => {
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});

然后再次调用headObject(),我得到了更新后的值,正如预期的那样。

如果我使用上面相同的 copyObject() 代码,但尝试添加对象上尚不存在的新元数据键:

...
objectMetadata["SOME_NEW_METADATA_KEY"] = "Some New Value";
...

我在 S3 控制台中看到了新值,但是当我再次调用 headObject() 时,新的元数据键没有出现。

但是,LastModified 标头中的时间戳显示当我添加新密钥时对象已被修改。而且,如果我使用 AWS CLI 检索同一对象的元数据,则会出现新键:

aws s3api head-object --bucket THE_BUCKET --key THE_KEY

{
    "AcceptRanges": "bytes",
    "LastModified": "2021-05-03T19:06:14+00:00",
    "ContentLength": 18340648,
    "ETag": "\"a8...\"",
    "ContentType": "application/octet-stream; charset=UTF-8",
    "Metadata": {
        ...
        "SOME_NEW_METADATA_KEY": "Some New Value",
        ...
    }
}

以前有人见过这种行为吗?我无法弄清楚为什么密钥会出现在控制台和 CLI 的结果中,而不是 JavaScript SDK。特别是因为 SDK 显示更新现有密钥的结果很好。

【问题讨论】:

    标签: javascript amazon-web-services amazon-s3 aws-sdk-js


    【解决方案1】:

    我的一位同事能够追踪到这一点。万一其他人遇到这个问题,原来是 CORS 配置问题*。

    每个元数据键都需要显式添加为ExposeHeader entry in the CORS configuration

    这是 CORS 配置中的相关部分,您可以在 S3 的“权限”选项卡下的“跨域资源共享”部分中进行编辑:

        "ExposeHeaders": [
            ...
            "SOME_EXISTING_METADATA_KEY",
            "SOME_NEW_METADATA_KEY"
        ]
    

    * 应该知道。正如我祖父喜欢说的,“当网络上的某些东西不能正常工作时,这可能是 CORS 问题。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 2014-12-06
      • 2022-01-02
      • 2019-05-01
      • 1970-01-01
      • 2020-01-21
      相关资源
      最近更新 更多