列出 AWS S3 SDK 中的特定对象
List specific objects in AWS S3 SDK
我正在尝试使用 SDK 删除存储桶中的多个对象,但是当我将 KeyVersions 列表传递给方法 .deleteObjects(deleteObjectsRequest) 时,他实际上从我的列表中删除了对象,但是如果我传递一个列表包含一个或多个不在 Bucket 内的对象,它会删除找到的对象,但不会 return 哪些对象因为未找到而未被删除。
private void deleteMultipleObjectsFromS3(final List<KeyVersion> objectsKeys) {
final DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(this.bucketName)
.withKeys(objectsKeys)
.withQuiet(false);
try {
s3Client.deleteObjects(deleteObjectsRequest);
} catch (final AmazonServiceException e) {
throw new AmazonSdkException(e, e.getErrorMessage(), DELETE_OPERATION,
this.bucketName, objectsKeys.toString());
} catch (SdkClientException e) {
throw new AmazonSdkException(e, e.getLocalizedMessage(), DELETE_OPERATION, this.bucketName, objectsKeys.toString());
}
}
响应获取我传递的所有对象,我需要在端点中通知哪些对象已删除或未删除。
我正在使用 Java SDK 版本 1.12.181
编辑 1:
我也尝试获取对象摘要,但它return存储桶中的所有对象。我不想要的,因为我要操作的一些桶可能有超过 100.000 个对象。
final ListObjectsV2Result listObjectsV2Result = s3Client.listObjectsV2(listObjectsRequest);
final List<S3ObjectSummary> s3ObjectSummary = listObjectsV2Result.getObjectSummaries();
如果对象不存在,DeleteItem
仍然会 return 成功响应。这与 SDK 版本或语言无关,因为此响应是由底层 S3 API 编辑的 return。
如果您需要知道某个对象是否已被删除,因为您使用的是 Java SDK 的 v1:
对于每个对象,调用 doesObjectExist
传入存储桶名称和对象名称
如果 true
被 returned,添加到 toBeDeleted
列表
如果 false
被 returned,添加到 notDeleted
列表
为 toBeDeleted
中的项目调用 deleteObjects
如果有任何项目无法删除,请从 toBeDeleted
中删除并添加到 notDeleted
notDeleted
中的任何内容均未删除,toBeDeleted
中的任何内容均已删除。
我正在尝试使用 SDK 删除存储桶中的多个对象,但是当我将 KeyVersions 列表传递给方法 .deleteObjects(deleteObjectsRequest) 时,他实际上从我的列表中删除了对象,但是如果我传递一个列表包含一个或多个不在 Bucket 内的对象,它会删除找到的对象,但不会 return 哪些对象因为未找到而未被删除。
private void deleteMultipleObjectsFromS3(final List<KeyVersion> objectsKeys) {
final DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(this.bucketName)
.withKeys(objectsKeys)
.withQuiet(false);
try {
s3Client.deleteObjects(deleteObjectsRequest);
} catch (final AmazonServiceException e) {
throw new AmazonSdkException(e, e.getErrorMessage(), DELETE_OPERATION,
this.bucketName, objectsKeys.toString());
} catch (SdkClientException e) {
throw new AmazonSdkException(e, e.getLocalizedMessage(), DELETE_OPERATION, this.bucketName, objectsKeys.toString());
}
}
响应获取我传递的所有对象,我需要在端点中通知哪些对象已删除或未删除。
我正在使用 Java SDK 版本 1.12.181
编辑 1:
我也尝试获取对象摘要,但它return存储桶中的所有对象。我不想要的,因为我要操作的一些桶可能有超过 100.000 个对象。
final ListObjectsV2Result listObjectsV2Result = s3Client.listObjectsV2(listObjectsRequest);
final List<S3ObjectSummary> s3ObjectSummary = listObjectsV2Result.getObjectSummaries();
DeleteItem
仍然会 return 成功响应。这与 SDK 版本或语言无关,因为此响应是由底层 S3 API 编辑的 return。
如果您需要知道某个对象是否已被删除,因为您使用的是 Java SDK 的 v1:
对于每个对象,调用
doesObjectExist
传入存储桶名称和对象名称如果
true
被 returned,添加到toBeDeleted
列表如果
false
被 returned,添加到notDeleted
列表为
中的项目调用toBeDeleted
deleteObjects
如果有任何项目无法删除,请从
toBeDeleted
中删除并添加到notDeleted
notDeleted
中的任何内容均未删除,toBeDeleted
中的任何内容均已删除。