1. 关于AWS S3的使用相关知识总结可以参考:AWS S3 学习小结。

2. 以下主要是想总结一下关于S3文件、文件夹如何删除,示例版本是源码里面的java2。

注:要知道,S3不存在子文件夹的概念,而是所有文件都在根目录

假设有/home/files/如下的文件结构:

并且,有这样一个工具类。

package com.bas.util;import org.apache.commons.lang3.StringUtils;
import software.amazon.awssdk.auth.credentials.*;
import software.amazon.awssdk.core.pagination.sync.SdkIterable;
import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.core.sync.ResponseTransformer;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.*;
import software.amazon.awssdk.services.s3.paginators.ListObjectsV2Iterable;
import software.amazon.awssdk.services.sts.model.Credentials;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.net.URLEncoder;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.nio.file.Paths;
import java.util.*;public class S3Utils {private S3Utils() {}public static S3Client builder(String regionStr) {Region region = Region.US_EAST_1;//default regionif (StringUtils.isNotEmpty(regionStr)) {region = Region.of(regionStr);}return S3Client.builder().region(region).build();}public static List<String> listKeysInDirectory(S3Client s3, String bucket, String prefix) {String delimiter = "/";if (!prefix.endsWith(delimiter)) {prefix += delimiter;}// Build the list objects requestListObjectsV2Request listReq = ListObjectsV2Request.builder().bucket(bucket).prefix(prefix).delimiter(delimiter).maxKeys(1).build();ListObjectsV2Iterable listRes = s3.listObjectsV2Paginator(listReq);List<String> keyList = new ArrayList<>();final String flolder = prefix;listRes.contents().stream().forEach(content -> {if (!flolder.equals(content.key())) {keyList.add(content.key());}});return keyList;}
}

1) 当我们想要删除一个目录下的所有文件,也就是上图的两个txt文件。

public static void deleteS3Folder(S3Client s3, String bucketName, String folderPath) {ArrayList<ObjectIdentifier> to_delete = new ArrayList<ObjectIdentifier>();List<String> object_keys = listKeysInDirectory(s3, bucketName, folderPath);if (null == object_keys || object_keys.size() == 0) {return;}for (String k : object_keys) {to_delete.add(ObjectIdentifier.builder().key(k).build());}try {DeleteObjectsRequest dor = DeleteObjectsRequest.builder().bucket(bucketName).delete(Delete.builder().objects(to_delete).build()).build();DeleteObjectsResponse response=s3.deleteObjects(dor);while (!response.sdkHttpResponse().isSuccessful()){Thread.sleep(100);}} catch (S3Exception | InterruptedException e) {}System.out.println("delete folder successfully--->"+folderPath);
}

2) 当我们想要删除这个目录的所有文件,也就是图片上所有txt和所有子目录文件。

public static void deleteS3FolderRecursively(S3Client s3, String bucket, String prefix) {ListObjectsRequest listObjectsRequest = ListObjectsRequest.builder().bucket(bucket).build();ListObjectsResponse objectsResponse = s3.listObjects(listObjectsRequest);while (true) {ArrayList<ObjectIdentifier> objects = new ArrayList<>();for (Iterator<?> iterator = objectsResponse.contents().iterator(); iterator.hasNext(); ) {S3Object s3Object = (S3Object)iterator.next();objects.add(ObjectIdentifier.builder().key(s3Object.key()).build());}s3.deleteObjects(DeleteObjectsRequest.builder().bucket(bucket).delete(Delete.builder().objects(objects).build()).build());if (objectsResponse.isTruncated()) {objectsResponse = s3.listObjects(listObjectsRequest);continue;}break;};
}

附:

1. 递归删除目录文件参考:How to delete files recursively from an S3 bucket

AWS S3文件/文件夹删除相关推荐

  1. Node开发文件上传系统及向七牛云存储和亚马逊AWS S3的文件上传

    背景起,有奏乐: 有伟人曰:学习技能的最好途径莫过于理论与实践相结合. 初学Node这货时,每每读教程必会Fall asleep. 当真要开发系统时,顿觉精神百倍,即便踩坑无数也不失斗志. 因为同团队 ...

  2. 文件服务器 s3,AWS S3日志文件通过服务器上传到elk(示例代码)

    通过elk查看s3产生的大量日志 首先理清思路 首先从s3上用s3cmd命令将logs同步下来 再将日志写到文件 再通过elk展示出来 一.安装s3cmd命令 S3cmd工具的安装与简单使用: 参考文 ...

  3. java aws s3 下载文件_使用send_file从Amazon S3下载文件?

    为用户保持简单 我认为处理此问题的最佳方法是使用过期的S3网址 . 其他方法有以下问题: 文件首先下载到服务器,然后下载到用户 . 使用 send_data 不会产生预期的"browser ...

  4. php上传照片到s3云服务器,PHP上传文件到AWS S3生成下载文件URL

    * 加载s3客户端 * @return string*/ functionAWS_S3Client(){$ACCESS_KEY_ID = '你的s3 ID';$SECRET_ACCESS_KEY = ...

  5. Node.js 和 AWS S3 服务实现的在线文件存储系统

    Node.js 和 AWS S3 服务实现的在线文件存储系统 一. 安装依赖 在开始之前,需要确保 Node.js 和 npm 已经安装在你的计算机上.然后在命令行中运行以下命令安装依赖: npm i ...

  6. Ubuntu 配置亚马逊 aws cli 上传文件文件夹至 亚马逊 AWS S3

    当使用亚马逊云服务器进行深度学习模型训练时,需要将数据集上传,相比使用 UI 界面上传,使用命令行方式具有更快的上传速率. 配置步骤 安装 aws cli 客户端: pip install awscl ...

  7. AWS S3 Windows系统下的文件夹上传基于python

    AWS S3 上传文件,基于cmd命令行发现无法上传文件夹,只能上传单个文件,不知道是我能力不行还是什么原因,如果有大佬了解的可以在下面评论下! 一.环境配置 1.win10 X64: 2.awscl ...

  8. android 文件 删除文件夹,android 删除文件以及递归删除文件夹

    Python之文件处理-递归删除特定文件 #!/usr/bin/env python # -*- coding:utf-8 -*- import os def delete_particular_fi ...

  9. Laravel5.2之Filesystem-从Dropbox中下载文件到AWS S3

    2019独角兽企业重金招聘Python工程师标准>>> 说明:本文主要讲述了Laravel的文件系统Filesystem的小Demo,逻辑不复杂,主要就是把Dropbox上的一个文件 ...

最新文章

  1. hutool获取5天前的日期_JavaSE基础:18个Java8处理日期的新花样,肯定没用过!
  2. 顶级程序员的心得 - Coders at Work
  3. 正则表达式超级生成工具 Regulator
  4. react笔记组件属性传递机制(四)
  5. redis专题:redis的持久化方式有哪些?redis数据的备份和恢复策略
  6. Excel 中的日期格式变成时间戳
  7. Vue中使用watch来监听数据变化
  8. 3.1 语音的产生与感知
  9. 属兔的人今日运势-360星座网_明日运势属兔人(12.25)
  10. php 检测字符长度,php验证字符串长度问题
  11. 如何在阿里云国际上设置邮箱主机
  12. 1vcpu等于几核?vcpu是什么意思
  13. java 锯齿_Java2D图形抗锯齿
  14. 新建SpringCloud电商后台项目
  15. 蒙特梭利素材-【数字海报】蒙氏素材
  16. Linux kernel的中断子系统之(二):IRQ Domain介绍
  17. 科研:中科大论文查新查引所用论文数据库
  18. 头条搜索战百度:进攻性放手,危机并存
  19. wildfly(JBOSS)启动报错
  20. @Configuration(proxyBeanMethods = false) 设置这个为false有啥用

热门文章

  1. (实用简单版)latex如何书写算法algorithm
  2. 常用政务网络查询单打印地址
  3. MFC将窗口的关闭键(叉叉)变为不可用/可用
  4. android 情景模式设置
  5. 赢在云端:VMware跨云架构,让“云”卷“云”舒自由可控!——访VMware公司大中华区高级技术总监李刚
  6. 计算机专业的励志人物,北京科技大学计算机与通信工程学院-【毕业学子未来路】王禹:保入中科院的全国大学生励志人物...
  7. 基于JAVA爱馨敬老院网站计算机毕业设计源码+系统+lw文档+部署
  8. 基于OpenCV的图像形状检测(含源码)
  9. GEE:对矢量数据/行政边界设置填充颜色为空,只显示边界
  10. 微软面试题:站在地球上的某一点,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点。地球上有多少个满足这样条件的点?