[ 云计算 | AWS 实践 ] 使用 Java 检查指定的密钥是否存在于给定的 Amazon S3 存储桶中

在这里插入图片描述

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

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

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

本系列已更新博文:

  • [ 云计算 | AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶和对象操作完全指南
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [ 云计算 | AWS 实践 ] 使用 Java 列出存储桶中的所有 AWS S3 对象
  • [ 云计算 | AWS 实践 ] 使用 Java 更新现有 Amazon S3 对象
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [ 云计算 | AWS 实践 ] 使用 Java 检查指定的密钥是否存在于给定的 Amazon S3 存储桶中

文章目录

    • 一、前言
    • 二、前期准备
    • 三、创建 AmazonS3 客户端的实例
    • 四、检查秘钥是否存在(两种方法)
      • 4.1 使用 headObject() 检查密钥是否存在
      • 4.2 使用 listObjectsV2() 检查密钥是否存在
    • 五、文末总结

一、前言

在本博文中,我们将探讨如何使用 Java 检查指定的秘钥是否存在于亚马逊 S3 存储桶中。

Amazon S3 是一个非常流行的云存储服务,为存储和检索数据提供了可伸缩、安全和高可用的平台。就个人而言,后续很多的公有云平台或者一些 SaaS 服务,都或多或少有 Amazon S3 的影子。

对于开发人员来说,了解特定的秘钥是否存在是至关重要的,以便根据需要进行操作或访问。我们将逐步介绍设置 AWS SDK 并使用它执行此检查所需的步骤。

二、前期准备

首先,我们需要确保 AWS SDK Maven 依赖包已合并到项目中,让我们创建一个新的 Java 项目并将以下 Maven 依赖项添加到 pom.xml 文件中:

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

三、创建 AmazonS3 客户端的实例

一旦我们设置好了 AWS 的 Java SDK,我们就创建 Amazon S3 客户端的实例来与存储桶进行交互。

让我们指定 AWS 凭证和存储桶位置区域并创建客户端:

AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).withCredentials(new AWSStaticCredentialsProvider(credentials)).build();

四、检查秘钥是否存在(两种方法)

此处是我们博文的重点,接下来将会讲解两种方法,来介绍如何检查秘钥是否存在。

4.1 使用 headObject() 检查密钥是否存在

检查 Amazon S3 存储桶中是否存在特定密钥的最简单、最明显的方法是使用headObject()方法。

我们需要使用其构建器方法创建一个 HeadObjectRequest 实例,并将存储桶名称和对象密钥传递给它。然后我们可以将请求对象传递给headObject()方法。

参考示例代码如下:

try {// 创建一个HeadObjectRequest对象,用于检查指定的秘钥是否存在于存储桶中HeadObjectRequest headObjectRequest = HeadObjectRequest.builder().bucket(bucket)  // 指定存储桶名称.key(key)  // 指定秘钥名称.build();// 发起HeadObject请求以检查对象是否存在s3Client.headObject(headObjectRequest);System.out.println("对象存在"); // 输出对象存在的信息return true; // 返回true,表示对象存在
} catch (S3Exception e) {if (e.statusCode() == 404) {System.out.println("对象不存在"); // 输出对象不存在的信息return false; // 返回false,表示对象不存在} else {throw e; // 抛出异常}
}

此方法检查指定存储桶位置是否存在对象,并返回包含对象元数据的 HeadObjectResponse 对象。如果指定的键不存在,则该方法会抛出 NoSuchKeyException 异常。

4.2 使用 listObjectsV2() 检查密钥是否存在

另一种选择是使用listObjectsV2()方法。为此,我们需要创建一个 ListObjectsV2Request 对象并将存储桶名称传递给它。接下来,我们调用 listObjectsV2 方法来获取 ListObjectsV2Response。然后我们可以遍历响应的内容来检查所需的密钥是否存在。

示例代码如下:

public boolean doesObjectExistByListObjects(String bucketName, String key) {// 创建ListObjectsV2Request对象以列出指定存储桶中的对象ListObjectsV2Request listObjectsV2Request = ListObjectsV2Request.builder().bucket(bucketName) // 指定存储桶名称.build();// 发起列出对象的请求并获取响应ListObjectsV2Response listObjectsV2Response = s3Client.listObjectsV2(listObjectsV2Request);// 通过流处理检查是否存在指定的秘钥对应的对象return listObjectsV2Response.contents().stream().filter(s3ObjectSummary -> s3ObjectSummary.getValueForField("key", String.class).equals(key)) // 根据秘钥筛选对象.findFirst().isPresent(); // 返回是否存在指定的对象
}

虽然这种方法可能不如headObject()方法高效,但在其他选项不可用时,它会很有帮助。

另外,listObjectsV2()的另一个优点是可以同时列出多个对象,这在特定情况下可能很有用。

注意:这种方法可能由于多次迭代而更慢、效率较低。在选择最佳选项时,权衡各方面的利弊非常重要,要根据具体情况来决定。

五、文末总结

在本文中,我们探讨了使用 AWS Java SDK 来检查特定秘钥是否存在于 Amazon S3 存储桶中的几种方法。

这其中包括如何设置 Amazon S3 客户端并使用headObject()方法来检查秘钥是否存在。我们还探讨了listObjects()方法作为替代方案。

在选择方法时,需要权衡利弊,根据具体情况选择最适合的方案。无论是简单直接的方式还是更为灵活的多对象列举,都能帮助开发人员更好地管理和操作 Amazon S3 存储桶中的数据。

通过本文的介绍,读者可以更清晰地了解如何利用 AWS Java SDK 在开发中判断特定秘钥在 S3 存储桶中的存在性,为相关开发提供了有益的参考与指导。

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

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

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

相关文章

Java 数组另类用法(字符来当数组下标使用)

一、原因 看力扣的时候发现有位大佬使用字符来当数组下标使用。 class Solution {public int lengthOfLongestSubstring(String s) {int result 0;int[] hash new int[130];int i 0;for(int j 0; j < s.length(); j) {while(hash[s.charAt(j)] > 0) {hash[s.charAt…

虚拟化逻辑架构: VM VirtualBox 指定6.0.24版本开启硬件辅助虚拟化功能

目录 一、实验 1.安装VM VirtualBox-6.0.24 2.安装VM VirtualBox-6.1.26 3.再次重新安装VM VirtualBox-6.0.24 二、问题 1.系统开机报错 2.Ubuntu系统无法自适应VM VirtualBox系统边框 3.VirtualBox如何开启无缝模式 3.Ubuntu如何查询软件是否已经安装 一、实验 1.安…

react二次封装Modal和Drawer组件

目录 react二次封装Modal和Drawer组件01&#xff1a;Modal组件01-1 BaseModal.jsx01-2 使用BaseModal组件01-3 效果 02&#xff1a;Drawer组件02-1 BaseDrawer.jsx组件02-2 使用BaseDrawer组件02-3效果 react二次封装Modal和Drawer组件 npm i styled-components 01&#xff1…

移除元素、合并两个有序数组(leetcode)

一、移除元素 思路三&#xff1a; while(src<numsSize) 使用一个 while 循环来遍历数组。循环的条件是 src 必须小于 numsSize&#xff0c;以确保不会越界。 if(nums[src]!val) 如果当前 src 指向的元素不等于给定的值 val&#xff0c;则执行以下操作&#xff1a; nums[ds…

[RoFormer]论文实现:ROFORMER: ENHANCED TRANSFORMER WITH ROTARY POSITION EMBEDDING

文章目录 一、完整代码二、论文解读2.1 注意力机制2.2 绝对位置编码2.3 相对位置编码2.4 旋转位置编码Long-term decayAdaption for linear attention 2.5 模型效果 三、过程实现四、整体总结 论文&#xff1a;ROFORMER: ENHANCED TRANSFORMER WITH ROTARY POSITION EMBEDDING …

Java 使用itextpdf创建Pdf文件

DOM文件添加Maven依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.2.0</version><type>pom</type></dependency> 主要代码&#xff1a; PdfFont font PdfFo…

yo!这里是智能指针相关介绍

目录 前言 内存泄漏 RAII 智能指针原理 智能指针分类 auto_ptr unique_ptr shared_ptr 两个问题 线程安全 循环引用 后记 前言 对于智能指针&#xff0c;听起来很高大上&#xff0c;其实本质上就是一个类。为什么叫指针呢&#xff1f;因为可以像指针一样管理一块资…

linux 应用开发笔记---【I/O文件/基础篇 】

文章笔记来自于【速学Linux】手把手教你学嵌入式Linux C应用编程_哔哩哔哩_bilibili 一&#xff0c;什么是linux应用程序 1.运行在linux操作系统用户空间的程序 2.内核程序运行在内核空间&#xff0c;应用程序运行在用户空间 在终端执行的命令ls,ps。。。。。。都是运行在用…

【MySQL的DQL查询语句】

MySQL的DQL查询语句-----在Navicat下 将学生表导入Navicat中查询语句查询一整张表查询年龄大于22年龄大于22的女生查找文科的学生查找六班的学生计算学生的总分 &#xff08;group by&#xff09;合并两表 &#xff08;join on xxxx&#xff09;合并两张表 并求总分先合并在聚合…

Java+springboot+avue医院绩效考核系统源码支持二次开发

公立医院改革要求建立公立医疗卫生机构绩效考核体系&#xff0c;借助绩效考核来引导各级公立医院把社会效益摆在首位&#xff0c;提高医疗服务质量&#xff0c;规范医疗服务行为&#xff0c;加强医院内部管理&#xff0c;促进医院高质量发展 医院绩效考核系统&#xff0c;建立以…

python 运用pandas 库处理excel 表格数据

文章目录 读取文件查看数据数据选择数据筛选创建新列计算并总结数据分组统计 读取文件 Pandas 是一个强大的数据分析库&#xff0c;它提供了丰富的数据结构和数据分析工具&#xff0c;其中之一是用于读取不同格式文件的 read_* 函数系列。以下是一个简单介绍如何使用 Pandas 读…

Siemens-NXUG二次开发-C/C++/Python环境配置[20231204]

Siemens-NXUG二次开发-C/C/Python运行方式[20231204] 1.NX/UG C/C/Python API官方开发文档2.运行方式2.1内部模式2.2 外部模式2.3 许可证书服务器启动 3.C/C环境配置4.Python环境配置5.第三方环境配置 1.NX/UG C/C/Python API官方开发文档 西门子NX/UG Python api开发文档&…

Spring学习笔记:Day2

昨天定的学习计划发现通过文心4.0来实现不靠谱&#xff0c;坑太多&#xff0c;今天开始跟随B站进行学习&#xff0c;争取10-15天学习一遍&#xff0c;冲啊&#xff01; 地址&#xff1a;001-课程介绍_哔哩哔哩_bilibili 今日规划&#xff1a; pt 001 - pt 018&#xff0c;提到…

小心处理 C++ 静态变量中的陷阱

小心处理 C 静态变量中的陷阱 函数中的 static 变量 static 变量的作用 C 中 static 关键字的最后一个用途是在函数内创建局部变量&#xff0c;这些变量在其作用域内退出和进入时保持其值。函数内的 static 变量类似于只能从该函数访问的全局变量。static 变量的一个常见用途…

【UGUI】实现背包的常用操作

1. 添加物品 首先&#xff0c;你需要一个包含物品信息的类&#xff0c;比如 InventoryItem&#xff1a; using UnityEngine;[CreateAssetMenu(fileName "NewInventoryItem", menuName "Inventory/Item")] public class InventoryItem : ScriptableObje…

网工学习7-配置 GVRP 协议

7.1GARP概述 GARP(Generic Attribute Registration Protocol)是通用属性注册协议的应用&#xff0c;提供 802.1Q 兼容的 VLAN 裁剪 VLAN pruning 功能和在 802.1Q 干线端口 trunk port 上建立动态 VLAN 的功能。 GARP 作为一个属性注册协议的载体&#xff0c;可以用来传播属性…

游泳馆会员服务预约管理系统预约小程序效果如何

游泳馆在各地每天都有大量用户前往&#xff0c;夏季室外、冬季室内也是学习游泳技术和休闲娱乐的好地方&#xff0c;而消费者大多是年轻人和家长带的孩子&#xff0c;这部分群体更显年轻化&#xff0c;因此在如今互联网环境下&#xff0c;传统商家需要进一步赋能客户消费路径。…

【Vue】Vue CLI 脚手架(Vue Command Line Interface)安装教程(通过npm)

前言 Vue CLI&#xff08;Vue Command Line Interface&#xff09;是一个基于Vue.js的官方脚手架工具&#xff0c;用于快速搭建和管理Vue.js项目。它提供了一套完整的开发工具和配置&#xff0c;包括项目初始化、开发服务器、热重载、构建和打包等功能。 Vue CLI使用了Webpac…

自动驾驶学习笔记(十三)——感知基础

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 传感器 测距原理 坐标系 标定 同…

2023/12/3总结

RabbitMq 消息队列 下载地址RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQ 使用详情RabbitMQ使用教程(超详细)-CSDN博客 实现延迟队列&#xff08;为了实现订单15分钟后修改状态&#xff09; 1 死信队列 当一个队列中的消息满足下列情况之一时&…