AmazonS3-使用JavaAPI批量上传文件?

AmazonS3-使用JavaAPI批量上传文件?,java,amazon-web-services,amazon-s3,batch-processing,Java,Amazon Web Services,Amazon S3,Batch Processing,我们希望开始使用S3来满足一些存储需求,我正在寻找一种方法来执行“N”文件的批量上传。我已经编写了使用JavaAPI执行单个文件上传的代码,但是有没有一种方法可以提供一个要传递到S3存储桶的文件列表 我确实看了以下问题,但这是两年前的问题,我很好奇情况是否发生了变化。我似乎找不到在代码中实现这一点的方法 我们想做的是能够设置一个内部作业(可能在春季使用计划任务)来每晚转换文件组。我希望有一种方法可以做到这一点,而不仅仅是在它们之间循环并对每一个进行put请求,或者必须将批压缩到S3上。如果您使用

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

我确实看了以下问题,但这是两年前的问题,我很好奇情况是否发生了变化。我似乎找不到在代码中实现这一点的方法


我们想做的是能够设置一个内部作业(可能在春季使用计划任务)来每晚转换文件组。我希望有一种方法可以做到这一点,而不仅仅是在它们之间循环并对每一个进行put请求,或者必须将批压缩到S3上。

如果您使用AWS SDK for Java,最简单的方法是。它的
uploadFileList
方法获取一个文件列表并将它们并行上载到S3,或者
uploadDirectory
将上载本地目录中的所有文件。

public void uploadDocuments(list filesToUpload)抛出
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);

}
AmazonServiceException、AmazonClientException、, 中断异常{ AmazonS3 s3=AmazonS3ClientBuilder.standard().withCredentials(getCredentials()).withRegion(Regions.AP_SOUTH_1) .build(); TransferManager transfer=TransferManagerBuilder.standard().With3Client(s3.build(); 字符串bucket=Constants.bucket\u NAME; MultipleFileUpload=transfer.uploadFileList(bucket,“”,新文件(“.”),filesToUpload); upload.waitForCompletion(); } 专用AWSCredentialsProvider getCredentials(){ 字符串accessKey=Constants.ACCESS\u KEY; 字符串secretKey=Constants.SECRET\u KEY; BasicAWSCredentials awsCredentials=新的BasicAWSCredentials(accessKey、secretKey); 返回新的AWSStaticRedentialsProvider(awsCredentials); }
您能用awscli或s3cmd编写脚本,而不是用Java编写吗?在这里使用Java似乎很难,这方面的情况没有改变。人们开发了使用s3 API并并行上传的库。@TJ-你能提供一个例子吗?它是产生n个并行执行的上传进程,还是为所有对象产生一个上传进程(因此只需要一个连接)?我希望是latterIt执行N次独立上传-一次执行多少次取决于传递给构造函数的ExecutorService类型。S3除了手动压缩多个对象外,没有公开在一个HTTP请求中上载多个对象的方法。即使这样,您也可能希望进行多部分上传,并将zip拆分到多个HTTP请求上,这样,如果中途出现短暂故障,您就不必从头开始整个上传…我知道这是一篇旧文章,如果您知道可以在Java 2 aws sdk版本中完成,请您分享一些详细信息,以备不时之需?