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

sud*_*n r 1 java amazon-s3 amazon-web-services 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
Run Code Online (Sandbox Code Playgroud)

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

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());
            }           
        }      
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码删除了目录子文件夹3 /子文件夹4 /子文件夹5 /子文件夹6 /子文件夹7 /子文件夹8 /子文件夹9 /

但我需要上面的目录结构.

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

有没有其他替代方法只使用java删除特定s3目录下的文件?

Kar*_*n B 7

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