[ 云计算 | AWS 实践 ] 使用 Java 更新现有 Amazon S3 对象

在这里插入图片描述

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

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

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

本系列已更新博文:

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

文章目录

    • 一、前言
    • 二、前期准备
      • 2.1 导入Maven 依赖
      • 2.1 准备几个必要信息
    • 三、更新 S3 对象的步骤
      • 3.1.初始化 S3 客户端
      • 3.2 将新对象上传到 S3
      • 3.3 上传(覆盖)对象
      • 3.4 验证更新
    • 四、注意事项(重要)
    • 五、文末总结

一、前言

Amazon Simple Storage Service(Amazon S3)是一种广泛使用的存储服务,提供了可扩展、安全和持久的对象存储功能。在某些情况下,我们需要更新已存在于 Amazon S3 中的对象。在 S3 中,对象是不可变的,这意味着我们不能直接修改对象的内容。但是,我们可以通过覆盖对象内容的方式来有效地“更新”它。

本篇文章将介绍如何使用 AWS Java SDK,将位于同一 AWS S3 路径下的现有文件内容替换为新内容。

二、前期准备

2.1 导入Maven 依赖

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

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

2.1 准备几个必要信息

要使用AWS SDK,我们需要以下几个要素:

AWS 帐户:首先,需要一个Amazon Web Services(AWS)帐户。如果尚未拥有,可直接在 AWS 控制台创建。

AWS 安全凭证:这些安全凭证是我们访问 AWS API 操作所需的访问密钥。可通过两种方式获取:使用 AWS 根帐户凭证中的“安全凭证”页面,或在 IAM 控制台中获取 IAM 用户凭证。

选择AWS区域(Region):同时需要选择一个 AWS 区域来存储 Amazon S3 数据。需注意,S3 存储价格因区域不同而异。详细信息可参考官方文档(点击这里)。

三、更新 S3 对象的步骤

3.1.初始化 S3 客户端

首先,我们需要创建客户端连接来访问 Amazon S3 Web 服务。为此,我们将使用 AmazonS3 接口:

无论是你怎么写,都要先初始化 S3 客户端对象,之后在进行操作即可,记住这个步骤。

AWSCredentials credentials = new BasicAWSCredentials(
        "AWS AccessKey",
        "AWS secretKey"
);

然后我们将配置客户端:

AmazonS3 s3client = AmazonS3ClientBuilder.standard()
        .withRegion(Regions.fromName("us-east-1"))
        .withCredentials(new AWSStaticCredentialsProvider(credentials))
        .build();

3.2 将新对象上传到 S3

现在我们可以使用 AWS Java SDK 在方法 putObject() 中将文件上传到 S3 存储桶:

PutObjectRequest request = PutObjectRequest.builder()
    .bucket(bucketName)
    .key(key)
    .build();

return s3Client.putObject(request, Path.of(file.toURI()));

下面是调用上述代码的代码片段:

s3Service.putObject(
    AWS_BUCKET,
    "Document/helloWord.txt",
    new File("/Users/bluetata/Document/helloWord.txt")
);

3.3 上传(覆盖)对象

由于 S3 中的对象是不可变的,因此“更新”对象涉及用新内容覆盖该对象。因此,为了更新,我们需要使用与添加文档相同的参数集来调用相同的putObject()方法:

public PutObjectResponse updateObject(String bucketName, String key, java.io.File file) {
    return this.putObject(bucketName, key, file);
}

此代码将用提供的新内容替换现有对象。如果具有给定键的对象不存在,S3 将创建一个新对象

3.4 验证更新

我们可能想要验证对象是否已成功更新。实现此目的的一种方法是检索对象的元数据并检查lastModified日期,或者计算对象的校验和并将其与预期值进行比较。

HeadObjectRequest req = HeadObjectRequest.builder()
    .bucket(bucketName)
    .key(key)
    .build();

HeadObjectResponse response = s3Client.headObject(request);
System.out.println("Last Modified: " + response.lastModified());

四、注意事项(重要)

需要牢记的是,在 S3 中,覆盖对象实际上是一次PUT操作,这可能会导致成本增加。在进行 S3 操作时,请时刻注意成本影响。

如果存储桶启用了版本控制,覆盖对象不会删除旧版本,而是会创建该对象的新版本。因此,我们会拥有对象的多个版本,每个版本都有独特的 ID。在需要时,我们可以检索任何以前的版本。

最后,如果元数据与该对象关联,请注意覆盖该对象将使用 PUT 操作期间提供的新元数据替换旧元数据。如果我们想保留旧的元数据,我们必须在请求中显式设置它。

五、文末总结

虽然我们不能直接修改 S3 对象的内容,但是利用适用于 Java 的 AWS 开发工具包,可以轻松地用新内容覆盖对象。务必牢记的是:比如避免硬编码凭据以及了解操作可能带来的成本影响。通过这些步骤,我们能够自信地使用 Java 对 S3 对象进行管理和更新。

文末已经更新了 4 篇关于在 AWS 中各种操作 S3 的博文,希望对你有所帮助,更多博文敬请关注本博客。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用css实现原生form中radio单选框和input的hover已经focus的样式

一.问题描述&#xff1a;用css实现原生form中radio单选框和input的hover已经focus的样式 在实际的开发中&#xff0c;一般公司ui都会给效果图&#xff0c;比如单选按钮radio样式&#xff0c;input输入框hover的时候样式&#xff0c;以及focus的时候样式&#xff0c;等等&#…

C++学习笔记——C++ deque和vector的区别

C中的std::deque&#xff08;双端队列&#xff09;和std::vector&#xff08;向量&#xff09;是两种不同的容器类型&#xff0c;它们有以下区别&#xff1a; 内部实现方式不同&#xff1a;std::deque使用了一种双端队列的数据结构&#xff0c;它由多个块&#xff08;chunks&am…

软件外包开发需要注意的问题

软件外包开发是一种常见的业务模式&#xff0c;但在选择和合作外包团队时需要注意一些关键问题&#xff0c;以确保项目的成功和顺利进行。以下是一些在软件外包开发过程中需要注意的问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开…

[oeasy]python001_先跑起来_python_三大系统选择_windows_mac_linux

先跑起来 &#x1f94a; Python 什么是 Python&#xff1f; Python [ˈpaɪθɑ:n]是 一门 适合初学者 的编程语言 类库 众多 几行代码 就能 出 很好效果 应用场景丰富 在 各个应用领域 都有 行内人制作的 python 工具类库 非常专业、 好用 特别是 人工智能领域 pytho…

C++ DAY03 类与对象

概述 对象&#xff1a;真实存在的事物 类&#xff1a; 多个对象抽取其共同点形成的概念 静态特征提取出的概念称为成员变量, 又名属性 动态特征提取出的概念称为成员函数, 又名方法 类与对象的关系 在代码中先有类后有对象 一个类可以有多个对象 多个对象可以属于同一个…

HashMap会用就行了?一文解决HashMap的底层问题

前言 我们的手机通讯录之所以能快速定位到特定联系人&#xff0c;就是因为它运用了HashMap底层的原理。手机通讯录将每个联系人的姓名作为键&#xff0c;电话号码作为对应的值&#xff0c;通过这个键值对的方式实现了快速的数据定位和获取。就像你通过关键字快速找到对应的联系…

vue动态配置路由

文章目录 前言定义项目页面格式一、vite 配置动态路由新建 /router/utils.ts引入 /router/utils.ts 二、webpack 配置动态路由总结如有启发&#xff0c;可点赞收藏哟~ 前言 项目中动态配置路由可以减少路由配置时间&#xff0c;并可减少配置路由出现的一些奇奇怪怪的问题 路由…

你学了Python之后让你成为行业卷王,升职加薪更有优势

都说Python能够实现自动化&#xff0c;那么Python具体能应用在哪些地方?哪些岗位学了Python更有优势?今天我们来看看一些大神将Python应用的出神入化的成果。 在这之前&#xff0c;先跟为大家分享个真实的故事。我朋友小宇前段时间为了一个品牌设计的大项目&#xff0c;想方案…

Elasticsearch 和 LangChain 合作开发可用于生产的 RAG 模板

作者&#xff1a;Aditya Tripathi 在过去的几个月里&#xff0c;我们一直与 LangChain 团队密切合作&#xff0c;他们在推出 LangServe 和 LangChain 模板方面取得了进展&#xff01; LangChain Templates 是一组用于构建生产质量的生成式 AI 应用程序的参考架构。 你可以在此处…

QMI8658A Datasheet Rev A-勘误表

QMI8658A Datasheet Rev A-勘误表 1. Reset Register2. CTRL9 Command List3. Temp Sensor Output 1. Reset Register 在5.9章节 和 7.4 章节对复位操作的写入数据&#xff0c;有笔误 正确的数据是&#xff1a; 0xB0 2. CTRL9 Command List 在 5.10.2 章节 Table 28. List…

汇编-loop循环指令

LOOP指令是根据ECX计数器循环&#xff0c;将语句块重复执行特定次数。 ECX自动作为计数器&#xff0c; 每重复循环一次就递减1。 语法如下所示&#xff1a; 循环目的地址必须在距离当前位置计数器的-128到127字节范围内 LOOP指令的执行有两个步骤&#xff1a; 第一步&…

SpringBoot的启动流程

一、SpringBoot是什么&#xff1f; springboot是依赖于spring的&#xff0c;比起spring&#xff0c;除了拥有spring的全部功能以外&#xff0c;springboot无需繁琐的xml配置&#xff0c;这取决于它自身强大的自动装配功能&#xff1b;并且自身已嵌入Tomcat、Jetty等web容器&am…

GreatSQL社区与Amazon、Facebook、Tencent共同被MySQL致谢

一、来自MySQL官方的感谢 在 2023-10-25 MySQL 官方发布的 8.2 版本 Release Notes 中&#xff0c;GreatSQL 社区核心开发者 Richard Dang 和 Hao Lu &#xff0c;分别收到了来自 MySQL 官方的贡献感谢&#xff0c;与Amazon、Facebook(Meta)、Tencent等一并出现在感谢清单中。…

2023年电子工程师大会暨第三届社区年度颁奖活动--【其利天下技术】

华秋电子发烧友将于2023年11月23日在深圳举办一场盛大的技术交流活动&#xff0c;即“2023年电子工程师大会暨第三届社区年度颁奖活动”。本次活动邀请了各大高校教授、企业高管、行业专家和电子工程师们齐聚一堂&#xff0c;围绕“开源硬件”、“OpenHarmony RISC-V”、“工程…

【技术指南资料】编码器与正交译码器

我想提出一个关于PicoScope7新的译码器功能讨论。它已经推出一段时间&#xff0c;但你可能不知道这在汽车领域是扮演相当重要的角色。 正交译码器被用在转子位置传感器来转换关于旋转轴角度及方向的信息。 举例来说&#xff0c;它在电机上采用一对二进制的信号型式。 这种传感器…

C#的类型转换

目录 一、简介二、基本类型转换1.整数类型转换1.隐式转换2.显式转换 2.浮点类型转换1.隐式转换2.显式转换 3.字符类型转换1.字符到整数的转换2.整数到字符的转换 4.布尔类型转换1.布尔到整数的转换2.整数到布尔的转换 三、隐式转换和显式转换四、装箱和拆箱五、自定义类型转换六…

详解SwinIR的论文和代码(SwinIR: Image Restoration Using Swin Transformer)

paper&#xff1a;https://arxiv.org/abs/2108.10257 code&#xff1a;https://github.com/JingyunLiang/SwinIR 目录 1. Swin Transformer layers1.1 局部注意力1.2 移动窗口机制1.3 关键代码理解 2. 整体网络结构2.1 浅层特征提取2.2 深层特征提取2.3 图像重建 3.总结 SwinI…

BUUCTF 秘密文件 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 深夜里&#xff0c;Hack偷偷的潜入了某公司的内网&#xff0c;趁着深夜偷走了公司的秘密文件&#xff0c;公司的网络管理员通过通过监控工具成功的截取Hack入侵时数据流量&#xff0c;但是却无法分析出Hack到底偷走…

Azure 机器学习 - 搜索中的检索增强 (RAG)

目录 一、Azure AI 信息检索系统介绍二、采用 Azure AI 搜索的 RAG 方法三、适合 Azure AI 搜索的自定义 RAG 模式四、Azure AI 搜索中的可搜索内容五、Azure AI 搜索中的内容检索构建查询响应按相关性排名适用于 RAG 方案的 Azure AI 搜索查询的示例代码 六、集成代码和 LLM七…

【MySQL】_JDBC

目录 1. JDBC原理 2. 导入JDBC驱动包 3. 编写JDBC代码实现Insert 3.1 创建并初始化一个数据源 3.2 和数据库服务器建立连接 3.3 构造SQL语句 3.4 执行SQL语句 3.5 释放必要的资源 4. JDBC代码的优化 4.1 从控制台输入 4.2 避免SQL注入的SQL语句 5. 编写JDBC代码实现…