創建桶
功能說明
桶(Bucket)是用于存儲對象(Object)的容器,所有的對象都必須隸屬于某個桶。您可以使用 createBucket 接口創建桶。
代碼示例
public function CreateBucket()
{
try {
$res = $this->s3Client->createBucket([
'Bucket' => '<your-bucket-name>',
]);
echo $res;
} catch (Aws\S3\Exception\S3Exception $e) {
echo "Exception: $e";
}
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
獲取桶列表
功能說明
桶(Bucket)是用于存儲對象(Object)的容器,所有的對象都必須隸屬于某個桶。您可以通過listBuckets接口獲取桶列表信息。
代碼示例
public function ListBucket()
{
try {
$res = $this->s3Client->listBuckets();
var_dump($res->get('Buckets'));
} catch (Aws\S3\Exception\S3Exception $e) {
echo "Exception: $e";
}
}返回結果
| 參數 | 類型 | 說明 |
|---|---|---|
| Buckets | Bucket array | 桶信息列表 |
判斷桶是否存在
功能說明
桶(Bucket)是用于存儲對象(Object)的容器,所有的對象都必須隸屬于某個桶。您可以使用 doesBucketExist 接口判斷桶是否存在。
代碼示例
public function DoesBucketExist()
{
$bucket = '<your-bucket-name>';
try {
$exist = $this->s3Client->doesBucketExist($bucket);
echo $exist;
} catch (Aws\S3\Exception\S3Exception $e) {
echo "Exception: $e";
}
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
返回結果
| 參數 | 類型 | 說明 |
|---|---|---|
| exist | bool | 桶是否存在 |
刪除桶
功能說明
桶(Bucket)是用于存儲對象(Object)的容器,所有的對象都必須隸屬于某個桶。您可以通過 deleteBucket 接口刪除桶。刪除一個桶前,需要先刪除該桶中的全部對象(包括對象版本)。
代碼示例
public function DeleteBucket()
{
try {
$res = $this->s3Client->deleteBucket([
'Bucket' => '<your-bucket-name>',
]);
echo $res;
} catch (Aws\S3\Exception\S3Exception $e) {
echo "Exception: $e";
}
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
設置桶訪問權限
功能說明
您可以使用putBucketAcl接口進行桶訪問權限的修改。用戶在設置 bucket 的 ACL 之前需要具備 WRITE_ACP 權限。桶訪問權限包含了 AccessControlList 與CannedAccesssControlList 兩種格式。
代碼示例
CannedAccesssControlList
使用 CannedAccesssControlList 設置桶的訪問權限示例代碼如下:
public function PutBucketAcl()
{
//設置桶為公共讀寫
try {
$this->s3Client->putBucketAcl([
'Bucket' => '<your-bucket-name>',
'ACL' => 'public-read', // private、public-read、public-read-write
]);
echo "Succeed in setting bucket ACL.\n";
} catch (AwsException $e) {
// Display error message
echo $e->getMessage();
echo "\n";
}
echo "putBucketAcl success\n";
}AccessControlList
使用 AccessControlList 設置桶訪問權限時,可以設置特定用戶對桶的訪問權限。
public function PutBucketAcl2()
{
try {
$this->s3Client->putBucketAcl([
'Bucket' => '<your-bucket-name>',
'AccessControlPolicy' => [
// 可以從 getBucketAcl 接口獲取 Owner 信息
'Owner' => [
'ID' => 'exampleuser',
'DisplayName' => 'Example DisplayName',
],
'Grants' => [
[
//開啟用戶 <your-user-id> 的完全控制權限
'Grantee' => [
'ID' => '<your-user-id>',
'Type' => 'CanonicalUser',
],
'Permission' => 'FULL_CONTROL', // FULL_CONTROL、WRITE、WRITE_ACP、READ、READ_ACP
],
[
//開啟所有用戶的讀權限
'Grantee' => [
'Type' => 'Group',
'URI' => '//acs.amazonaws.com/groups/global/AllUsers',
],
'Permission' => 'READ',
],
// ...
],
],
]);
echo "Succeed in setting bucket ACL.\n";
} catch (AwsException $e) {
echo $e->getMessage();
echo "\n";
}
}請求參數
CannedAccesssControlList
使用 CannedAccesssControlList 方式設置桶權限參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
| ACL | string | CannedAccesssControlList 值 | 是 |
CannedAccesssControlList 是一系列的預定義訪問權限,通過 ACL 參數設置,ACL可設置為以下值:
| ACL值 | 權限 |
|---|---|
| private | 私有讀寫 |
| public-read | 公共讀私有寫 |
| public-read-write | 公共讀寫 |
AccessControlList
使用 AccessControlList 方式設置桶權限參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
| AccessControlPolicy | AccessControlPolicy | acl詳細配置 | 是 |
在 AccessControlList 中可通過 Grants 設置權限,Grants 中關于Permission說明如下:
| Permission值 | 權限 |
|---|---|
| READ | 允許列出桶中的對象 |
| WRITE | 允許創建、覆蓋、刪除桶中的對象 |
| READ_ACP | 允許獲取桶的ACL信息 |
| WRITE_ACP | 允許修改桶的ACL信息 |
| FULL_CONTROL | 獲得READ、WRITE、READ_ACP、WRITE_ACP權限 |
獲取桶訪問權限
功能說明
您可以使用 getBucketAcl 接口獲取桶的訪問權限。
代碼示例
public function GetBucketAcl()
{
try {
$resp = $this->s3Client->getBucketAcl([
'Bucket' => '<your-bucket-name>'
]);
//打印獲取的桶 owner displayname,ID 以及訪問權限信息
echo "Succeed in retrieving bucket ACL as follows: \n";
echo 'Owner DisplayName: ' . $resp['Owner']['DisplayName'] . "\n";
echo 'Owner ID: ' . $resp['Owner']['ID'] . "\n";
foreach ($resp['Grants'] as $grant) {
echo "Grant: \n";
foreach($grant['Grantee'] as $k=>$val)
{
echo $k . ": " . $val . "\n";
}
echo 'Permission: ' . $grant['Permission'] . "\n";
}
} catch (AwsException $e) {
echo 'error:' . $e->getMessage();
echo "\n";
}
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
返回結果
| 參數 | 類型 | 說明 |
|---|---|---|
| Owner | Owner | 桶的owner信息 |
| Grants | Grants | 桶的訪問權限信息 |
設置桶策略
功能說明
您可以使用 putBucketPolicy 接口設定桶策略,桶策略可以靈活地配置用戶各種操作和訪問資源的權限。訪問控制列表只能對單一對象設置權限,而桶策略可以基于各種條件對一個桶內的全部或者一組對象配置權限。桶的擁有者擁有 PutBucketPolicy 操作的權限,如果桶已經設置了 policy ,則新設置的 policy 會覆蓋原有的policy。
policy的示例如下:
{
"Id":"PolicyId",
"Version":"2012-10-17",
"Statement":[
{
"Sid":"ExampleStatementID1",
"Principal":{
"AWS":[
"arn:aws:iam:::user/userId",
"arn:aws:iam:::user/userName"
]
},
"Effect":"Allow",
"Action":[
"s3:ListBucket",
"s3:CreateBucket"
],
"Resource":[
"arn:aws:iam:::exampleBucket"
],
"Condition":"some conditions"
},
......
]
}Statement的內容說明如下:
| 元素 | 描述 | 是否必要 |
|---|---|---|
| Sid | statement Id,可選關鍵字,描述statement的字符串 | 否 |
| Principal | 可選關鍵字,被授權人,指定本條statement權限針對的Domain以及User,支持通配符“*”,表示所有用戶(匿名用戶)。當對Domain下所有用戶授權時,Principal格式為arn:aws:iam:::user/*。當對某個User進行授權時,Principal格式為arn:aws:iam:::user/<your-user-name> | 可選,Principal與NotPrincipal選其一 |
| NotPrincipal | 可選關鍵字,不被授權人,statement匹配除此之外的其他人。取值同Principal | 可選,NotPrincipal與Principal選其一 |
| Action | 可選關鍵字,指定本條statement作用的操作,Action字段為對象存儲支持的所有操作集合,以字符串形式表示,不區分大小寫。支持通配符“*”,表示該資源能進行的所有操作。例如:"Action":["s3:List*", "s3:Get*"] | 可選,Action與NotAction選其一 |
| NotAction | 可選關鍵字,指定一組操作,statement匹配除該組操作之外的其他操作。 取值同Action | 可選,NotAction與Action選其一 |
| Effect | 必選關鍵字,指定本條statement的權限是允許還是拒絕,Effect的值必須為Allow或者Deny | 必選 |
| Resource | 可選關鍵字,指定statement起作用的一組資源,支持通配符”*”,表示所有資源 | 可選,Resource與NotResource選其一 |
| NotResource | 可選關鍵字,指定一組資源,statement匹配除該組資源之外的其他資源。 取值同Resource | 可選,NotResource與Resource選其一 |
| Condition | 可選關鍵字,本條statement生效的條件 | 可選 |
代碼示例
在上傳對象時如果不設置對象訪問權限,默認下只有對象的擁有者才能訪問該對象。如果需要使桶內對象可公共讀,可以通過設置桶策略的方式允許桶內對象公共讀,以下代碼展示如何設置桶內對象可公共讀的策略:
public function PutBucketPolicy()
{
$bucket = '<your-bucket-name>';
$this->s3Client->putBucketPolicy([
'Bucket' => $bucket,
'Policy' => '{
"Version": "2012-10-17",
"Statement": [{
"Sid": "1",
"Effect": "Allow",
"Principal": {"AWS": "*"},
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::' . $bucket . '/*"]
}]
}',
]);
echo "putBucketPolicy success\n";
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
| Policy | string | 策略內容,json字符串 | 是 |
獲取桶策略
功能說明
您可以使用 getBucketPolicy 接口獲取桶策略。
代碼示例
public function GetBucketPolicy()
{
$res = $this->s3Client->getBucketPolicy([
'Bucket' => '<your-bucket-name>',
]);
echo "getBucketPolicy success " . $res->get('Policy') . "\n";
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
返回結果
| 參數 | 類型 | 說明 |
|---|---|---|
| Policy | string | json格式的桶策略 |
關于桶策略的說明請參考 桶策略說明 。
刪除桶策略
功能說明
您可以使用 deleteBucketPolicy 接口刪除桶策略。
代碼示例
public function DeleteBucketPolicy()
{
$this->s3Client->deleteBucketPolicy([
'Bucket' => '<your-bucket-name>',
]);
echo "deleteBucketPolicy success\n";
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
設置桶生命周期配置
功能說明
生命周期管理可以通過設置規則實現自動清理過期的對象,優化存儲空間。本文介紹如何設置桶(Bucket)生命周期配置。 您可以使用putBucketLifecycleConfiguration接口設置桶的生命周期配置,配置規則可以通過匹配對象key前綴、標簽的方法設置當前版本或者歷史版本對象的過期時間,對象過期后會被自動刪除。
代碼示例
public function PutBucketLifecycleConfiguration()
{
$this->s3Client->putBucketLifecycleConfiguration([
'Bucket' => '<your-bucket-name>',
'LifecycleConfiguration' => [
'Rules' => [
[
'ID' => 'TestOnly', // unique id
'Expiration' => [
'Days' => 365,
],
'Status' => 'Enabled', // required
'Filter' => [ // required
'Prefix' => '',
],
'Transitions' => [
[
'Days' => 365,
'StorageClass' => 'GLACIER',
],
],
'AbortIncompleteMultipartUpload' => [
'DaysAfterInitiation' => 365,
],
],
],
],
]);
echo "putBucketLifecycleConfiguration success\n";
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
| LifecycleConfiguration | LifecycleConfiguration | 封裝了生命周期規則的數組,最多包含1000條規則 | 是 |
關于生命周期規則Rule一些說明
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| ID | string | 規則ID | 否 |
| Status | string | 是否啟用規則 (Enabled|Disabled) | 是 |
| Expiration | Expiration | 文件過期時間 | 否 |
| AbortIncompleteMultipartUpload | AbortIncompleteMultipartUpload | 未完成上傳的分片過期時間 | 否 |
| Transitions | Transition數組 | 文件轉換到低頻存儲規則(距離修改時間) | 否 |
| Filter | Filter | 應用范圍,可以指定前綴或對象標簽 | 否 |
關于Expiration的說明:
| 參數 | 類型 | 說明 |
|---|---|---|
| Days | int | 過期天數 |
關于AbortIncompleteMultipartUpload的說明:
| 參數 | 類型 | 說明 |
|---|---|---|
| DaysAfterInitiation | int | 過期天數 |
關于Transition的說明:
| 參數 | 類型 | 說明 |
|---|---|---|
| Days | int | 轉換過期天數 |
| StorageClass | StorageClass | 要轉換的存儲類型 |
關于Filter的說明:
| 參數 | 類型 | 說明 |
|---|---|---|
| Prefix | string | 需要過濾的前綴 |
獲取桶生命周期配置
功能說明
您可以使用 GetBucketLifecycleConfiguration 接口獲取桶的生命周期配置。
代碼示例
public function GetBucketLifecycleConfiguration()
{
$res = $this->s3Client->getBucketLifecycleConfiguration([
'Bucket' => '<your-bucket-name>',
]);
echo "getBucketLifecycleConfiguration success " . $res . "\n";
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
返回結果
| 參數 | 類型 | 說明 |
|---|---|---|
| Rules | Rules | 一個描述生命周期管理的規則數組,一條規則包含了規則ID、匹配的對象key前綴、匹配的對象標簽信息、當前版本對象過期時間、歷史版本對象過期時間和是否生效標識等信息 |
關于生命周期規則Rule一些說明
| 參數 | 類型 | 說明 |
|---|---|---|
| ID | string | 規則ID |
| Status | string | 是否啟用規則 (Enabled|Disabled) |
| Expiration | Expiration | 文件過期時間 |
| AbortIncompleteMultipartUpload | AbortIncompleteMultipartUpload | 未完成上傳的分片過期時間 |
| Transitions | Transition數組 | 文件轉換到低頻存儲規則(距離修改時間) |
| Filter | Filter | 應用范圍,可以指定前綴或對象標簽 |
關于Expiration的說明:
| 參數 | 類型 | 說明 |
|---|---|---|
| Days | int | 過期天數 |
關于AbortIncompleteMultipartUpload的說明:
| 參數 | 類型 | 說明 |
|---|---|---|
| DaysAfterInitiation | int | 過期天數 |
關于Transition的說明:
| 參數 | 類型 | 說明 |
|---|---|---|
| Days | int | 轉換過期天數 |
| StorageClass | StorageClass | 要轉換的存儲類型 |
關于Filter的說明:
| 參數 | 類型 | 說明 |
|---|---|---|
| Prefix | string | 需要過濾的前綴 |
刪除桶生命周期配置
功能說明
您可以使用deleteBucketLifecycle接口刪除桶的生命周期配置。
代碼示例
public function DeleteBucketLifecycleConfiguration()
{
$this->s3Client->deleteBucketLifecycle([
'Bucket' => '<your-bucket-name>',
]);
echo "deleteBucketLifecycle success\n";
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
設置桶跨域訪問配置
功能說明
跨域資源共享 (CORS) 定義了在一個域中加載的客戶端 Web 應用程序與另一個域中的資源交互的方式。利用 CORS 支持,您可以構建豐富的客戶端 Web 應用程序,同時可以選擇性地允許跨源訪問您的資源。
您可以通過putBucketCors接口設置桶的跨域訪問配置。
代碼示例
public function PutBucketCors()
{
$this->s3Client->putBucketCors([
'Bucket' => '<your-bucket-name>',
'CORSConfiguration' => [
'CORSRules' => [
[
'AllowedHeaders' => ["*"],
'AllowedMethods' => ["POST", "GET", "PUT", "DELETE", "HEAD"],
'AllowedOrigins' => ["*"], // 可以使用//domain:port
'ExposeHeaders' => ["ETag"],
'MaxAgeSeconds' => 3600,
],
],
]
]);
echo "putBucketCors success\n";
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
| CORSConfiguration | CORSConfiguration | 跨域訪問規則 | 是 |
關于CORSRules一些說明
| 參數 | 說明 |
|---|---|
| AllowedMethods | 允許的請求方法 |
| AllowedOrigins | 允許的請求源 |
| AllowedHeaders | 允許的請求頭 |
| ExposedHeaders | 允許返回的Response Header |
| MaxAgeSeconds | 跨域請求結果的緩存時間 |
獲取桶跨域訪問配置
功能說明
跨域資源共享 (CORS) 定義了在一個域中加載的客戶端 Web 應用程序與另一個域中的資源交互的方式。利用 CORS 支持,您可以構建豐富的客戶端 Web 應用程序,同時可以選擇性地允許跨源訪問您的資源。
您可以通過getBucketCors接口獲取桶跨域訪問配置。
代碼示例
public function GetBucketCors()
{
$res = $this->s3Client->getBucketCors([
'Bucket' => '<your-bucket-name>',
]);
echo "getBucketCors success " . $res . "\n";
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
返回結果
| 參數 | 類型 | 說明 |
|---|---|---|
| CORSRules | CORSRules | 跨域訪問規則 |
關于CORSRules一些說明
| 參數 | 說明 |
|---|---|
| AllowedMethods | 允許的請求方法 |
| AllowedOrigins | 允許的請求源 |
| AllowedHeaders | 允許的請求頭 |
| ExposedHeaders | 允許返回的Response Header |
| MaxAgeSeconds | 跨域請求結果的緩存時間 |
刪除桶跨域訪問配置
功能說明
跨域資源共享 (CORS) 定義了在一個域中加載的客戶端 Web 應用程序與另一個域中的資源交互的方式。利用 CORS 支持,您可以構建豐富的客戶端 Web 應用程序,同時可以選擇性地允許跨源訪問您的資源。
您可以通過deleteBucketCors接口刪除桶跨域訪問配置。
示例代碼
public function DeleteBucketCors()
{
$this->s3Client->deleteBucketCors([
'Bucket' => '<your-bucket-name>',
]);
echo "deleteBucketCors success\n";
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
設置桶版本控制狀態
功能說明
通過媒體存儲提供的版本控制,您可以在一個桶中保留多個對象版本。例如,image.jpg(版本1)和image.jpg(版本2)。如果您希望防止自己意外覆蓋和刪除版本,或存檔對象,以便您可以檢索早期版本的對象,您可以開啟版本控制功能。
開啟版本控制
對桶中的所有對象啟用版本控制,之后每個添加到桶中的對象都會被設置一個唯一的version id。
暫停版本控制
對桶中的所有對象暫停版本控制,之后每個添加到桶中的對象的version ID會被設置為null。桶開啟版本控制功能之后,無法再關閉該功能,只能暫停。
您可以使用 putBucketVersioning 接口開啟或暫停版本控制。
代碼示例
public function PutBucketVersioning()
{
//啟用版本控制
$this->s3Client->putBucketVersioning([
'Bucket' => '<your-bucket-name>',
'VersioningConfiguration' => [
'Status' => 'Enabled', //啟用版本控制:Enabled,暫停版本控制:Suspended
],
]);
echo "putBucketVersioning success\n";
}請求參數
PutBucketVersioning 的參數說明:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
| VersioningConfiguration | VersioningConfiguration | 版本控制設置 | 是 |
關于 VersioningConfiguration 中 Status 的一些說明
| 參數 | 說明 |
|---|---|
| Enabled | 開啟版本控制 |
| Suspended | 暫停版本控制 |
獲取桶版本控制狀態
功能說明
您可以使用 getBucketVersioning接口獲取版本控制狀態。
代碼示例
public function GetBucketVersioning()
{
try {
$res = $this->s3Client->getBucketVersioning([
'Bucket' => '<your-bucket-name>',
]);
echo $res;
} catch (Aws\S3\Exception\S3Exception $e) {
echo "Exception: $e";
}
}請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名稱 | 是 |
返回結果
| 參數 | 類型 | 說明 |
|---|---|---|
| Status | string | 桶是否開啟版本控制。若無Status返回,則未開啟;如Status為Enabled,則已開啟;如Status為Suspended,則已暫停 |