使用API​​在amazon S3存储桶中创建文件夹/上传文件

Sha*_*ine 4 java amazon amazon-s3

我是亚马逊和java的新手.我在这里尝试两件事.

1st - 我正在尝试在我已创建的Amazon S3存储桶中创建一个文件夹,并且已获取凭据.

第二 - 我正在尝试将文件上传到此存储桶.

根据我的理解,我可以使用putObjectRequest()方法来实现我的两个任务.

PutObjectRequest(bucketName, keyName, file) 
Run Code Online (Sandbox Code Playgroud)

用于上传文件.

我不确定我是否应该使用这种方法

PutObjectRequest(String bucketName, String key, InputStream input,
        ObjectMetadata metadata) 
Run Code Online (Sandbox Code Playgroud)

仅用于创建文件夹.我正在使用InputSteam和ObjectMetadata.我不知道这究竟是什么,我怎么能用它.

任何帮助将不胜感激.:)

Joh*_*ein 13

您无需在Amazon S3中创建文件夹.实际上,文件夹不存在!

而是,Key(filename)包含完整路径和对象名称.

例如,如果调用的文件cat.jpg位于animals文件夹中,则Key(文件名)为:animals/cat.jpg

只需Put一个具有该键的对象和文件夹就会自动创建.(实际上,这不是真的,因为没有文件夹,但这是想象这个概念的简单方法.)

至于使用哪种功能......总是使用最简单的功能来满足您的需求.因此,只需使用PutObjectRequest(bucketName, keyName, file).


Sha*_*Guo 3

是的,您可以使用 PutObjectRequest(bucketName, keyName, file) 来完成这两个任务。

1、创建S3文件夹
使用AWS S3 Java SDK,只需在键名末尾添加“/”,就会创建空文件夹。

var folderKey =  key + "/"; //end the key name with "/"
Run Code Online (Sandbox Code Playgroud)

示例代码:

final InputStream im = new InputStream() {
      @Override
      public int read() throws IOException {
        return -1;
      }
    };
    final ObjectMetadata om = new ObjectMetadata();
    om.setContentLength(0L);
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, im, om);
    s3.putObject(putObjectRequest);
Run Code Online (Sandbox Code Playgroud)

2、上传文件 类似地,您可以从本地文件中获取输入流。