Amazon Simple Storage Service (Amazon S3)html
Amazon S3 提供了一个简单 Web 服务接口,可用于随时在 Web 上的任何位置存储和检索任何数量的数据。此服务让全部开发人员都能访问同一个具有高扩展性、可靠性、安全性和快速价廉的数据存储基础设施。java
Amazon S3的简单操做:git
1. 使用 AWS 帐户或 IAM 用户凭证进行请求github
为 AWS 开发工具包配置凭证的最简单方法是使用 AWS 凭证文件,AWS 开发工具包会寻找您的本地 AWS 凭证文件。若是您使用 AWS Command Line Interface (AWS CLI),那么您可能已经配置了本地 AWS 凭证文件。不然,请按照如下步骤设置凭证文件:安全
打开 IAM 控制台 -> 建立新 IAM 用户并赋予权限-> 下载csv -> 在本地计算机的主目录/.aws下建立credentials空文件->将csv文件内容复制到credentials文件中ide
[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key
AWS SDK for Java -- 要使用 AWS 帐户或 IAM 用户凭证向 Amazon S3 发出经身份验证的请求,请执行如下操做:工具
使用 AmazonS3ClientBuilder
类建立 AmazonS3Client
实例。开发工具
执行 AmazonS3Client
方法之一,以向 Amazon S3 发送请求。客户端将经过您提供的凭证生成所需的签名并将其包含在请求中。您能够在不提供安全凭证的状况下建立 AmazonS3Client
客户端。使用此客户端发送的请求是匿名的请求,它们不带签名。若是为不是公开可用的资源发送了匿名请求,Amazon S3 返回错误。网站
// Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-s3-developer-guide/blob/master/LICENSE-SAMPLECODE.) import java.io.IOException; import java.util.List; import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListObjectsRequest; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.S3ObjectSummary; public class MakingRequests { public static void main(String[] args) throws IOException { String clientRegion = "*** Client region ***"; String bucketName = "*** Bucket name ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Get a list of objects in the bucket, two at a time, and // print the name and size of each object. ListObjectsRequest listRequest = new ListObjectsRequest().withBucketName(bucketName).withMaxKeys(2); ObjectListing objects = s3Client.listObjects(listRequest); while(true) { List<S3ObjectSummary> summaries = objects.getObjectSummaries(); for(S3ObjectSummary summary : summaries) { System.out.printf("Object \"%s\" retrieved with size %d\n", summary.getKey(), summary.getSize()); } if(objects.isTruncated()) { objects = s3Client.listNextBatchOfObjects(objects); } else { break; } } } catch(AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch(SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
2. 使用 IAM 用户临时凭证进行请求ui
AWS 帐户或 IAM 用户能够请求临时安全证书,而后使用它们向 Amazon S3 发送经身份验证的请求。
存储桶是 Amazon S3 中用于存储对象的容器。每一个对象都储存在一个存储桶中。例如,若是名为 photos/puppy.jpg
的对象存储在 johnsmith
存储桶中,则可以使用 URL http://johnsmith.s3.amazonaws.com/photos/puppy.jpg
对该对象进行寻址。存储桶有如下几种用途:组织最高等级的 Amazon S3 命名空间、识别负责存储和数据传输费用的帐户、在访问控制中发挥做用以及用做使用率报告的汇总单位。
1. 将存储桶配置为申请方付款
一般,存储桶拥有者将支付与他们的存储桶相关联的全部 Amazon S3 存储和数据转移费用。可是,存储桶拥有者能够将存储桶配置为申请方付款存储桶。一般状况下,当您想共享数据,而又不会产生与访问数据等其余操做相关联的费用时,您能够将存储桶配置为申请方付款。将存储桶配置为申请方付款存储桶后,申请方必须在其请求中包含 x-amz-request-payer
(在 POST、GET 和 HEAD 请求的标头中,或在 REST 请求中做为参数),以显示他们知道请求和数据下载将产生费用。可是,在如下条件下会对存储桶拥有者收取请求费用:
1)控制台设置:在“Buckets”列表中单击存储桶名 -> 单击“Properties” -> 单击“Requester Pays” -> 选中 Enabled
2)API设置:使用 PUT
请求在指定存储桶上将 Payer
值设置为 Requester
。您只能在存储桶级别上设置申请方付款;您不能为存储桶内的特定对象设置申请方付款。您能够随时将存储桶配置为 BucketOwner
或 Requester
。可是,须要注意的是可能会出现一些短暂延迟 (大约数分钟),新配置值才会生效。
PUT ?requestPayment HTTP/1.1 Host: [BucketName].s3.amazonaws.com Content-Length: 173 Date: Wed, 01 Mar 2009 12:00:00 GMT Authorization: AWS [Signature] <RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Payer>Requester</Payer> </RequestPaymentConfiguration>