ToB企服应用市场:ToB评测及商务社交产业平台
标题:
[ 云计算 | AWS 实践 ] 使用 Java 更新现有 Amazon S3 对象
[打印本页]
作者:
魏晓东
时间:
2024-7-21 21:45
标题:
[ 云计算 | 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 存储桶中
一、媒介
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 网站内看到这一行,
说明网络爬虫可能在本人还没有完整发布的时候就抓走了我的文章,
可能导致内容不完整,请去上述的原文链接查看原文。
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4