我只需要删除 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/