[ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹

在这里插入图片描述

本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。

本文同步于个人公众号:【云计算洞察

更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。

本系列已更新博文:

  • [ 云计算 | AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶和对象操作完全指南
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹

文章目录

    • 一、概述
    • 二、前提条件
      • 2.1 配置 Maven 依赖项
      • 2.2 配置 AWS 凭证
    • 三、使用复制和删除重命名对象
      • 3.1 复制 S3 对象
      • 3.2 删除 S3 对象
    • 四、重命名文件夹
      • 4.1 列出源文件夹中的所有对象
      • 4.2 重命名文件夹中的所有对象键
    • 文末总结

一、概述

在本博文中,我们将探讨 如何使用 Java 重命名 Amazon S3 存储桶中的对象(文件或文件夹)。

Amazon Simple Storage Service (Amazon S3)是一种流行的云存储服务。它允许用户在云中存储和检索具有高持久性、可用性和可扩展性的数据。我们将在接下来的章节中使用适用于 Java 的 AWS 开发工具包与其进行交互。

二、前提条件

要重命名 S3 存储桶中的对象,我们可以利用 AWS SDK for Java 提供的S3Client类。

2.1 配置 Maven 依赖项

首先,我们需要 在项目的pom.xml中声明 AWS S3 SDK 依赖项:

<dependency><groupId>software.amazon.awssdk</groupId><artifactId>s3</artifactId><version>2.20.123</version>
</dependency>

2.2 配置 AWS 凭证

我们还需要设置一个 AWS 账户,安装 AWS CLI ,并使用我们的 AWS 凭证(AWS_ACCESS_KEY_IDAWS_SECERET_ACCESS_KEY)对其进行配置,以便能够以编程方式访问 AWS 资源。我们可以在 AWS 文档中找到完成此操作的所有步骤 。

我们使用构建器设计模式创建客户端。这是一个创建设计模式(关于设计模式后续可能会更新博文,这里挖个坑先),它将帮助我们创建这些复杂的对象。在我们的示例中,我们将在US_EAST_1区域创建存储桶。如果我们想要更改我们的首选区域,我们可以在官方文档(点击这里)中找到所有区域。

三、使用复制和删除重命名对象

目前,使用 SDK 重命名对象的唯一方法是复制具有不同名称的对象然后删除原始对象。我们还将在本节中举例说明这一点,解释每个步骤。

3.1 复制 S3 对象

在此步骤中,我们将使用上一点中创建的客户端来调用 AWS API。

首先,我们将为请求定义参数。假设我们有一个名为baeldung-s3-bucket的存储桶和一个名为simpleCSVFile.csv的 CSV 文件。我们想要将文件重命名为renamedFile.csv。让我们首先概述复制请求的参数:

String bucketName = "baeldung-s3-bucket";
String keyName = "simpleCSVFile.csv";
String destinationKeyName = "renamedFile.csv";

定义参数后,我们可以构造将发送到 AWS API 的CopyObjectRequest

CopyObjectRequest copyObjRequest = CopyObjectRequest.builder().sourceBucket(bucketName).sourceKey(keyName).destinationBucket(destinationKeyName).destinationKey(bucketName).build();

现在我们可以使用AmazonS3客户端和请求复制对象 :

s3Client.copyObject(copyRequest);

如果我们在此停止并运行代码,我们将看到现在有两个文件,一个具有新的所需名称,另一个具有原始名称。

3.2 删除 S3 对象

我们还需要在复制后删除原始对象以完成重命名过程。我们将使用上一点中的参数定义 DeleteObjectRequest

DeleteObjectRequest deleteRequest = DeleteObjectRequest.builder().bucket(bucketName).key(keyName).build();

我们将再次调用 S3 客户端来删除原始对象:

s3Client.deleteObject(deleteRequest);

四、重命名文件夹

上一点的方法仅适用于重命名简单对象。但是当我们必须重命名文件夹时,情况就会发生一些变化。重命名 Amazon S3 中的整个文件夹涉及迭代该文件夹中的所有对象并单独重命名每个对象

4.1 列出源文件夹中的所有对象

让我们首先列出给定文件夹中的所有对象:

ListObjectsV2Request listRequest = ListObjectsV2Request.builder().bucket(bucketName).prefix(sourceFolderKey).build();ListObjectsV2Response listResponse = s3Client.listObjectsV2(listRequest);
List<S3Object> objects = listResponse.contents();

我们使用存储桶名称和前缀初始化 ListObjectsV2Request 。文件夹中的对象实际上是所有以各自文件夹名称为键前缀的对象。

4.2 重命名文件夹中的所有对象键

现在我们有了列出文件夹中所有对象的代码,我们所要做的就是将它们全部复制到新目标并删除原始对象:

for (S3Object s3Object : objects) {String newKey = destinationFolderKey + s3Object.key().substring(sourceFolderKey.length());// Copy object to destination folderCopyObjectRequest copyRequest = CopyObjectRequest.builder().sourceBucket(bucketName).sourceKey(s3Object.key()).destinationBucket(bucketName).destinationKey(newKey).build();s3Client.copyObject(copyRequest);// Delete object from source folderDeleteObjectRequest deleteRequest = DeleteObjectRequest.builder().bucket(bucketName).key(s3Object.key()).build();s3Client.deleteObject(deleteRequest);
}

我们首先遍历对象列表,对于每一项,我们将通过用所需的新名称替换文件夹的旧名称来生成一个新密钥。获得新密钥后,我们所要做的就是将对象复制到新目的地并删除原始对象。

文末总结

在本文中,我们探讨了使用适用于 Java 的 AWS 开发工具包重命名 S3 存储桶中的文件和文件夹的方法。我们探索了两种不同的情况,它们使用相同的概念来重命名对象,用新名称复制它们并删除原始名称。希望对你有所帮助。

[ 本文作者 ]   bluetata
[ 原文链接 ]   https://bluetata.blog.csdn.net/article/details/133980910
[ 最后更新 ]   10/23/2023 2:39
[ 版权声明 ]   如果您在非 CSDN 网站内看到这一行,
说明网络爬虫可能在本人还没有完整发布的时候就抓走了我的文章,
可能导致内容不完整,请去上述的原文链接查看原文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/145051.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nvidia显卡基础概念介绍

一、PCIe与SXM 1.1 Nvidia GPU PCIe PCIe(peripheral component interconnect express)是一种高速串行计算机扩展总线标准&#xff0c;是英特尔公司在2001年提出来的&#xff0c;它的出现主要是为了取代AGP接口&#xff0c;优点就是兼容性比较好&#xff0c;数据传输速率高、…

线程是如何进行创建的

对于任何一个进程来讲&#xff0c;即便我们没有主动去创建线程&#xff0c;进程也是默认有一个主线程的。线程是负责执行二进制指令的&#xff0c;它会根据项目执行计划书&#xff0c;一行一行执行下去。进程要比线程管的宽多了&#xff0c;除了执行指令之外&#xff0c;内存、…

中文编程开发语言工具构件说明:屏幕截取构件的编程操作

屏幕截取 用于截取指定区域的图像。 图 标&#xff1a; 构件类型&#xff1a;不可视 重要属性 l 截取类型 枚举型&#xff0c;设置在截取屏幕时的截取类型。包括&#xff1a;全屏幕、指定区域、活动窗口三种。当全屏幕截取时相当于执行了硬拷屏&#xff08;PrintScre…

解决谷歌学术bib信息不全的问题

在我们撰写学术论文时&#xff0c;经常需要引用参考文献。如果用latex撰写论文&#xff0c;势必会用到文献的bib信息&#xff0c;大部分的教程都会告诉我们去google scholar上去搜索。 一、问题描述 搜索一篇文章&#xff0c;然后选择cite&#xff0c;再选择bib。 很明显&…

2017年高热度编程语言简介

世上语言千千万&#xff0c;我却独爱这一种!”这句话用来形容程序员和编程语言之间的爱恨情仇实在是再精准不过了。根据GitHub 2016年的开源报告&#xff0c;其上所有开源项目共包含了316种编程语言&#xff0c;这是一个什么概念呢?举个例子来说&#xff0c;世界上共有226个国…

ES6有何新特性?

目录 介绍 let 和 const 解构 模板字符串 箭头函数 Set Map 介绍 ES 全称是ECMAScript&#xff0c;它是JavaScript基础构建的一种语言&#xff0c;JavaScript正是建立在ECMAScript语言的基础规范中建立使用的。ES6实际上是一个泛指&#xff0c;泛指ES2015及后续的版本…

2023/10/22总结

项目上 登录注册忘记密码已经全部完善——连接数据库&#xff0c;发送验证码等 把ER图和项目功能点也给做完了&#xff08;可能后期还需要修改 &#xff0c;因为问题会在实践的时候出现&#xff09; 功能点图 刷题记录 接下来的任务是争取早日完成这个项目。

【Spring Cloud Alibaba】seata分布式事务官方入门案例(实战版)

文章目录 1. 业务介绍1.1. 用例1.2. 架构图1.3. 3个服务的代码及业务逻辑&#xff08;略&#xff09; 2. SEATA 的分布式交易解决方案3. 由Dubbo SEATA提供支持的示例&#xff08;实战&#xff09;3.1. 步骤 1&#xff1a;建立数据库&#xff0c;如seata数据库3.2. 步骤 2&…

百分点科技再度亮相GITEX全球大会

10月16-20日&#xff0c;全球最大科技信息展会之一 GITEX Global 2023在迪拜世贸中心开展&#xff0c;本届展会是历年来最大的一届&#xff0c;吸引了来自180个国家的6,000家参展商和180,000名技术高管参会。 百分点科技作为华为生态合作伙伴&#xff0c;继去年之后再度参展&a…

【Godot】【BUG】4.x NavigationAgent 导航不生效

4.2.beta2 试了半天才发现原来默认只对第一个有导航的 TileMap 的第 1 层 生效&#xff0c;而我设置的导航层不是第一层&#xff0c;然后我新建了一个 TileMap 将导航的瓦片设置到这个 TileMap 上了&#xff0c;如图 这样就解决了问题&#xff0c;不用再修改默认设置的东西了&a…

【网络编程】基于epoll的ET模式下的Reactor

需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、Reactor介绍 二、基于epoll的ET模式下的Reactor计算器代码 1、Tcp…

[架构之路-241]:目标系统 - 纵向分层 - 企业信息化与企业信息系统(多台企业应用单机组成的企业信息网络)

目录 前言&#xff1a; 一、什么是信息系统&#xff1a;计算机软件硬件系统 1.1 什么是信息 1.2 什么是信息系统 1.3 什么是信息技术 1.4 什么是信息化与信息化转型 1.5 什么是数字化与数字化转型&#xff08;信息化的前提&#xff09; 1.6 数字化与信息化的比较 1.7 …