Существует ли полный список метаданных объекта S3? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть куча файлов в корзине S3.Мне нужно просмотреть их и добавить некоторые метаданные, для которых я использую клиент узла .API S3 не делает это так просто, как хотелось бы.Из документов :

Обратите внимание, что если вы решите обновить какие-либо метаданные, настраиваемые пользователем (системные или пользовательские) объекта во время копирования, то вы должны явно указатьвсе настраиваемые пользователем метаданные, присутствующие в исходном объекте в вашем запросе, даже если вы изменяете только одно из значений метаданных.

Хорошо, но это работает, только если у вас есть полный списокметаданных, которые может иметь объект S3.Я нашел этот список , но он не полный.Например, он не содержит ContentType.Если я загружаю объект таким количеством вещей, сколько я могу себе представить, я получаю это:

aws s3api head-object --bucket my-bucket --key some-file
{
    "AcceptRanges": "bytes", 
    "ContentType": "video/mp4", 
    "LastModified": "Sat, 18 May 2019 18:18:50 GMT", 
    "ContentLength": 50957711, 
    "VersionId": "null", 
    "ETag": "\"2d8a6acea8c37217a034d841084c6727-4\"", 
    "StorageClass": "ONEZONE_IA", 
    "ServerSideEncryption": "aws:kms", 
    "CacheControl": "cc", 
    "SSEKMSKeyId": "arn:aws:kms:us-east-1:999999999999:key/99999999-9999-9999-9999-999999999999", 
    "Metadata": {
        "val1": "test1", 
        "val2": "test2"
    }
}

Это весь список?Я понятия не имею, и я не могу найти документацию.Кроме того, что произойдет, если aws решит добавить больше системных метаданных позже?

Я также попытался скопировать существующий заголовок следующим образом:

const p1 = { Bucket: bucket, Key: obj.Key, CopySource: `${bucket}/${obj.Key}`, MetadataDirective: 'REPLACE' };
const p2 = Object.assign(p1, head, { Metadata: { prop1: 'val1' } });
await s3.copyObject(p2).promise();

Это привело к таким ошибкам:

  • UnexpectedParameter: в параметрах

обнаружен неожиданный ключ ContentLength, поскольку определенные системные метаданные доступны только для чтения.Я мог бы просто сделать это

delete p2.ContentLength

, но это имеет аналогичную проблему, так как я не знаю, какие другие метаданные только для чтения они могут ввести в будущем.По крайней мере, мне не нужно знать все существующие элементы метаданных.

Или если есть альтернативный подход к этому, это было бы хорошо.Надеюсь, кто-то придумал более разумный способ справиться с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...