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);
}
我们希望开始使用 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);
}