英语培训网站建设需求分析报告,wordpress有一个100的缩略图,全球虚拟主机论坛,做料理网站关键词怎么设置文章目录 一、前言二、所需 Maven 依赖三、先决必要的几个条件信息四、创建客户端连接五、Amazon S3 存储桶操作5.1. 创建桶5.2. 列出桶 六、Amazon S3 对象操作6.1. 上传对象6.2. 列出对象6.3. 下载对象6.4. 复制、重命名和移动对象6.5. 删除对象6.6. 删除多个对象 七、文末总… 文章目录 一、前言二、所需 Maven 依赖三、先决必要的几个条件信息四、创建客户端连接五、Amazon S3 存储桶操作5.1. 创建桶5.2. 列出桶 六、Amazon S3 对象操作6.1. 上传对象6.2. 列出对象6.3. 下载对象6.4. 复制、重命名和移动对象6.5. 删除对象6.6. 删除多个对象 七、文末总结 一、前言
在本文中我们将探索如何利用 Java 编程与 Amazon S3即简单存储服务存储系统进行互动。
需要牢记S3 的结构异常简单每个存储桶能够容纳大量的对象这些对象可以通过 SOAP 接口或 REST 风格的 API 进行访问。
接下来我们将使用适用于Java的AWS开发工具包来实现S3存储桶的创建、列举以及删除。同时我们还将学会如何上传、列举、下载、复制、移动、重命名以及删除这些存储桶内的各个对象。
二、所需 Maven 依赖
在开始之前我们需要在项目中声明 AWS SDK 依赖项
dependencygroupIdsoftware.amazon.awssdk/groupIdartifactIds3/artifactIdversion2.20.52/version
/dependency要查看最新版本我们可以检查 Maven Central或者其他的国内 Maven 仓库。 三、先决必要的几个条件信息
要使用AWS SDK我们需要一些东西
AWS 帐户我们需要一个 Amazon Web Services 帐户。如果我们没有我们可以直接在 AWS 控制台创建一个帐户。AWS 安全凭证这些是我们的访问密钥允许我们以编程方式调用 AWS API 操作。我们可以通过两种方式获取这些凭证使用“安全凭证”页面的访问密钥部分中的 AWS 根账户凭证或者使用IAM控制台中的 IAM 用户凭证。选择 AWS 区域Region我们还必须选择要存储 Amazon S3 数据的 AWS 区域。请记住S3 存储价格因地区而异。有关更多详细信息请参阅官方文档。
四、创建客户端连接
首先我们需要创建一个客户端连接来访问 Amazon S3 Web 服务。为此我们将使用 Amazon S3 接口
AWSCredentials credentials new BasicAWSCredentials(AWS accesskey, AWS secretkey
);然后我们将配置客户端
AmazonS3 s3client AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials)).withRegion(Regions.US_EAST_2).build();五、Amazon S3 存储桶操作
5.1. 创建桶
需要注意的是存储桶命名空间是由系统的所有用户共享的。因此我们的存储桶名称在 Amazon S3 中的所有现有存储桶名称中必须是唯一的稍后我们将了解如何检查这一点。
另外根据官方文档规定Bucket 名称必须符合以下要求
名称不应包含下划线名称长度应介于 3 到 63 个字符之间名称不应以破折号结尾名称不能包含相邻的句点名称后面不能包含破折号例如“my-.bucket.com”和“my.-bucket”无效名称不能包含大写字符
现在让我们创建一个存储桶
String bucketName baeldung-bucket;if(s3client.doesBucketExist(bucketName)) {LOG.info(Bucket name is not available. Try again with a different Bucket name.);return;
}CreateBucketRequest bucketRequest CreateBucketRequest.builder().bucket(bucketName).build();s3Client.createBucket(bucketRequest);在创建存储桶之前我们必须使用doesBucketExist()方法检查存储桶名称是否可用。如果名称可用那么我们将构建一个CreateBucketRequest 并提供存储桶名称。最后一步是将bucketRequest传递给 S3Client 的CreateBucketRequest createBucketRequest的createBucket。
5.2. 列出桶
现在我们已经创建了一些存储桶让我们使用listBuckets ()方法打印 S3 环境中可用的所有存储桶的列表。此方法将返回一个ListBucketsResponse 其中包含有关存储桶的信息。
ListBucketsResponse listBucketsResponse s3Client.listBuckets();// Display the bucket names
ListBucket buckets listBucketsResponse.buckets();
System.out.println(Buckets:);
for (Bucket bucket : buckets) {System.out.println(bucket.name());
}这将列出 S3 环境中存在的所有存储桶
baeldung-bucket
baeldung-bucket-test2
elasticbeanstalk-us-east-25.3. 删除桶
**在删除存储桶之前确保存储桶是空的非常重要。**否则将会抛出异常。
首先我们需要构建一个DeleBucketRequest实例并向其传递存储桶名称。然后我们调用 s3Client 对象上的deleteBucket方法并将请求作为参数传递。
另请注意只有存储桶的所有者才能删除它无论其权限如何访问控制策略
try {DeleteBucketRequest deleteBucketRequest DeleteBucketRequest.builder().bucket(bucketName).build();s3Client.deleteBucket(deleteBucketRequest);System.out.println(Successfully deleted bucket : bucketName);
} catch (S3Exception e) {System.err.println(e.getMessage());System.exit(1);
}六、Amazon S3 对象操作
Amazon S3 存储桶内的文件或数据集合称为对象。我们可以对对象执行多种操作例如上传、列出、下载、复制、移动、重命名和删除。
6.1. 上传对象
上传对象是一个非常简单的过程。首先我们将构建一个PutObjectRequest实例指定存储桶名称和密钥。然后我们将该请求和包含数据的文件的路径传递给 s3Client 的putObject方法
PutObjectRequest request PutObjectRequest.builder().bucket(bucketName).key(key).build();return s3Client.putObject(request, Path.of(file.toURI()) );6.2. 列出对象
我们将使用listObjects()方法列出 S3 存储桶中的所有可用对象
ListObjectsV2Request listObjectsV2Request ListObjectsV2Request.builder().bucket(bucketName).build();
ListObjectsV2Response listObjectsV2Response s3Client.listObjectsV2(listObjectsV2Request);ListS3Object contents listObjectsV2Response.contents();System.out.println(Number of objects in the bucket: contents.stream().count());
contents.stream().forEach(System.out::println);要列出 AWS S3 存储桶中的对象我们需要创建一个ListObjectsV2Request实例并指定存储桶名称。然后我们在 s3Client 对象上调用 listObjectsV2方法并将请求作为参数传递。此方法返回一个ListObjectsV2Response其中包含有关存储桶中对象的信息。
6.3. 下载对象
要下载对象我们首先创建一个GetObjectRequest实例并将存储桶名称和密钥作为输入参数传递给它。然后我们将其提供给 getObjectAsBytes()方法并获取响应。一旦我们得到响应我们就可以提取字节数组。最后一步是处理字节数组
GetObjectRequest objectRequest GetObjectRequest.builder().bucket(bucketName).key(objectKey).build();ResponseBytesGetObjectResponse responseResponseBytes s3Client.getObjectAsBytes(objectRequest);byte[] data responseResponseBytes.asByteArray();// Write the data to a local file.
java.io.File myFile new java.io.File(/Users/user/Desktop/hello.txt );
OutputStream os new FileOutputStream(myFile);
os.write(data);
System.out.println(Successfully obtained bytes from an S3 object);
os.close();6.4. 复制、重命名和移动对象
我们可以通过调用 s3client 上的copyObject()方法来复制对象该方法接受CopyObjectRequest实例。因此CopyObjectRequest接受四个参数
源存储桶名称源存储桶中的对象键目标存储桶名称可以与源存储桶名称相同目标存储桶中的对象键
CopyObjectRequest copyObjectRequest CopyObjectRequest.builder().sourceBucket(sourceBucketName).sourceKey(sourceKey).destinationBucket(destinationBucketName).destinationKey(destinationKey).build();return s3Client.copyObject(copyObjectRequest);注意我们可以结合使用copyObject()方法和deleteObject()来执行移动和重命名任务。这将涉及首先复制对象然后将其从旧位置删除。
6.5. 删除对象
要删除对象我们将在s3client上调用deleteObject()方法并传递DeleteObjectRequest实例。为了创建DeleteObjectRequest实例我们需要传递要删除的对象的键和存储桶名称
DeleteObjectRequest deleteObjectRequest DeleteObjectRequest.builder().bucket(bucketName).key(objectKey).build();s3Client.deleteObject(deleteObjectRequest);6.6. 删除多个对象
要一次删除多个对象我们首先创建DeleteObjectsRequest对象并传递存储桶。然后我们将传递一个包含所有要删除的对象键的 ArrayList。
一旦我们有了这个DeleteObjectsRequest对象我们就可以将它作为参数传递给我们的 s3client 的deleteObjects()方法。如果成功它将删除我们提供的所有对象
ArrayListObjectIdentifier toDelete new ArrayList();
for(String objKey : keys) {toDelete.add(ObjectIdentifier.builder().key(objKey).build());
}DeleteObjectsRequest deleteObjectRequest DeleteObjectsRequest.builder().bucket(bucketName).delete(Delete.builder().objects(toDelete).build()).build();s3Client.deleteObjects(deleteObjectRequest);七、文末总结
在本文中我们重点介绍了在存储桶级别和对象级别与 Amazon S3 Web 服务交互的基础知识。重点在 Java 应用中使用 Amazon S3Simple Storage Service进行存储桶和对象操作的方法、详细说明了如何进行存储桶操作包括创建桶和列出桶。在对象操作部分我们涵盖了上传、列出和下载对象的过程还介绍了复制、重命名、移动对象以及删除对象的方法。此外我们还提供了删除多个对象的操作步骤。通过本文小伙伴们可以了解如何通过 Java 代码有效地与 Amazon S3 进行交互实现对存储桶和对象的各种操作。