列出 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:

  1. 对于每个对象,调用 doesObjectExist 传入存储桶名称和对象名称

  2. 如果 true 被 returned,添加到 toBeDeleted 列表

  3. 如果 false 被 returned,添加到 notDeleted 列表

  4. toBeDeleted

    中的项目调用 deleteObjects
  5. 如果有任何项目无法删除,请从 toBeDeleted 中删除并添加到 notDeleted

notDeleted 中的任何内容均未删除,toBeDeleted 中的任何内容均已删除。