南瓜慢说官方网站

  • 首页
  • 文章汇总
  • 容器技术
  • SpringBoot-Cloud
  • 程序人生
  • 其它
  • 整理
  • 关于

  • 搜索
中间件 config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac 计划 Stream MongoDB Spring DevOps JVM String Map Set List 性能 Email Springboot 集合类 ArrayList Java
技术之前,先读诗书:

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

发表于 2020-08-21 | 分类于 Java基础 | 0 | 阅读次数 622

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。


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

file

推荐阅读:
如何制定切实可行的计划并好好执行
容器技术(Docker-Kubernetes)
SpringBoot-Cloud相关
Https专题

  • 本文作者: 南瓜慢说
  • 本文链接: https://www.pkslow.com/archives/java-aws-s3
  • 版权声明: 本博客所有文章除特别声明外,不可转载!
# 中间件 # config # Go # Private # Kubernetes # pkslow # Test # HTTPS # Redis # Docker # Mac # 计划 # Stream # MongoDB # Spring # DevOps # JVM # String # Map # Set # List # 性能 # Email # Springboot # 集合类 # ArrayList # Java
中间件 config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac 计划 Stream MongoDB Spring DevOps JVM String Map Set List 性能 Email Springboot 集合类 ArrayList Java
Java处理csv文件
搭建Go语言开发环境
  • 文章目录
  • 站点概览
南瓜慢说

南瓜慢说

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

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

160 日志
7 分类
27 标签
RSS
0%
© 2020 — 2021 南瓜慢说 本站已挣扎运行:   粤ICP备20036375号