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