S3多线程下载库

时间:2016-02-10 00:58:56

标签: java amazon-s3

我有一个需要从亚马逊S3快速可靠下载的java应用程序。理想情况下,我使用AWS SDK的TransferManager(http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html)之类的东西,除了我想以流式方式处理数据,而不必分阶段下载所有下载的数据在本地磁盘上。

理想情况下,库的界面类似于AmazonS3#getObject(),但实现速度更快,更强大。更好的是,该库将支持预取多个S3对象:我可以给它一个我想最终下载的对象列表,然后快速为每个对象使用一系列流。如果库必须使用大量RAM来进行预取,那就没关系了。

有人知道有一些/所有这些功能的库吗?

1 个答案:

答案 0 :(得分:0)

我建议使用minio-java

  

用于Amazon S3兼容云存储的Java库

io.minio.MinioClient.getObject 返回 InputStream [example],您可以执行多个 getObject ,其中每个调用返回个别< EM>的InputStream

MinioClient s3Client = new MinioClient("https://s3.amazonaws.com", "YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY");
InputStream stream1 = s3Client.getObject("my-bucketname", "my-objectname1");
InputStream stream2 = s3Client.getObject("my-bucketname", "my-objectname2");

这里,流不是预取的。如果预取是硬性要求,则可以使用 getObject

的另一种变体
  

public void getObject(String bucketName,String objectName,String fileName)

使用此方法的优点是,如果有的话,它会恢复以前的 getObject

MinioClient s3Client = new MinioClient("https://s3.amazonaws.com", "YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY");
s3Client.getObject("my-bucketname", "my-objectname1", "/mycachedir/my-objectname1");
s3Client.getObject("my-bucketname", "my-objectname2", "/mycachedir/my-objectname2");