华为云用户手册

  • 接口约束 您必须是桶拥有者或拥有设置桶存储类别的权限,才能设置桶存储类别。建议使用 IAM 或桶策略进行授权,如果使用IAM则需授予obs:PutBucketStoragePolicy权限,如果使用桶策略则需授予PutBucketStoragePolicy权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 桶的存储类别与桶中对象的存储类别是相互独立的。如果上传对象时,未设置对象的存储类别,该对象默认与桶的存储类别一致,但后续如果修改桶的存储类别,已上传的桶中对象的存储类别不会随之改变;如果后续修改桶中对象的存储类别时,该桶的存储类别也不会随之改变。
  • 代码示例 本示例用于设置exampleBucket桶的桶存储类别。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.AccessControlList; import com.obs.services.model.AvailableZoneEnum; import com.obs.services.model.CreateBucketRequest; import com.obs.services.model.ObsBucket; import com.obs.services.model.StorageClassEnum; public class CreateBucket001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("AC CES S_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { CreateBucketRequest request = new CreateBucketRequest(); //示例桶名 String exampleBucket = "examplebucket"; //示例桶区域位置 String exampleLocation = "cn-north-4"; request.setBucketName(exampleBucket); // 设置桶ACL为私有读写,默认也是私有读写 request.setAcl(AccessControlList.REST_CANNED_PRIVATE); // 设置桶的存储类别为标准存储 request.setBucketStorageClass(StorageClassEnum.STANDARD); // 设置桶区域位置(以区域为华北-北京四为例),location 需要与 endpoint的位置信息一致 request.setLocation(exampleLocation); // 指定创建多AZ桶,如果不设置,默认创建单AZ桶 request.setAvailableZone(AvailableZoneEnum.MULTI_AZ); // 创建桶 ObsBucket bucket = obsClient.createBucket(request); // 创建桶成功 System.out.println("CreateBucket successfully"); System.out.println("RequestId:"+bucket.getRequestId()); } catch (ObsException e) { System.out.println("CreateBucket failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code: " + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message: " + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); } catch (Exception e) { System.out.println("CreateBucket failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 功能说明 OBS提供了这些存储类别:标准存储、低频访问存储、归档存储、深度归档存储(受限公测中),从而满足客户业务对存储性能、成本的不同诉求,详情可参见OBS存储类别。 调用设置桶存储类别接口,可设置指定桶的存储类别。设置了桶的默认存储类别之后,如果上传对象、复制对象和初始化多段上传任务时未指定对象的存储类别,则该对象的存储类别默认与桶的存储类别保持一致。 开发过程中,您有任何问题可以在github上提交issue,或者在华为云 对象存储服务 论坛中发帖求助。
  • 删除对象 以下代码展示了删除examplebucket桶中名为objectname的对象。了解更多请参见删除对象(Java SDK)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; public class DeleteObject001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { // 删除单个对象 obsClient.deleteObject("examplebucket", "objectname"); System.out.println("deleteObject successfully"); } catch (ObsException e) { System.out.println("deleteObject failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("deleteObject failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 下载对象 以下代码展示了下载examplebucket桶中名为objectname的对象。了解更多请参见下载对象(Java SDK)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ObsObject; import java.io.ByteArrayOutputStream; import java.io.InputStream; public class GetObject001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。查看桶所在的endpoint请参见:https://support.huaweicloud.com/usermanual-obs/obs_03_0312.html。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { // 流式下载 ObsObject obsObject = obsClient.getObject("examplebucket", "objectname"); // 读取对象内容 System.out.println("Object content:"); InputStream input = obsObject.getObjectContent(); byte[] b = new byte[1024]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len; while ((len = input.read(b)) != -1) { bos.write(b, 0, len); } System.out.println("getObjectContent successfully"); System.out.println(new String(bos.toByteArray())); bos.close(); input.close(); } catch (ObsException e) { System.out.println("getObjectContent failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("getObjectContent failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 列举对象 以下代码展示了列举名为examplebucket桶中的对象。了解更多请参见列举对象(Java SDK)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ObjectListing; import com.obs.services.model.ObsObject; public class ListObjects001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { // 简单列举 ObjectListing result = obsClient.listObjects("examplebucket"); for (ObsObject obsObject : result.getObjects()) { System.out.println("listObjects successfully"); System.out.println("ObjectKey:" + obsObject.getObjectKey()); System.out.println("Owner:" + obsObject.getOwner()); } } catch (ObsException e) { System.out.println("listObjects failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("listObjects failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 上传对象 以下代码展示了向名为examplebucket的桶中上传2个对象,一个对象本地文件名为localfile,上传到桶中是名为objectkey,另一个对象本地文件名为localfile2,上传到桶中是名为objectkey2。了解更多请参见上传对象(Java SDK)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.PutObjectRequest; import java.io.File; public class PutObject004 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { // 文件上传 // localfile 为待上传的本地文件路径,需要指定到具体的文件名 PutObjectRequest request = new PutObjectRequest(); request.setBucketName("examplebucket"); request.setObjectKey("objectkey"); request.setFile(new File("localfile")); obsClient.putObject(request); System.out.println("putObject successfully"); } catch (ObsException e) { System.out.println("putObject failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("putObject failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 创建桶 以下代码展示了创建一个名为examplebucket的桶,设置桶所在区域为华北-北京四,设置桶权限为私有,存储类别为标准存储,存储冗余类别为单AZ。了解更多请参见创建桶(Java SDK)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.AccessControlList; import com.obs.services.model.AvailableZoneEnum; import com.obs.services.model.CreateBucketRequest; import com.obs.services.model.ObsBucket; import com.obs.services.model.StorageClassEnum; public class CreateBucket001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { CreateBucketRequest request = new CreateBucketRequest(); //示例桶名 String exampleBucket = "examplebucket"; //示例桶区域位置 String exampleLocation = "cn-north-4"; request.setBucketName(exampleBucket); // 设置桶ACL为私有读写,默认也是私有读写 request.setAcl(AccessControlList.REST_CANNED_PRIVATE); // 设置桶的存储类别为标准存储 request.setBucketStorageClass(StorageClassEnum.STANDARD); // 设置桶区域位置(以区域为华北-北京四为例),location 需要与 endpoint的位置信息一致 request.setLocation(exampleLocation); // 指定创建多AZ桶,如果不设置,默认创建单AZ桶 request.setAvailableZone(AvailableZoneEnum.MULTI_AZ); // 创建桶 ObsBucket bucket = obsClient.createBucket(request); // 创建桶成功 System.out.println("CreateBucket successfully"); System.out.println("RequestId:"+bucket.getRequestId()); } catch (ObsException e) { System.out.println("CreateBucket failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code: " + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message: " + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); } catch (Exception e) { System.out.println("CreateBucket failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 设置桶策略请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 policy String 必选 参数解释: 策略信息,JSON格式的字符串。 约束限制: Policy中的Resource字段包含的桶名必须和当前设置桶策略的桶名一致。 Policy具体格式请参考Policy格式。 默认取值: 无
  • 代码示例 本示例用于设置exampleBucket桶的桶策略。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; public class SetBucketPolicy001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { // 示例桶名 String exampleBucket = "examplebucket"; // 示例桶策略 String examplePolicy = "{\"Statement\":[{\"Principal\":\"*\",\"Effect\":\"Allow\",\"Action\":\"ListBucket\",\"Resource\":\"" + exampleBucket + "\"}]}"; obsClient.setBucketPolicy(exampleBucket, examplePolicy); System.out.println("SetBucketAcl successfully"); } catch (ObsException e) { System.out.println("SetBucketAcl failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("SetBucketAcl failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 功能说明 OBS支持对桶操作进行权限控制,您可以为桶设置访问策略,指定某一个用户对某一个桶是否有权行使某一项指定操作。OBS权限控制的方式有IAM、桶策略和ACL三种,本节将对桶策略接口进行详细介绍,更多权限相关内容可参见《对象存储服务权限配置指南》的OBS权限控制概述章节。 桶策略是作用于所配置的OBS桶及桶内对象的,您可以通过桶策略可为IAM用户或其他账号授权桶及桶内对象的操作权限。允许其他云账号访问OBS资源,可以使用桶策略的方式授权对应权限。当不同的桶对于不同的IAM用户有不同的访问控制需求时,需使用桶策略分别授权IAM用户不同的权限。 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。
  • 接口约束 创建桶和获取桶列表这两个服务级的操作权限,需要通过IAM权限配置。 由于缓存的存在,配置桶策略后,最长需要等待5分钟策略才能生效。 您必须是桶拥有者或者是桶所有者的子用户且具有设置桶策略的权限,才能设置桶策略。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:PutBucketPolicy权限,如果使用桶策略则需授予PutBucketPolicy权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 请注意,调用设置桶策略接口时,最新一次配置会覆盖原有配置。例如,您已设置了A,B,C 和 D 四个桶策略,现需要添加新的桶策略E,则配置桶策略 E 时,需在原有四个策略的基础上添加策略 E,然后重新上传所有策略。同理,如果您需要删除桶策略 D,则需将策略 D 从原有的 A,B,C 和 D 四个策略中移除,然后重新上传策略 A,B 和C。 桶策略内容的具体格式(JSON格式字符串)请参考对象存储服务API参考。 以下两种场景无法使用此接口获取桶策略,系统将返回“404 NoSuchBucketPolicy”的错误: 指定桶的策略不存在。 指定桶的标准桶策略为私有且未设置高级桶策略。
  • 接口约束 您必须是桶拥有者或拥有下载对象的权限,才能下载对象。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:GetObject权限,如果使用桶策略则需授予GetObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 所有的图片处理操作均不会修改存储在桶中的原图。 归档存储不支持图片处理。 深度归档存储不支持图片处理。 处理后的图片直接返回浏览器展示,不会保存在OBS中,也不会占用存储空间,不会产生存储费用。图片处理只收取处理的费用。
  • Go SDK接口概览 表1总结了Go SDK支持的接口及功能描述,每个接口的详细介绍和示例代码请前往接口详情页查看。 表1 Go SDK API 接口名 方法 功能描述 创建桶 obsClient.CreateBucket 创建桶。 获取桶列表 obsClient.ListBuckets 查询桶列表,返回结果按照桶名字典序排列。 判断桶是否存在 obsClient.HeadBucket 判断桶是否存在。 删除桶 obsClient.DeleteBucket 删除桶,待删除的桶必须为空。 列举桶内对象 obsClient.ListObjects 列举桶内对象,默认返回最大1000个对象。 列举桶内多版本对象 obsClient.ListVersions 列举桶内多版本对象,默认返回最大1000个多版本对象。 获取桶元数据 obsClient.GetBucketMetadata 对桶发送HEAD请求,获取桶的元数据信息。 获取桶区域位置 obsClient.GetBucketLocation 获取桶所在的区域位置。 获取桶存量信息 obsClient.GetBucketStorageInfo 获取桶的存量信息,包含桶的空间大小以及对象个数。 设置桶配额 obsClient.SetBucketQuota 设置桶的配额值,单位为字节,支持的最大值为263-1,配额值设为0表示桶的配额没有上限。 获取桶配额 obsClient.GetBucketQuota 获取桶的配额值,0代表配额没有上限。 设置桶存储类型 obsClient.SetBucketStoragePolicy 设置桶的存储类型,桶中对象的存储类型默认将与桶的存储类型保持一致。 获取桶存储类型 obsClient.GetBucketStoragePolicy 获取桶的存储类型。 设置桶ACL obsClient.SetBucketAcl 设置桶ACL。 获取桶ACL obsClient.GetBucketAcl 获取桶ACL。 设置桶日志管理配置 obsClient.SetBucketLoggingConfiguration 设置桶的访问日志配置。 获取桶日志管理配置 obsClient.GetBucketLoggingConfiguration 获取桶的访问日志配置。 设置桶策略 obsClient.SetBucketPolicy 配置桶的策略,如果桶已存在策略,那么当前请求中的策略将完全覆盖桶中现存的策略。 获取桶策略 obsClient.GetBucketPolicy 获取桶的策略配置。 删除桶策略 obsClient.DeleteBucketPolicy 删除桶的策略配置。 设置桶的生命周期配置 obsClient.SetBucketLifecycleConfiguration 配置桶的生命周期规则,实现定时转换桶中对象的存储类型,以及定时删除桶中对象的功能。 获取桶的生命周期配置 obsClient.GetBucketLifecycleConfiguration 获取桶的生命周期规则。 删除桶的生命周期配置 obsClient.DeleteBucketLifecycleConfiguration 删除桶所有的生命周期规则。 设置桶的网站配置 obsClient.SetBucketWebsiteConfiguration 调用设置桶的网站配置接口,您可以为指定桶设置网站配置信息。 获取桶的网站配置 obsClient.GetBucketWebsiteConfiguration 调用获取桶的网站配置接口,您可以获取指定桶的网站配置信息。 删除桶的网站配置 obsClient.DeleteBucketWebsiteConfiguration 调用删除桶的网站配置接口,您可以删除指定桶的网站配置。 设置桶的多版本状态 obsClient.SetBucketVersioning 设置桶的多版本状态。 获取桶的多版本状态 obsClient.GetBucketVersioning 获取桶的多版本状态。 设置桶的CORS 配置 obsClient.SetBucketCors 设置桶的跨域资源共享规则,以允许客户端浏览器进行跨域请求。 获取桶的CORS 配置 obsClient.GetBucketCors 获取指定桶的跨域资源共享规则。 删除桶的CORS 配置 obsClient.DeleteBucketCors 删除指定桶的跨域资源共享规则。 设置桶标签 obsClient.SetBucketTagging 设置指定桶的标签。 获取桶标签 obsClient.GetBucketTagging 获取指定桶的标签。 删除桶标签 obsClient.DeleteBucketTagging 删除指定桶的标签。 上传对象 obsClient.PutObject 上传对象到指定桶中。 上传文件 obsClient.PutFile 上传文件/文件夹到指定桶中。 下载对象 obsClient.GetObject 下载指定桶中的对象。 复制对象 obsClient.CopyObject 为指定桶中的对象创建一个副本。 删除对象 obsClient.DeleteObject 删除指定桶中的单个对象。 批量删除对象 obsClient.DeleteObjects 批量删除指定桶中的多个对象。 获取对象元数据 obsClient.GetObjectMetadata 对指定桶中的对象发送HEAD请求,获取对象的元数据信息。 设置对象元数据 obsClient.SetObjectMetadata 设置指定桶中的对象的元数据信息。 设置对象ACL obsClient.SetObjectAcl 设置指定桶中对象的ACL访问权限。 获取对象ACL obsClient.GetObjectAcl 获取指定桶中对象的ACL访问权限。 初始化分段上传任务 obsClient.InitiateMultipartUpload 在指定桶中初始化分段上传任务。 上传段 obsClient.UploadPart 初始化分段上传任务后,通过分段上传任务的ID,上传段到指定桶中。 复制段 obsClient.CopyPart 初始化分段上传任务后,通过分段上传任务的ID,复制段到指定桶中。 列举已上传的段 obsClient.ListParts 通过分段上传任务的ID,列举指定桶中已上传的段。 列举分段上传任务 obsClient.ListMultipartUploads 列举指定桶中所有的初始化后还未合并或还未取消的分段上传任务。 合并段 obsClient.CompleteMultipartUpload 通过分段上传任务的ID和对应已上传的段信息(包括PartNumber和ETag),合并成一个完整的对象。 取消分段上传任务 obsClient.AbortMultipartUpload 通过分段上传任务的ID,取消指定桶中的分段上传任务。 恢复归档存储对象 obsClient.RestoreObject 恢复指定桶中的归档存储对象。 生成带授权信息的URL obsClient.CreateSignedUrl 通过访问密钥、请求方法类型、请求参数等信息生成一个在Query参数中携带鉴权信息的URL,以对OBS服务进行特定操作。 生成带授权信息的表单上传参数 obsClient.CreateBrowserBasedSignature 生成用于鉴权的请求参数,以进行POST表单上传。 断点续传上传 obsClient.UploadFile 对分段上传的封装和加强,解决上传大文件时由于网络不稳定或程序崩溃导致上传失败的问题。 断点续传下载 obsClient.DownloadFile 对分段下载的封装和加强,解决下载大对象到本地时由于网络不稳定或程序崩溃导致下载失败的问题。
  • 功能说明 下载对象时,可以重写部分HTTP/HTTPS响应头信息。可重写的响应头信息见下表: 参数 作用 GetObjectInput.ResponseContentType 重写HTTP/HTTPS响应中的Content-Type GetObjectInput.ResponseContentLanguage 重写HTTP/HTTPS响应中的Content-Language GetObjectInput.ResponseExpires 重写HTTP/HTTPS响应中的Expires GetObjectInput.ResponseCacheControl 重写HTTP/HTTPS响应中的Cache-Control GetObjectInput.ResponseContentDisposition 重写HTTP/HTTPS响应中的Content-Disposition GetObjectInput.ResponseContentEncoding 重写HTTP/HTTPS响应中的Content-Encoding
  • 代码示例 本示例用于下载对象时重写响应头ContentType为image/jpeg 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken)) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.GetObjectInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定下载对象,此处以 example/objectname 为例。 input.Key = "example/objectname" // 重写响应头,此处重写Content-Type为例 input.ResponseContentType = "image/jpeg" // 流式下载对象 output, err := obsClient.GetObject(input) if err == nil { // output.Body 在使用完毕后必须关闭,否则会造成连接泄漏。 defer output.Body.Close() fmt.Printf("Get object(%s) under the bucket(%s) successful!\n", input.Key, input.Bucket) // 获取重写的响应头 fmt.Printf("ContentType:%s\n", output.ContentType) return } fmt.Printf("List objects under the bucket(%s) fail!\n", input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 代码示例 本示例用于创建名为examplebucket的桶,并设置所在区域在华北-北京四(cn-north-4),桶ACL是私有桶,存储类型是低频访问存储,多AZ方式存储。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 // securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint/*, obs.WithSecurityToken(securityToken)*/) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.CreateBucketInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定存储桶所在区域,此处以“cn-north-4”为例,必须跟传入的Endpoint中Region保持一致。 input.Location = "cn-north-4" // 指定存储桶ACL,此处以obs.AclPrivate为例。 input.ACL = obs.AclPrivate // 指定存储桶的存储类型,此处以obs.StorageClassWarm为例。如果未指定该参数,则创建的桶为标准存储类型。 input.StorageClass = obs.StorageClassWarm // 指定存储桶的AZ类型,此处以“3AZ”为例。不携带时默认为单AZ,如果对应region不支持多AZ存储,则该桶的存储类型仍为单AZ。 input.AvailableZone = "3az" // 创建桶 output, err := obsClient.CreateBucket(input) if err == nil { fmt.Printf("Create bucket:%s successful!\n", input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Create bucket:%s fail!\n", input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 返回结果说明 表5 返回结果列表 参数名称 参数类型 描述 output *BaseModel 参数解释: 接口返回信息,详见BaseModel。 err error 参数解释: 接口返回错误信息。 表6 BaseModel 参数名称 参数类型 描述 StatusCode int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 RequestId string 参数解释: OBS服务端返回的请求ID。 默认取值: 无 ResponseHeaders map[string][]string 参数解释: HTTP响应头信息。 默认取值: 无
  • 接口约束 您必须拥有obs:bucket:CreateBucket权限,才能创建桶。建议使用IAM进行授权,配置方式详见使用IAM自定义策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 创建桶时,如果初始化客户端使用的终端节点(endPoint)为“obs.myhuaweicloud.com”,则可以不指定桶所在区域(location),系统会自动在华北-北京一(cn-north-1)创建桶;如果初始化客户端使用的终端节点(endPoint)不是obs.myhuaweicloud.com,则必须指定桶所在区域(location),且指定的区域必须与终端节点(endPoint)区域一致,否则会返回状态码400。 比如初始化时使用的终端节点endPoint是obs.cn-north-4. myhuaweicloud.com,那么在创建桶的时候必须指定Location:cn-north-4 才会创建成功,否则会返回状态码400。 同一账号下,可以创建多个存桶,数量上限是100个(不区分地域),存储桶中的对象数量和大小没有限制。 新创建桶的桶名在OBS中必须是唯一的。如果是同一个用户重复创建同一区域的同名桶时返回HTTP状态码200。除此以外的其他场景重复创建同名桶返回HTTP状态码409,表明桶已存在。 用户删除桶后,需要等待30分钟才能创建同名桶和并行文件系统。 并不是所有区域都支持创建多AZ桶,您可以在产品价格详情页面,查询指定区域是否支持多AZ。
  • 代码示例 本示例用于examplebucket桶中的对象名称为example/objectname图片处理。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 // securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint/*, obs.WithSecurityToken(securityToken)*/) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.GetObjectInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定下载对象,此处以 example/objectname 为例。 input.Key = "example/objectname" // 对图片依次进行缩放、旋转 input.ImageProcess = "image/resize,m_fixed,w_100,h_100/rotate,90" // 图片处理 output, err := obsClient.GetObject(input) if err == nil { // output.Body 必须关闭,否则会造成连接泄漏。 defer output.Body.Close() fmt.Printf("Get object(%s) under the bucket(%s) successful!\n", input.Key, input.Bucket) fmt.Printf("ContentType:%s\n", output.ContentType) fmt.Printf("StorageClass:%s, ETag:%s, ContentType:%s, ContentLength:%d, LastModified:%s\n", output.StorageClass, output.ETag, output.ContentType, output.ContentLength, output.LastModified) return } fmt.Printf("List objects under the bucket(%s) fail!\n", input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 input *GetObjectInput 必选 参数解释: 图片处理请求参数。详情参见GetObjectInput。 extensions extensionOptions 可选 参数解释: 拓展配置项。通过调用拓展配置项为对应请求配置额外的拓展请求头,详情参见extensionOptions。 表2 GetObjectInput 参数名称 参数类型 是否必选 描述 Bucket string 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 Key string 必选 参数解释: 对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 ResponseCacheControl string 可选 参数解释: 指定OBS返回请求中Cache-Control头的值。指定Object被下载时的网页的缓存行为。 默认取值: 无 ResponseContentDisposition string 可选 参数解释: 指定OBS返回请求中Content-Disposition头的值。指定Object被下载时的名称。 默认取值: 无 ResponseContentEncoding string 可选 参数解释: 指定OBS返回请求中Content-Encoding头的值。指定Object被下载时的内容编码格式。 默认取值: 无 ResponseContentLanguage string 可选 参数解释: 指定OBS返回请求中Content-Language头的值。指定Object被下载时的内容语言格式。 默认取值: 无 ResponseContentType string 可选 参数解释: 指定OBS返回请求中Content-Type头的值。指定Object文件类型。 默认取值: 无 ResponseExpires string 可选 参数解释: 指定OBS返回请求中Expires头的值。指定Object被下载时的网页的缓存过期时间。 默认取值: 无 VersionId string 可选 参数解释: 对象的版本号。例如:G001117FCE89978B0000401205D5DC9。 取值范围: 长度为32的字符串。 默认取值: 无,如果不设置则默认指定最新版本的对象。 ImageProcess string 可选 参数解释: 图片处理参数,描述针对对象的图片处理命令或处理样式。例如如果想表示对图片依次进行缩放、旋转,取值:image/resize,m_fixed,w_100,h_100/rotate,90。 取值范围: 命令方式:image/commands 样式方式:style/stylename 详细参数说明参见处理图片。 默认取值: 如果不输入处理命令,将返回原图。 RangeStart int64 可选 参数解释: 指定下载对象的起始位置。 取值范围: 0~对象长度,单位:字节。 默认取值: 0,即从对象的第一个字节开始下载。 RangeEnd int64 可选 参数解释: 指定下载对象的结束位置。 取值范围: 取值必须大于RangeStart。 如果该值大于对象长度-1,实际仍取对象长度-1,单位为字节。 默认取值: 无 IfMatch string 可选 参数解释: 指定一个预设的Etag值,如果下载对象的ETag值与该参数值相同,则返回对象内容,否则返回错误。 取值范围: 长度为32的字符串。 默认取值: 无 IfNoneMatch string 可选 参数解释: 指定一个预设的Etag值,如果下载对象的ETag值与该参数值不相同,则返回对象内容,否则返回错误。 取值范围: 长度为32的字符串。 默认取值: 无 IfModifiedSince time.Time 可选 参数解释: 如果对象在指定的时间后有修改,则返回对象内容,否则返回错误。 约束限制: 日期格式必须为ISO8601的格式。 例如:2018-01-01T00:00:00.000Z,表示如果最后修改时间晚于2018-01-01T00:00:00.000Z则返回对象内容,否则返回错误。 代码示例:time.Now().Add(time.Duration(24) * time.Hour)。 默认取值: 无 IfUnmodifiedSince time.Time 可选 参数解释: 如果对象在指定的时间后没有修改,则返回对象内容,否则返回错误。 约束限制: 日期格式必须为ISO8601的格式。 例如:2018-01-01T00:00:00.000Z,表示如果最后修改时间早于2018-01-01T00:00:00.000Z则返回对象内容,否则返回错误。 代码示例:time.Now().Add(time.Duration(24) * time.Hour)。 默认取值: 无 SseHeader SseCHeader 可选 参数解释: 服务端解密头信息,详见SseCHeader。 约束限制: 如果客户端的对象上传时,使用了客户提供的加密密钥进行服务端加密,当下载对象时,同样也必须在消息中提供密钥。 表3 SseCHeader 参数名称 参数类型 是否必选 描述 Encryption string 作为请求参数时必选 参数解释: 表示服务端加密是SSE-C方式。对象使用SSE-C加密方式。 取值范围: 可选值:AES256,即选择SSE-C方式加密对象。 默认取值: 无 Key string 作为请求参数时必选 参数解释: SSE-C方式下加密使用的密钥,该密钥用于加密对象。 约束限制: 该头域由256bit的密钥经过Base64编码得到,示例:K7QkYpBkM5+hca27fsNkUnNVaobncnLht/rCB2o/9Cw= 默认取值: 无 KeyMD5 string 作为请求参数时可选 参数解释: SSE-C方式下加密使用密钥的MD5值,该值用于验证密钥传输过程中是否出错。 约束限制: 由密钥值经过MD5加密再经过Base64编码后得到,示例:4XvB3tbNTN+tIEVa0/fGaQ== 默认取值: 无
  • 接口约束 您必须拥有obs:object:PutObject权限,才能进行图片处理。相关授权操作可参见典型权限场景配置案例。 OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点。 所有的图片处理操作均不会修改原图。 归档存储不支持图片处理。 深度归档存储不支持图片处理。 处理后的图片直接返回浏览器展示,不会保存在OBS中,也不会占用存储空间,不会产生存储费用。图片处理只收取处理的费用。
  • 返回结果说明 表10 返回结果 参数名称 参数类型 描述 output *BaseModel 参数解释: 接口返回信息。详情参见BaseModel。 err error 参数解释: 接口返回错误信息。 表11 BaseModel 参数名称 参数类型 描述 StatusCode int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 RequestId string 参数解释: OBS服务端返回的请求ID。 默认取值: 无 ResponseHeaders map[string][]string 参数解释: HTTP响应头信息。 默认取值: 无
  • 代码示例 本示例用于设置examplebucket桶下example/objectname对象的对象ACL为私有。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken)) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.SetObjectAclInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定对象,此处以 example/objectname 为例。 input.Key = "example/objectname" // 指定对象Acl,此处以私有为例 input.ACL = obs.AclPrivate // 设置对象ACL output, err := obsClient.SetObjectAcl(input) if err == nil { fmt.Printf("Set Object(%s)'s acl successful with Bucket(%s)!\n", input.Key, input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Set Object(%s)'s acl fail with Bucket(%s)!\n", input.Key, input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 input *SetObjectAclInput 必选 参数解释: 设置对象ACL请求参数。详情参见SetObjectAclInput。 extensions extensionOptions 可选 参数解释: 拓展配置项。通过调用拓展配置项为对应请求配置额外的拓展请求头,详情参考extensionOptions。 表2 SetObjectAclInput 参数名称 参数类型 是否必选 描述 Bucket string 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 Key string 必选 参数解释: 对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4. myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 VersionId string 可选 参数解释: 对象的版本号。例如:G001117FCE89978B0000401205D5DC9A。 取值范围: 长度为32的字符串。 默认取值: 无 ACL AclType 可选 参数解释: 预定义ACL。 取值范围: AclType取值详见AclType。 默认取值: 无 Owner Owner 可选 参数解释: 对象的所有者账号户ID,详见Owner。 约束限制: Owner和Grants必须配套使用,且与ACL互斥。 Grants []Grant 可选 参数解释: 被授权用户权限信息,详见Grant。 默认取值: 无 表3 AclType 常量名 原始值 说明 AclPrivate private 私有读写。 桶或对象的所有者拥有完全控制的权限,其他任何人都没有访问权限。 AclPublicRead public-read 公共读私有写。 设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。 设在对象上,所有人可以获取该对象内容和元数据。 AclPublicReadWrite public-read-write 公共读写。 设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务。 设在对象上,所有人可以获取该对象内容和元数据。 AclPublicReadDelivered public-read-delivered 桶公共读,桶内对象公共读。 设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本,可以获取该桶内对象的内容和元数据。 说明: AclPublicReadDelivered不能应用于对象。 AclPublicReadWriteDelivered public-read-write-delivered 桶公共读写,桶内对象公共读写。 设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务,可以获取该桶内对象的内容和元数据。 说明: AclPublicReadWriteDelivered不能应用于对象。 AclBucketOwnerFullControl bucket-owner-full-control 设在对象上,桶和对象的所有者拥有对象的完全控制权限,其他任何人都没有访问权限。 默认情况下,上传对象至其他用户的桶中,桶拥有者没有对象的控制权限。对象拥有者为桶拥有者添加此权限控制策略后,桶所有者可以完全控制对象。例如,用户A上传对象x至用户B的桶中,系统默认用户B没有对象x的控制权。当用户A为对象x设置bucket-owner-full-control后,用户B就拥有了对象x的控制权。 表4 Owner 参数名称 参数类型 是否必选 描述 ID string 作为请求参数时必选 参数解释: 所有者的账号ID,即domain_id。 取值范围: 如何获取账号ID请参见如何获取账号ID和用户ID? 默认取值: 无 表5 Grant 参数名称 参数类型 是否必选 描述 Grantee Grantee 作为请求参数时必选 参数解释: 被授权用户相关信息,详见Grantee。 Permission PermissionType 作为请求参数时必选 参数解释: 被授予的权限。 取值范围: 权限取值范围详见PermissionType。 默认取值: 无 表6 Grantee 参数名称 参数类型 是否必选 描述 Type GranteeType 作为请求参数时必选 参数解释: 被授权用户的类型。 取值范围: 被授权用户类型的取值范围详见GranteeType。 默认取值: 无 ID string 作为请求参数时,如果Type为用户类型则必选。 参数解释: 被授权用户的账号ID,即domain_id。 取值范围: 如何获取账号ID请参见如何获取账号ID和用户ID? 默认取值: 无 DisplayName string 作为请求参数时可选 参数解释: 被授权用户的账号名。 约束限制: 不支持中文。 只能以字母开头。 长度为6-32个字符。 只能包含英文字母、数字或特殊字符(-_)。 默认取值: 无 URI GroupUriType 作为请求参数时,如果Type为用户组类型则必选。 参数解释: 被授权的用户组。 取值范围: 授权用户组取值范围详见GroupUriType。 默认取值: 无 表7 PermissionType 常量名 原始值 说明 PermissionRead READ 读权限。 PermissionWrite WRITE 写权限。 PermissionReadAcp READ_ACP 读取ACL配置的权限。 PermissionWriteAcp WRITE_ACP 修改ACL配置的权限。 PermissionFullControl FULL_CONTROL 完全控制权限,包括对桶或对象的读写权限,以及对桶或对象ACL配置的读写权限。 表8 GranteeType 常量名 原始值 说明 GranteeGroup Group 用户组。 GranteeUser CanonicalUser 单个用户。 表9 GroupUriType 常量名 原始值 说明 GroupAllUsers AllUsers 所有用户。
  • 功能说明 访问控制列表(Access Control List,ACL)用于资源拥有者给其他账号授予资源的访问权限。默认情况下,创建存储桶或对象时仅资源拥有者对资源的完全控制权限,即桶创建者对桶拥有完全控制权限,对象上传者对对象拥有完全控制权限,而其他账号默认无权访问资源。如果资源拥有者想授予其他账号资源的读写权限,可以使用ACL实现。OBS桶和对象的ACL是基于账号进行授权,授权后对账号和账号下的IAM用户都生效。了解更多可参见ACL权限控制方式介绍。SSE-KMS方式加密的对象即使设置了ACL,跨租户也不生效。 OBS用户在上传对象时可以设置权限控制策略,也可以通过ACL操作API接口对已存在的对象更改或者获取ACL。
  • 接口约束 您必须是桶拥有者或拥有设置对象ACL的权限,才能设置对象ACL。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObjectAcl权限,如果使用桶策略则需授予PutObjectAcl权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点。 一个对象的ACL最多支持配置100条规则。
  • URI DELETE /v3.0/OS-PERMISSION/enterprise-projects/{enterprise_project_id}/users/{user_id}/roles/{role_id} 表1 路径参数 参数 是否必选 参数类型 描述 enterprise_project_id 是 String 企业项目ID。 user_id 是 String 用户ID。 role_id 是 String 权限ID。
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 users Array of objects 用户信息。 表4 users 参数 参数类型 描述 domain_id String 授权用户所属账号ID。 id String 授权用户ID。 name String 授权用户名。 enabled Boolean 授权用户是否启用,true表示启用,false表示停用,默认为true。 description String 授权用户描述信息。 policy_num Integer 授权用户的策略数。 lastest_policy_time Long 用户最近与企业项目关联策略的时间(毫秒)。
  • 响应示例 状态码: 200 请求成功。 { "users" : [ { "domain_id" : "d78cbac186b744899480f25bd02...", "id" : "07667db96a00265f1fc0c003a...", "name" : "IAMUserA", "enabled" : true, "description" : "IAMDescriptionA", "policy_num" : 2, "lastest_policy_time" : 1589874427000 } ] }
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全