View a markdown version of this page

在 Amazon S3 对象上执行操作 - Amazon SDK for Java 1.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon SDK for Java 1.x于2025年12月31日达到支撑终止状态。我们建议您迁移到 Amazon SDK for Java 2.x 以继续获得新功能、可用性改进和安全更新。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon S3 对象上执行操作

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

注意

这些代码示例假定您了解使用Amazon SDK for Java 中的内容,并且已使用设置用于开发的 Amazon 凭证和区域中的信息配置默认 Amazon 凭证。

上传对象

使用 AmazonS3 客户端的 putObject 方法,并为其提供桶名称、键名称和要上传的文件。存储桶必须存在,否则将出现错误

导入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3;

代码

System.out.format("Uploading %s to S3 bucket %s...\n", file_path, bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { s3.putObject(bucket_name, key_name, new File(file_path)); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

请参阅 GitHub 上的完整示例

列出对象

要获取桶中的对象列表,请使用 AmazonS3 客户端的 listObjects 方法,并为其提供桶名称。

listObjects 方法返回一个 ObjectListing 对象,该对象提供有关存储桶中对象的信息。要列出对象名称(键),可使用 getObjectSummaries 方法获取 S3ObjectSummary 对象的列表,其中每个对象均表示存储桶中的一个对象。然后调用其 getKey 方法以检索对象名称。

导入

import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListObjectsV2Result; import com.amazonaws.services.s3.model.S3ObjectSummary;

代码

System.out.format("Objects in S3 bucket %s:\n", bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); ListObjectsV2Result result = s3.listObjectsV2(bucket_name); List<S3ObjectSummary> objects = result.getObjectSummaries(); for (S3ObjectSummary os : objects) { System.out.println("* " + os.getKey()); }

请参阅 GitHub 上的完整示例

下载对象

使用 AmazonS3 客户端的 getObject 方法,并向其传递要下载的桶和对象的名称。如果成功,此方法将返回一个 S3Object指定的存储桶和对象键必须存在,否则将出现错误

您可以通过对 getObjectContent 调用 S3Object 来获取对象的内容。这将返回一个 S3ObjectInputStream,其行为与标准 Java InputStream 对象的相同。

以下示例从 S3 下载一个对象,然后将该对象的内容保存到一个文件(使用与对象键相同的名称):

导入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.S3Object; import com.amazonaws.services.s3.model.S3ObjectInputStream; import java.io.File;

代码

System.out.format("Downloading %s from S3 bucket %s...\n", key_name, bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { S3Object o = s3.getObject(bucket_name, key_name); S3ObjectInputStream s3is = o.getObjectContent(); FileOutputStream fos = new FileOutputStream(new File(key_name)); byte[] read_buf = new byte[1024]; int read_len = 0; while ((read_len = s3is.read(read_buf)) > 0) { fos.write(read_buf, 0, read_len); } s3is.close(); fos.close(); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } catch (FileNotFoundException e) { System.err.println(e.getMessage()); System.exit(1); } catch (IOException e) { System.err.println(e.getMessage()); System.exit(1); }

请参阅 GitHub 上的完整示例

复制、移动或重命名对象

您可以使用 AmazonS3 客户端的 copyObject 方法将对象从一个桶复制到另一个桶。它采用要从中复制的存储桶的名称、要复制的对象以及目标存储桶名称。

导入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions;

代码

try { s3.copyObject(from_bucket, object_key, to_bucket, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } System.out.println("Done!");

请参阅 GitHub 上的完整示例

注意

您可以将 copyObjectdeleteObject 配合使用来移动重命名对象,方式是先将对象复制到新名称(您可以使用与源和目标相同的存储桶),然后从对象的旧位置删除对象。

删除对象

使用 AmazonS3 客户端的 deleteObject 方法,并向其传递要删除的桶和对象的名称。指定的存储桶和对象键必须存在,否则将出现错误

导入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions;

代码

final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { s3.deleteObject(bucket_name, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

请参阅 GitHub 上的完整示例

一次性删除多个对象

使用 AmazonS3 客户端 deleteObjects 的方法,您可以将同一个桶中的多个对象的名称传递给 link:sdk-for-java/v1/reference/com/amazonaws/services/s3/model/DeleteObjectsRequest.html 方法,从而删除这些对象。

导入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3;

代码

final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { DeleteObjectsRequest dor = new DeleteObjectsRequest(bucket_name) .withKeys(object_keys); s3.deleteObjects(dor); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

请参阅 GitHub 上的完整示例