java - 区分同名的文件和文件夹 aws s3

标签 java amazon-web-services amazon-s3

我似乎不明白这是如何工作的。

假设我有以下结构:

s3:/bucket1/file1
s3:/bucket1/file2
s3:/bucket1/dir1/file3
s3:/bucket1/dir1/file4

现在,当我想列出所有内容(包括“目录”,例如 dir1)时,我可以这样做:

    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
            .withBucketName("bucket1")
            .withPrefix("")
            .withDelimiter("/");

    return awsS3Client.listObjects(listObjectsRequest);

这里Objectsummaries包含file1和file2,公共(public)前缀包含dir1

为了列出/bucket1/dir1 的内容,我可以这样做

    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
            .withBucketName("bucket1")
            .withPrefix("dir1/")
            .withDelimiter("/");

    return awsS3Client.listObjects(listObjectsRequest);

现在,如果我想检查某个文件夹是否存在,我可以这样做:

    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
            .withBucketName("bucket1")
            .withPrefix("dir1/")
            .withDelimiter("/");

    return awsS3Client.listObjects(listObjectsRequest).getObjectSummiaries().size() > 0;

在这里,我检查是否找到了一个对象。

我想检查某个文件是否存在:

    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
            .withBucketName("bucket1")
            .withPrefix("file1")
            .withDelimiter("/");
    return awsS3Client.listObjects(listObjectRequest).getObjectSummaries().size() == 1

但我的问题是,为了模拟目录,我们在其中放置空内容的对象,并在末尾添加“/”,这意味着我可以拥有同名的文件和目录。那我该如何区分呢?

最佳答案

多个对象不能具有相同的键。

这意味着您使用给定键添加的最新内容获胜。不可能混淆同名的“文件夹”和"file"。

实际上,S3 中没有文件夹的概念,控制台只是因为文件系统的工作原理而给我们这样的印象。如果您将 S3 视为键/值对数据库,那就更好了。

关于java - 区分同名的文件和文件夹 aws s3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61390599/

相关文章:

mysql - 如何从终端连接到 AWS mysql 数据库实例

c++ - 上传图像文件在 AWS S3 C++ SDK 上花费的时间太长

amazon-s3 - 从集群将整数/字符串写入 pyspark 中的文本文件

hadoop - 如何运行从 hdfs 到 s3 的加密 distcp?

java - 线程对象可以设置为静态变量吗

java - 如何在 Java 8 中使用 Java 7 HashMap?

java - UCanAccess异常 "Unsupported newer version: 5"

amazon-web-services - AWS Cloudformation 从私有(private) S3 AWS4-HMAC-SHA256 下载文件

ruby-on-rails - 'identify'命令无法识别图像文件。 (heroku)

java - 你如何确保用户输入只是整数?