适用于 Java 的 AWS 开发工具包
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

在 Amazon S3 对象上执行操作

重要

这是一个预览版,不建议用于生产环境。

Amazon S3 对象表示一个文件或数据集合。每个对象都必须包含在一个存储桶中。

注意

最佳实践

建议您对 Amazon S3 存储桶启用 AbortIncompleteMultipartUpload 生命周期规则。

该规则指示 Amazon S3 中止在启动后没有在指定天数内完成的分段上传。当超过设置的时间限制时,Amazon S3 将中止上传,然后删除未完成的上传数据。

有关更多信息,请参阅 Amazon S3 User Guide 中的使用版本控制的存储桶的生命周期配置

注意

这些代码段假定您了解使用适用于 Java 的 AWS 开发工具包 2.0 开发人员预览中的内容,并且已使用设置用于开发的 AWS 凭证和区域中的信息配置默认 AWS 凭证。

上传对象

构建 PutObjectRequest 并提供存储桶名称和密钥名称。然后,将 S3ClientputObject 方法与包含对象内容和 PutObjectRequest 对象的 RequestBody 结合使用。存储桶必须存在,否则服务将返回错误。

导入

import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.ListObjectsV2Response; import software.amazon.awssdk.services.s3.paginators.ListObjectsV2Iterable;

代码

Region region = Region.US_WEST_2; s3 = S3Client.builder().region(region).build(); String bucket = "bucket" + System.currentTimeMillis(); String key = "key"; // Put Object s3.putObject(PutObjectRequest.builder().bucket(bucket).key(key) .build(), RequestBody.fromByteBuffer(getRandomByteBuffer(10_000)));

请参阅 GitHub 上的完整示例

分段上传对象

使用 S3ClientcreateMultipartUpload 方法获取上传 ID。然后,使用 uploadPart 方法上传每个段。最后,使用 S3ClientcompleteMultipartUpload 方法告知 Amazon S3 合并所有已上传的段并完成上传操作。

导入

import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CompleteMultipartUploadRequest; import software.amazon.awssdk.services.s3.model.CompletedMultipartUpload; import software.amazon.awssdk.services.s3.model.CompletedPart; import software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest; import software.amazon.awssdk.services.s3.model.CreateMultipartUploadResponse; import software.amazon.awssdk.services.s3.model.S3Object;

代码

CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder() .bucket(bucketName).key(key) .build(); CreateMultipartUploadResponse response = s3.createMultipartUpload(createMultipartUploadRequest); String uploadId = response.uploadId(); System.out.println(uploadId); // Upload all the different parts of the object UploadPartRequest uploadPartRequest1 = UploadPartRequest.builder().bucket(bucketName).key(key) .uploadId(uploadId) .partNumber(1).build(); String etag1 = s3.uploadPart(uploadPartRequest1, RequestBody.fromByteBuffer(getRandomByteBuffer(5 * MB))).eTag(); CompletedPart part1 = CompletedPart.builder().partNumber(1).eTag(etag1).build(); UploadPartRequest uploadPartRequest2 = UploadPartRequest.builder().bucket(bucketName).key(key) .uploadId(uploadId) .partNumber(2).build(); String etag2 = s3.uploadPart(uploadPartRequest2, RequestBody.fromByteBuffer(getRandomByteBuffer(3 * MB))).eTag(); CompletedPart part2 = CompletedPart.builder().partNumber(2).eTag(etag2).build(); // Finally call completeMultipartUpload operation to tell S3 to merge all uploaded // parts and finish the multipart operation. CompletedMultipartUpload completedMultipartUpload = CompletedMultipartUpload.builder().parts(part1, part2).build(); CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest.builder().bucket(bucketName).key(key).uploadId(uploadId) .multipartUpload(completedMultipartUpload).build(); s3.completeMultipartUpload(completeMultipartUploadRequest);

请参阅 GitHub 上的完整示例

下载对象

构建 GetObjectRequest 并提供存储桶名称和密钥名称。使用 S3ClientgetObject 方法,并向其传递 GetObjectRequest 对象和 ResponseTransformer 对象。ResponseTransformer 将创建一个将响应内容写入到指定的文件或流的响应处理程序。

以下示例指定要将对象内容写入到的文件名。

导入

import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.core.sync.RequestBody;

代码

// Get Object s3.getObject(GetObjectRequest.builder().bucket(bucket).key(key).build(), ResponseTransformer.toFile(Paths.get("multiPartKey")));

请参阅 GitHub 上的完整示例

删除数据元

构建 DeleteObjectRequest 并提供存储桶名称和密钥名称。使用 S3ClientdeleteObject 方法,并向其传递要删除的存储桶和对象的名称。指定的存储桶和对象键必须存在,否则服务将返回错误。

导入

import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;

代码

// Delete Object DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder().bucket(bucket).key(key).build(); s3.deleteObject(deleteObjectRequest);

请参阅 GitHub 上的完整示例