检查S3中是否存在“文件夹”

Fir*_*urn 3 java amazon-s3

我在使用这段代码时遇到了一些问题:

public boolean isExists(String key) {
    try {
        this.s3Client.getObjectMetadata(this.bucketName, key);
        return true;
    } catch (AmazonServiceException var3) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

它总是返回 false,即使 S3 中的“文件夹”存在(空或非空),可能会出现什么问题?

上面的代码s3Client只是一个简单的AmazonS3客户端:

AmazonS3 s3client = AmazonS3ClientBuilder
    .standard()
    .withCredentials(new AWSStaticCredentialsProvider(credentials))
    .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(objectStoreEndpoint, objectStoreRegion))
    .build();
Run Code Online (Sandbox Code Playgroud)

检查 S3 中是否存在文件夹的正确方法是什么?

xyb*_*rek 8

解决这个问题的方法是:

public boolean isExists(String key) {
    ListObjectsV2Result result = this.s3Client.listObjectsV2(this.bucketName, key);
    return result.getKeyCount() > 0;
}
Run Code Online (Sandbox Code Playgroud)

空“文件夹”(实际上)将返回键计数 1。