在上执行操作Amazon S3对象 - AWS SDK for Java

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

在上执行操作Amazon S3对象

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

注意

这些代码示例假设你了解中的材料使用AWS SDK for Java 并且已配置默认值AWS使用中的信息的凭据设置AWS发展凭证和区域.

上传对象

使用 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 上的完整示例

复制、移动或重命名对象

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

导入

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

代码

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方法,您可以从同一存储桶中删除多个对象,方式是将这些对象的名称传递到链接:SDK for java/v1/ 引用 /com/amazonaws/服务/s3/模型/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 上的完整示例