java - 使用 S3 DeleteObject 仅删除文件,保持目录结构不变

标签 java amazon-web-services amazon-s3 aws-sdk

我只需要删除 Amazon S3 中特定目录下的文件, 我的文件路径如下

s3://{s3_bucket}/folder1/sub-folder2/sub-folder3/sub-folder4/sub-folder5/sub-folder6/sub-folder7/sub-folder8/sub-folder9/file.txt

我使用下面的代码从上面的目录结构中单独删除文件

public static void deleteFilesInDirectory(String bucketName, String prefix) {       
        String delimiter = "/";
        if (!prefix.endsWith(delimiter)) {
            prefix += delimiter;
        }
        ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
                .withBucketName(bucketName).withPrefix(prefix);

        ObjectListing objects = s3client.listObjects(listObjectsRequest);       
        for(S3ObjectSummary summary:objects.getObjectSummaries())
        {
            if(!summary.getKey().endsWith("/"))
            {
            s3client.deleteObject(bucketName, summary.getKey());
            }           
        }      
    }

以上代码删除了目录sub-folder3/sub-folder4/sub-folder5/sub-folder6/sub-folder7/sub-folder8/sub-folder9/

但是我需要上面的目录结构。

我对 api 的理解是否正确,有人可以帮助我吗

是否有任何其他替代方法可以使用 java 仅删除特定 s3 目录下的文件?

最佳答案

S3 没有目录结构。这是一个完全扁平的文件系统。名为 foo/bar 的对象只是:名为 foo/bar 的对象,而不是名为 的目录中名为 bar 的对象富。如果您删除了 foo/bar,并且桶中没有其他以字符串 foo/ 开头的对象,它看起来像“目录”foo 被删除了,但它从一开始就不存在。因此,要再次创建一个名为 foo/bar 的对象,您不需要先创建一个名为 foo/ 的目录;只需创建一个名为 foo/bar 的对象。

关于java - 使用 S3 DeleteObject 仅删除文件,保持目录结构不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38844148/

相关文章:

amazon-web-services - 获取文件从 SFTP 到 S3 AWS

amazon-web-services - 如何使用 Terraform 加密 S3 存储桶

javascript - AWS S3 无法访问的主机

java - Dropwizard Sundial 使用 Hibernate 对象安排任务

java - 线程安全和线程兼容有什么区别?

java - 停止发送 GPS 坐标 Android

java - 使用 SSE 预签名 URL

amazon-web-services - 将 AMI 用于 EC2 资源时陷入 WAITING_FOR_RUNNER

amazon-web-services - 列出具有特定存储类的 S3 存储桶对象

java - 异步网络服务 SOAP