java—检查s3中是否存在“文件夹”

vjhs03f7  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(967)

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

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

它总是返回false,即使s3中的“folder”存在(空或非空),会有什么问题?
这个 s3Client 在上面的代码中,只有一个简单的amazons3客户端:

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

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

dgenwo3n

dgenwo3n1#

解决方法是:

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

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

pjngdqdw

pjngdqdw2#

s3没有文件夹,只有bucket和objects。大多数开发人员使用 / 字符来语义组织对象名,但是s3没有文件系统那样的目录结构。特别是,s3上永远不可能有“空目录”这样的东西。
你能做的最接近的就是基于前缀列出。

相关问题