我们宣布
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 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 上的完整示例
注意
您可以将 copyObject
与 deleteObject 配合使用来移动或重命名对象,方式是先将对象复制到新名称 (您可以使用与源和目标相同的存储桶),然后从对象的旧位置删除对象。
删除对象
使用 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 上的完整示例