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

相关文章:

  • Ubuntu本地快速搭建web小游戏网站,公网用户远程访问
  • 算法笔记-第九章-堆(未完成-=需要好好搞搞题目)
  • 云原生周刊:Istio 1.20.0 发布 | 2023.11.20
  • 软件测试/测试开发/人工智能丨基于Spark的分布式造数工具:加速大规模测试数据构建
  • Uniapp连接iBeacon设备——实现无线定位与互动体验(实现篇)
  • Django学习日志08
  • 【CHI】Ordering保序
  • Ubuntu20.0中安装Gradle
  • Matplotlib实现Label及Title都在下方的最佳姿势
  • NX二次开发UF_CAM_ask_post_template_name 函数介绍
  • 命令执行无回显的判断方法及dnslog相关例题的讲解
  • 【金融分析】Python:病人预约安排政策 | 金融模拟分析
  • 3.8-镜像的发布
  • Java 12 及Tomcat 部署配置
  • BUUCTF [BJDCTF2020]一叶障目 1
  • Angular 响应式表单之下拉框
  • ES6之路之模块详解
  • github从入门到放弃(1)
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • pdf文件如何在线转换为jpg图片
  • 安卓应用性能调试和优化经验分享
  • 判断客户端类型,Android,iOS,PC
  • 用jQuery怎么做到前后端分离
  • 在Mac OS X上安装 Ruby运行环境
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # 飞书APP集成平台-数字化落地
  • (175)FPGA门控时钟技术
  • (2022 CVPR) Unbiased Teacher v2
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .md即markdown文件的基本常用编写语法
  • .NET : 在VS2008中计算代码度量值
  • .NET CF命令行调试器MDbg入门(一)
  • .Net CF下精确的计时器
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET开发人员必知的八个网站
  • ::before和::after 常见的用法
  • @ConditionalOnProperty注解使用说明
  • []FET-430SIM508 研究日志 11.3.31
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [BJDCTF2020]The mystery of ip1
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • [bzoj1324]Exca王者之剑_最小割
  • [Django 0-1] Core.Handlers 模块
  • [INSTALL_FAILED_TEST_ONLY],Android开发出现应用未安装
  • [Manacher]【学习笔记】
  • [one_demo_18]js定时器的示例
  • [one_demo_4]不使用第3个变量交换两个变量的值
  • [PHP]严格类型