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>