当前位置: 首页 > news >正文

[ 云计算 | 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 网站内看到这一行,
说明网络爬虫可能在本人还没有完整发布的时候就抓走了我的文章,
可能导致内容不完整,请去上述的原文链接查看原文。

相关文章:

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

本文收录于【#云计算入门与实践 - AWS】专栏中&#xff0c;收录 AWS 入门与实践相关博文。 本文同步于个人公众号&#xff1a;【云计算洞察】 更多关于云计算技术内容敬请关注&#xff1a;CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文&#xff1a; [ 云计算 | …...

c语言练习91:合并两个有序链表

合并两个有序链表 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码1&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct Li…...

【Qt控件之QTabBar】介绍及使用

概述 QTabBar类提供了一个选项卡栏&#xff0c;例如用于选项卡对话框。 QTabBar非常简单易用&#xff0c;它使用预定义的形状绘制选项卡&#xff0c;并在选择选项卡时发出信号。它可以被子类化以调整外观和感觉。Qt还提供了一个实现好的QTabWidget。 每个选项卡具有一个tabT…...

最新Tuxera NTFS2023最新版Mac读写NTFS磁盘工具 更新详情介绍

Tuxera NTFS for Mac是一款Mac系统NTFS磁盘读写软件。在系统默认状态下&#xff0c;MacOSX只能实现对NTFS的读取功能&#xff0c;Tuxera NTFS可以帮助MacOS 系统的电脑顺利实现对NTFS分区的读/写功能。Tuxera NTFS 2023完美兼容最新版本的MacOS 11 Big Sur&#xff0c;在M1芯片…...

AndroidX使用Paho MQTT报找不到android/support/v4/content/LocalBroadcastManager

网上有直接引用support-v4包的&#xff0c;但我用的AndroidX&#xff0c;不能为这个类再引用support-v4 直接自己创建这个类&#xff0c;把androidx.localbroadcastmanager.content.LocalBroadcastManager改改就行。 虽然奇葩但能解决问题 package android.support.v4.content…...

Filter与Listener(过滤器与监听器)

1.Filter 1.过滤器概述 过滤器——Filter&#xff0c;它是JavaWeb三大组件之一。另外两个是Servlet和Listener 它可以对web应用中的所有资源进行拦截&#xff0c;并且在拦截之后进行一些特殊的操作 在程序中访问服务器资源时&#xff0c;当一个请求到来&#xff0c;服务器首…...

【刷题篇】反转链表

文章目录 一、206.反转链表二、92.反转链表 ||三、25. K 个一组翻转链表 一、206.反转链表 class Solution { public://使用头插//三个指针也可以ListNode* reverseList(ListNode* head) {if(headnullptr)return nullptr;ListNode* curhead;ListNode* newheadnew ListNode(0);L…...

【C语言小游戏--猜数字】

文章目录 前言1.游戏描述2.代码实现2.1打印菜单2.2构建基础框架2.3玩游戏2.3.1生成随机数2.3.1.1rand()2.3.1.2srand()2.3.1.3time() 2.3.2game() 2.4自己设定猜的次数 3.完整代码 前言 猜数字小游戏是我们大多数人学习C语言时都会了解到的一个有趣的C语言小游戏&#xff0c;下…...

Vue计算属性computed和监听watch

1.计算属性 初衷&#xff1a;为了解决模块里面有太多的计算逻辑让模版难以维护。 计算属性可以依赖一个数据也可以依赖多个数据的变化 使用场景&#xff1a; 商品单价和数量改变时&#xff0c;商品总价更改。如果写在方法里面&#xff0c;那么每次修改商品单价和数量时都会…...

HTTP介绍 原理 消息结构 客户端请求 服务器响应 HTTP状态码

一、HTTP介绍二、HTTP工作原理HTTP三点注意事项 三、HTTP消息结构四、客户端请求消息五、服务器响应消息HTTP请求方法 七、HTTP响应头信息八、HTTP状态码&#xff08;HTTP Status Code&#xff09;下面是常见的HTTP状态码&#xff1a;HTTP状态码分类HTTP状态码列表 一、HTTP介绍…...

linux性能分析(五)如何学习linux性能优化

一 如何学习linux性能优化 强调&#xff1a; 由于知识记忆曲线以及某些知识点不常用,所以一定要注重复习思考&#xff1a; 如何进行能力转义以及能力嫁接? --> 真正站在巨人的肩膀上性能调优的目的&#xff1a; 不影响系统稳定性的资源最大利用化补充&#xff1a; 性能…...

1402. 做菜顺序 --力扣 --JAVA

题目 一个厨师收集了他 n 道菜的满意程度 satisfaction &#xff0c;这个厨师做出每道菜的时间都是 1 单位时间。 一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间&#xff08;包含之前每道菜所花费的时间&#xff09;乘以这道菜的满意程度&#xff0c;也就是 time[i…...

Springboot踩坑-request body重复读问题

背景 在一次业务开发中&#xff0c;由于需要在拦截器中对一个http请求中request body内容做解析和判断&#xff0c;所以用了httpServletRequest的getInputStream解析了request body内容&#xff0c;之后导致了拦截器处理成功后&#xff0c;原来的业务接口处报request body not…...

C++ 类和对象(六)赋值运算符重载

1 运算符重载 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c; 也具有其返回值类型&#xff0c;函数名字以及参数列表&#xff0c;其返回值类型与参数列表与普通的函数类似。 函数名字为&#xff1a;关键字operator后面接需…...

rust学习-trait std::cmp::PartialEq、Eq、PartialOrd、Ord

PartialEq 介绍 pub trait PartialEq<Rhs = Self> whereRhs: ?Sized, {// Required method,后文有讲解这个注释fn eq(&self, other: &Rhs) -> bool;// Provided method,后文有讲解这个注释fn ne(&self, other: &Rhs) -> bool {... } }x.eq(y)…...

k8s pod根据指标自动扩缩容举例

目录 基于 内存 指标实现pod自动扩缩容 举例配置 基于 cpu 指标实现pod自动扩缩容 举例配置 基于请求数&#xff08;次/秒&#xff09; 指标实现pod自动扩缩容 举例配置 基于 http请求响应时间 (ms) 指标实现pod自动扩缩容 举例配置 基于 Java GC暂停时间 (ms) 指标实现…...

深、浅拷贝之间的关系

深、浅拷贝之间的关系 什么是赋值 赋值是将某一数值或对象赋给某个变量的过程&#xff0c;分为下面 2 部分 基本数据类型&#xff1a;赋值&#xff0c;赋值之后两个变量互不影响引用数据类型&#xff1a;赋址&#xff0c;两个变量具有相同的引用&#xff0c;指向同一个对象&…...

服务器数据恢复-某银行服务器硬盘数据恢复案例

服务器故障&分析&#xff1a; 某银行的某一业务模块崩溃&#xff0c;无法正常使用。排查服务器故障&#xff0c;发现运行该业务模块的服务器中多块硬盘离线&#xff0c;导致上层应用崩溃。 故障服务器内多块硬盘掉线&#xff0c;硬盘掉线数量超过服务器raid阵列冗余级别所允…...

仪器器材经营小程序商城的作用是什么

互联网发展下&#xff0c;数字化转型已经成为常态&#xff0c;仅依赖传统线下经营模式将很难再增长。 作为产品销售及客户维护度高的仪器器材行业&#xff0c;拥有自营商城平台是必要的&#xff0c;不仅可以解决以上难题&#xff0c;还利于打造自身品牌多渠道传播&#xff0c;…...

京东数据分析:2023年9月京东洗烘套装品牌销量排行榜!

鲸参谋监测的京东平台9月份洗烘套装市场销售数据已出炉&#xff01; 根据鲸参谋平台的数据显示&#xff0c;今年9月份&#xff0c;京东平台洗烘套装的销量为7100&#xff0c;环比下降约37%&#xff0c;同比增长约87%&#xff1b;销售额为6000万&#xff0c;环比下降约48%&#…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...