pkslow.com 南瓜慢说

  • AllArticles
  • Container
  • Spring
  • Life
  • Cloud
  • Collections
  • About
  • GitHub

  • Search
Terraform101 English Terraform Middleware config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac Plan Stream MongoDB Spring DevOps JVM String Map Set List Performance Email Springboot JavaCollections ArrayList Java

通过Java上传下载AWS S3文件,并解决文件数量超过1000的问题

Created on: 2020-08-21 | Category: Java | 0 | View: 2245

1 前言

Amazon S3 (Simple Storage Service)是很常用的文件存储服务,我们的场景是上游把流水文件放到S3,我们再从S3读取并对账。

2 初始化S3

首先要获取相关的账号信息,在Amazon称为:AWSAccessKeyId和AWSSecretKey。然后就可以初始化S3客户端了。代码如下:

private static AmazonS3 initS3Client() {
  AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);
  return AmazonS3ClientBuilder.standard()
    .withCredentials(new AWSStaticCredentialsProvider(credentials))
    .withRegion(Regions.AP_SOUTHEAST_1)
    .build();
}

这里需要指定Region,即Bucket所在的区域。

3 获取文件列表

当我们在Bucket上放了许多文件后,需要查询文件列表,则方法如下:

ObjectListing objects = s3.listObjects(BUCKET_NAME);

但是,如果这个Bucket的文件超过一千个,那上述方法只能获取1000个。想要列出所有,要使用以下方法:

private static List<S3ObjectSummary> listAllS3Obj(AmazonS3 s3) {
  ListObjectsRequest request = new ListObjectsRequest();
  request.setBucketName(BUCKET_NAME);
  request.setPrefix(prefix);

  ObjectListing objects = s3.listObjects(request);
  List<S3ObjectSummary> keyList = new ArrayList<>(objects.getObjectSummaries());

  while (objects.isTruncated()) {
    objects = s3.listNextBatchOfObjects(objects);
    keyList.addAll(objects.getObjectSummaries());
  }

  return keyList;
}

通过循环,不断获取。还能指定前缀prefix匹配。

4 下载文件

下载文件比较简单,知道文件名就可以了,如下:

private static void downloadOneFromS3(AmazonS3 s3, String filename) throws IOException {
  S3Object s3object = s3.getObject(BUCKET_NAME, filename);
  S3ObjectInputStream inputStream = s3object.getObjectContent();
  FileUtils.copyInputStreamToFile(inputStream, new File(DOWNLOAD_FILES_FOLDER + filename));
}

这个文件名是S3ObjectSummary的key。

5 上传文件

上传文件也是非常简单:

s3.putObject(BUCKET_NAME,"s3.pkslow.txt", new File("local.pkslow.txt"));

6 总结

还有其它更多场景,可以看官方文档或参考AWS S3 with Java。


Code for all: GitHub

欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

file

Recommendations:
Cloud Native
Terraform
Container: Docker/Kubernetes
Spring Boot / Spring Cloud
Https
如何制定切实可行的计划并好好执行

  • Author 作者: LarryDpk 南瓜慢说
  • Link 链接: https://www.pkslow.com/archives/java-aws-s3
  • 版权声明: 本博客所有文章除特别声明外,不可转载!
# Terraform101 # English # Terraform # Middleware # config # Go # Private # Kubernetes # pkslow # Test # HTTPS # Redis # Docker # Mac # Plan # Stream # MongoDB # Spring # DevOps # JVM # String # Map # Set # List # Performance # Email # Springboot # JavaCollections # ArrayList # Java
Terraform101 English Terraform Middleware config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac Plan Stream MongoDB Spring DevOps JVM String Map Set List Performance Email Springboot JavaCollections ArrayList Java
印尼之行-龙目岛和科莫多岛9日自由行旅婚
Mac上使用Docker Desktop启动Kubernetes,踩坑后终于搞掂
  • Contents
  • Site Overview
南瓜慢说

南瓜慢说

多年Java开发,主要专注后端技术:Java/Spring/Springboot/微服务/大数据等。

多读书,多分享;多写作,多整理。

241 Posts
9 Categories
30 Tags
RSS
0%
© 2020 — 2022 南瓜慢说 pkslow The WebSite keeping alive:   粤ICP备20036375号