英文:
How to check for deleted versions in AWS SDK v3 S3 ListObjectVersionsCommand
问题
以下是您要翻译的代码部分:
const command = new ListObjectVersionsCommand({
Bucket: s3Bucket,
Prefix: fullPath
});
const response = await s3Client.send(command);
response
具有以下结构:
{
"$metadata": {
"httpStatusCode": number,
"requestId": string,
"extendedRequestId": string,
"cfId": string,
"attempts": number,
"totalRetryDelay": number
},
"DeleteMarkers": [
{
"Owner": {
"DisplayName": string,
"ID": string
},
"Key": string,
"VersionId": string,
"IsLatest": boolean,
"LastModified": string
}
],
"IsTruncated": boolean,
"KeyMarker": string,
"MaxKeys": number,
"Name": string,
"Prefix": string,
"VersionIdMarker": string,
"Versions": [
{
"ETag": string,
"Size": number,
"StorageClass": string,
"Key": string,
"VersionId": string,
"IsLatest": boolean,
"LastModified": string,
"Owner": {
"DisplayName": string,
"ID": string
}
}
]
}
您的问题是,如何检查哪个版本已被删除?我看到 response.DeleteMarkers
但它似乎没有与 response.Versions
之间的关联。我已经搜索了一段时间,甚至向 ChatGPT 寻求帮助,但它只会产生虚构的答案并将它们呈现为事实,我从中得到的答案都是错误的,而我的搜索结果也没有给我提供答案。
response.DeleteMarkers.VersionId
和 response.Versions.VersionId
是不同的,彼此不相关,似乎它们是各个条目的 Id
。
当我从S3存储桶查看时,似乎 DeleteMarker
应该在每个版本中有引用。
但我收到的JSON响应不反映这一点。
示例响应:
{
"$metadata": {
"httpStatusCode": 200,
"requestId": "5ZWDEPHH55T26MBM",
"extendedRequestId": "Ww6lV9BFYu5ZJ4ySVg0FVvGTolvwiQfLkmkXfUJnHRdzLBqx0xyNyNgvvYPfEYOBcSvgXHp3u3c=",
"cfId": "yKku_yzmm53yfJJqeLCZBA7uRRzmuTxjkZo3nw7Oy7vDANvgGbP6Vg==",
"attempts": 1,
"totalRetryDelay": 0
},
"DeleteMarkers": [
{
"Owner": [Object],
"Key": "clients/647eddb692097dc08e54a33d/test.txt",
"VersionId": "EFEHxShryx7An1wB316DhGIgLqV1pv8m",
"IsLatest": false,
"LastModified": "2023-06-16T02:01:17.000Z"
},
// 其他 DeleteMarkers
],
"IsTruncated": false,
"KeyMarker": "",
"MaxKeys": 1000,
"Name": "dev-bourkehood-hub-test-bucket",
"Prefix": "clients/647eddb692097dc08e54a33d/test.txt",
"VersionIdMarker": "",
"Versions": [
{
"ETag": "\"098f6bcd4621d373cade4e832627b4f6\"",
"Size": 4,
"StorageClass": "STANDARD",
"Key": "clients/647eddb692097dc08e54a33d/test.txt",
"VersionId": "70zachRrDvFuT7Vv1hm6lpQZoLtK78Vp",
"IsLatest": true,
"LastModified": "2023-06-16T02:33:55.000Z",
"Owner": [Object]
},
// 其他 Versions
]
}
希望这对您有所帮助。如果您有任何其他问题,请随时提出。
英文:
The following code retrieves versions of a specific object in s3 (using Prefix
).
const command = new ListObjectVersionsCommand({
Bucket: s3Bucket,
Prefix: fullPath
});
const response = await s3Client.send(command);
response
has the following shape:
{
"$metadata": {
"httpStatusCode": number,
"requestId": string,
"extendedRequestId": string,
"cfId": string,
"attempts": number,
"totalRetryDelay": number
},
"DeleteMarkers": [
{
"Owner": {
"DisplayName": string,
"ID": string
},
"Key": string,
"VersionId": string,
"IsLatest": boolean,
"LastModified": string
}
],
"IsTruncated": boolean,
"KeyMarker": string,
"MaxKeys": number,
"Name": string,
"Prefix": string,
"VersionIdMarker": string,
"Versions": [
{
"ETag": string,
"Size": number,
"StorageClass": string,
"Key": string,
"VersionId": string,
"IsLatest": boolean,
"LastModified": string,
"Owner": {
"DisplayName": string,
"ID": string
}
}
]
}
My question is, how do I check which version has been deleted? I saw response.DeleteMarkers
but it's pretty useless as it does not have any reference in or to response.Versions
. I have been googling for a while now and even asked ChatGPT as well for help, but it just keeps on hallucinating answers and presenting them as facts, the answers I got from it are all wrong (https://chat.openai.com/share/5c1e8cfc-d8dd-45fa-a9e0-615ebf8119a6) and my search results hasn't presented me with an answer.
response.DeleteMarkers.VersionId
and response.Versions.VersionId
are different and not related to each other, seems like they are Id
s of the individual entries.
When I look at it from the S3 Bucket, I can see that it seems like the DeleteMarker
is supposed to have reference in each versions.
But the JSON response I get doesn't reflect this.
Example response:
{
'$metadata': {
httpStatusCode: 200,
requestId: '5ZWDEPHH55T26MBM',
extendedRequestId: 'Ww6lV9BFYu5ZJ4ySVg0FVvGTolvwiQfLkmkXfUJnHRdzLBqx0xyNyNgvvYPfEYOBcSvgXHp3u3c=',
cfId: 'yKku_yzmm53yfJJqeLCZBA7uRRzmuTxjkZo3nw7Oy7vDANvgGbP6Vg==',
attempts: 1,
totalRetryDelay: 0
},
DeleteMarkers: [
{
Owner: [Object],
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'EFEHxShryx7An1wB316DhGIgLqV1pv8m',
IsLatest: false,
LastModified: 2023-06-16T02:01:17.000Z
},
{
Owner: [Object],
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'MjuTh1iTW5mqTSjDX_kCtthHr0_crBUw',
IsLatest: false,
LastModified: 2023-06-16T01:46:45.000Z
},
{
Owner: [Object],
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'adY0h6KPkVlvpkUN_Qb7V4HT8ZFIdMsF',
IsLatest: false,
LastModified: 2023-06-16T00:58:51.000Z
},
{
Owner: [Object],
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'EXo0b3gRDiQoHKS7QcCT2ewIu4e9C0BK',
IsLatest: false,
LastModified: 2023-06-16T00:40:04.000Z
}
],
IsTruncated: false,
KeyMarker: '',
MaxKeys: 1000,
Name: 'dev-bourkehood-hub-test-bucket',
Prefix: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionIdMarker: '',
Versions: [
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: '70zachRrDvFuT7Vv1hm6lpQZoLtK78Vp',
IsLatest: true,
LastModified: 2023-06-16T02:33:55.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'T6R5QDuElzyptmIDvdLSBwrFHd5Mvfv.',
IsLatest: false,
LastModified: 2023-06-16T02:33:35.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'uHst7UpguHknpHRZEclsLi0LeFxZad4r',
IsLatest: false,
LastModified: 2023-06-16T02:24:02.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'NE_zEN6oDC6mvpJVsrBnwJ.ZVzJbuRJ8',
IsLatest: false,
LastModified: 2023-06-16T02:23:45.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'uwouMWFBqrLlT3cC_inY5w8UB0F07wzK',
IsLatest: false,
LastModified: 2023-06-16T02:02:17.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'WVktjgHtAYPm60Csb_IuQWDGI305YJek',
IsLatest: false,
LastModified: 2023-06-16T02:01:43.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'qT6vlzOqLTmq9tKtKSAbvfGdOz29BsJo',
IsLatest: false,
LastModified: 2023-06-16T02:01:30.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'oHefQ6AnKcTUaxyCKMYzJszPb_8MGbYW',
IsLatest: false,
LastModified: 2023-06-16T01:50:33.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'N3gvDTkIVa3C8JbPOyfMvvdGTSecZBsC',
IsLatest: false,
LastModified: 2023-06-16T01:48:38.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'LPdfQ.gBc1f.jBixDYg.muRYRxnCHe1H',
IsLatest: false,
LastModified: 2023-06-16T01:47:18.000Z,
Owner: [Object]
},
{
ETag: '"38b0d2ff1c03df82aea67222983d337e"',
Size: 6,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: '_S1xv6r63Md6yOOZEX4pagUhWNwzsDWG',
IsLatest: false,
LastModified: 2023-06-16T01:19:13.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'Ggy7wq8XnoZLsrtw.3Z1Rp7Q8I2Z_B7g',
IsLatest: false,
LastModified: 2023-06-16T01:19:03.000Z,
Owner: [Object]
},
{
ETag: '"38b0d2ff1c03df82aea67222983d337e"',
Size: 6,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'Y9RlaB9i0uq06.SWuQ5moXzB18YNvFNm',
IsLatest: false,
LastModified: 2023-06-16T00:59:48.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'Sa4za24jIQVCZoSIqPTyRBMCMXlluWpw',
IsLatest: false,
LastModified: 2023-06-16T00:59:27.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: '5MKHhqE9c.dXQNOX08Xe1HWAz9eFcocm',
IsLatest: false,
LastModified: 2023-06-16T00:55:45.000Z,
Owner: [Object]
},
{
ETag: '"38b0d2ff1c03df82aea67222983d337e"',
Size: 6,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: 'dCA6e.5VeDRpWvjxg4L1p3_SUaOEeuW5',
IsLatest: false,
LastModified: 2023-06-16T00:23:10.000Z,
Owner: [Object]
},
{
ETag: '"098f6bcd4621d373cade4e832627b4f6"',
Size: 4,
StorageClass: 'STANDARD',
Key: 'clients/647eddb692097dc08e54a33d/test.txt',
VersionId: '3ZaLnwr63vNpeVrzjP14AGM5LuW9c0og',
IsLatest: false,
LastModified: 2023-06-16T00:06:21.000Z,
Owner: [Object]
}
]
}
答案1
得分: 1
当特定版本的对象被删除时,它将从Amazon S3中移除,不会出现在任何列表中。
当在启用版本控制的S3存储桶中删除对象时,会添加一个删除标记作为“最新版本”。这使得对象看起来好像已被删除,但先前的版本仍然被保留。
如果对象的当前版本是一个删除标记,那么该对象不会出现在普通对象列表中,但会出现在 ListObjectVersions()
中。
英文:
When a specific Version of an object is deleted, it is removed from Amazon S3. It will not appear in any listing.
When an object is deleted in a version-enabled S3 bucket, a Delete Marker is added as the 'latest version'. This makes the object 'appear' as if it has been deleted, but previous versions have still been retained.
If the current version of an object is a Delete Marker, then the object will not appear in a normal listing of objects, but it will appear in ListObjectVersions()
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论