Amazon S3 - 使用 Java API 批量上传文件?

Amazon S3 - Batch File Upload Using Java API?

我们希望开始使用 S3 来满足我们的一些存储需求,并且我正在寻找一种方法来执行 'N' 文件的批量上传。我已经使用 Java API 编写了代码来执行单个文件上传,但是有没有办法提供要传递到 S3 存储桶的文件列表?

我确实看过以下问题 is-it-possible-to-perform-a-batch-upload-to-amazon-s3,但那是两年前的事了,我很好奇情况是否有任何变化。我似乎找不到在代码中执行此操作的方法。

我们想要做的是能够设置一个内部作业(可能使用 Spring 中的计划任务)来每晚转换文件组。我希望有一种方法可以做到这一点,而不是仅仅遍历它们并为每个请求执行放置请求,或者必须将批次压缩到 S3 上。

如果您使用 Java 的 AWS 开发工具包,最简单的方法是 TransferManager。它的 uploadFileList 方法获取文件列表并将它们并行上传到 S3,或者 uploadDirectory 将上传本地目录中的所有文件。

public void uploadDocuments(List<File> filesToUpload) throws 
    AmazonServiceException, AmazonClientException,
    InterruptedException {
    AmazonS3 s3 = AmazonS3ClientBuilder.standard().withCredentials(getCredentials()).withRegion(Regions.AP_SOUTH_1)
            .build();

    TransferManager transfer = TransferManagerBuilder.standard().withS3Client(s3).build();
    String bucket = Constants.BUCKET_NAME;

    MultipleFileUpload upload = transfer.uploadFileList(bucket, "", new File("."), filesToUpload);
    upload.waitForCompletion();
}

private AWSCredentialsProvider getCredentials() {
    String accessKey = Constants.ACCESS_KEY;
    String secretKey = Constants.SECRET_KEY;
    BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
    return new AWSStaticCredentialsProvider(awsCredentials);

}