Amazon Web Services (AWS) S3 Java 创建子目录 (对象)

2022-09-01 11:14:37

我熟悉AWS Java开发工具包,我也尝试过浏览相应的Javadoc,但是我无法意识到如何创建子目录,即存储桶中的目录对象,以及如何将文件上传到其中。

假设并对应于已经存在的存储桶(具有公有权限)和需要在存储桶中创建的新(对象)目录(即 bucketName/dirName/)bucketNamedirName

我尝试了以下方法:

AmazonS3Client s3 = new AmazonS3Client(
    new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY));
s3.createBucket(bucketName + "/" + dirName); //throws exception

这会在第二行引发异常。

创建子目录并将文件上传到其中的简短片段将不胜感激。


答案 1

S3 中没有“子目录”。有存储桶,存储桶中有键。

您可以使用前缀搜索来模拟传统目录。例如,您可以将以下键存储在存储桶中:

foo/bar1
foo/bar2
foo/bar3
blah/baz1
blah/baz2

然后执行前缀搜索,您将返回:foo/

foo/bar1
foo/bar2
foo/bar3

有关更多详细信息,请参阅 AmazonS3.listObjects


更新:假设您已经有一个现有存储桶,则该存储桶下的键将包含 :/

s3.putObject("someBucket", "foo/bar1", file1);
s3.putObject("someBucket", "foo/bar2", file2);
...

然后,您可以列出以以下列开头的所有键:foo/

ObjectListing listing = s3.listObjects("someBucket", "foo/");

答案 2

S3 不会像我们在操作系统上那样以传统方式查看目录。以下是创建目录的方法:

public static void createFolder(String bucketName, String folderName, AmazonS3 client) {
    // create meta-data for your folder and set content-length to 0
    ObjectMetadata metadata = new ObjectMetadata();
    metadata.setContentLength(0);

    // create empty content
    InputStream emptyContent = new ByteArrayInputStream(new byte[0]);

    // create a PutObjectRequest passing the folder name suffixed by /
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName,
                folderName + SUFFIX, emptyContent, metadata);

    // send request to S3 to create folder
    client.putObject(putObjectRequest);
}

正如卡萨布兰卡已经说过的那样,您可以将文件上传到这样的目录中:

s3.putObject("someBucket", "foo/bar1", file1);

有关详细信息,请在此处阅读整个教程,最重要的是您将找到有关如何删除目录的信息。


推荐