[ 云计算 | 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,一经查实,立即删除!

相关文章

C++ 智能指针和内存管理:使用指南和技巧

C是一门强大的编程语言&#xff0c;但是在内存管理方面却存在着一些问题。手动管理内存不仅费时费力&#xff0c;而且容易出错。因此&#xff0c;C中引入了智能指针这一概念&#xff0c;以更好地管理内存。 什么是智能指针&#xff1f; 在C中&#xff0c;内存的分配和释放都是…

AttributeError: ‘FieldInfo‘ object has no attribute ‘required‘.

诸神缄默不语-个人CSDN博文目录 这个bug是在安装doccano包之后&#xff0c;在运行transformers代码时出现的。 核心报错信息&#xff1a; RuntimeError: Failed to import transformers.models.bert.modeling_bert because of the following error (look up to see its trac…

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…

服务器入侵如何防护,业务被攻击如何处理,服务器安全防护方案

服务器是算是家用电脑的一种使用方法,主机不在用户家中,需要远程使用,在目前互联网时代占用很重要的位置&#xff0c;当然生活中也是应用广泛。服务器比普通计算机运行更快、负载更高、价格更贵。很多娱乐,工作都需要依靠服务器来运行整个体系&#xff0c;因此服务器的安全防护…

虚拟化逻辑架构: 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.安…

SCAU:主对角线上的元素之和

主对角线上的元素之和 Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: G;GCC 描述 输入一个3行4列的整数矩阵&#xff0c;计算并输出主对角线上的元素之和输入格式 3行4列整数矩阵输出格式 主对角线上的元素之和输入样例 1 2 3 4 5 6 7 8 9 10 11 12输出…

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…

详细学习PyQt5中的多线程

Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图&#xff08;Item View&#xff09; 快速弄懂Pyqt5的4种项目部件&#xff08;Item Widget&#xff09; 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…

【Shell3】日常巡检1

#!/usr/bin/env bash# --------------------------------------------------------------------------------- # 控制台颜色 BLACK"\033[1;30m" RED"\033[1;31m" GREEN"\033[1;32m" YELLOW"\033[1;33m" BLUE"\033[1;34m" PU…

go语言学习-包管理

1、概念 1.1 什么是包 ***Go语言的包(package) ***是一种源码封装的方式,可以被看做是组相关的,并且通用的代码集合。这些包都有自己的独立的功能,然后在编写代码时,如果需要用到这些功能,可以导入包直接使用。 打印一些内容:fmt处理一些时间相关的: time处理一些数学相关…

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

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

Leetcode 第 374 场双周赛 Problem D 100146. 统计感冒序列的数目(组合数学+阶乘+逆元)

Leetcode 第 374 场双周赛 Problem D 100146. 统计感冒序列的数目&#xff08;组合数学阶乘逆元&#xff09;题目 给你一个整数 n 和一个下标从 0 开始的整数数组 sick &#xff0c;数组按 升序 排序。有 n 位小朋友站成一排&#xff0c;按顺序编号为 0 到 n - 1 。数组 sick 包…

[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…

【数据结构】拆分详解 - 二叉树的链式存储结构

文章目录 一、前置说明二、二叉树的遍历  1. 前序、中序以及后序遍历   1.1 前序遍历   1.2 中序遍历   1.3 后序遍历 2. 层序遍历 三、常见接口实现  0. 递归中的分治思想  1. 查找与节点个数   1.1 节点个数   1.2 叶子节点个数   1.3 第k层节…

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。。。。。。都是运行在用…

使用gdb调试QEMU模拟的RISC-V平台程序

我们跑一个裸核程序&#xff0c;也就是不带操作系统的程序&#xff0c;然后使用gdb调试该程序。 首先编译目标程序&#xff0c;然后使用QEMU的kernel参数进行加载 qemu-system-riscv64 -s -S -bios opensbi.elf -m 4G -smp 4 -kernel my_program.x -nographic -s 让QEMU在12…

【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;建立以…