华为云用户手册

  • 响应示例 1 2 3 4 5 HTTP/1.1 204 No Content Server: OBS x-obs-request-id: 000001682D993B666808E265A3F6361D x-obs-id-2: 32AAAQAAEAABAAAQAAEAABAAAQAAEAABCSyB46jGSQsu06m1nyIeKxTuJ+H27ooC Date: Tue, 08 Jan 2019 13:14:03 GMT
  • 请求示例 DELETE /test?inventory&id=id1 HTTP/1.1 User-Agent: curl/7.29.0 Host: examplebucket.obs.cn-north-4.myhuaweicloud.com Accept: */* Date: Tue, 08 Jan 2019 13:18:35 +0000 Authorization: OBS UDSIAMSTUBTEST000001:UT9F2YUgaFu9uFGMmxFj2CBgQHs=
  • 支持的授权项 策略包含系统策略和自定义策略,如果系统策略不满足授权要求,管理员可以创建自定义策略,并通过给用户组授予自定义策略来进行精细的访问控制。策略支持的操作与API相对应,授权项列表说明如下: 权限:允许或拒绝对指定资源在特定条件下进行某项操作。 对应API接口:自定义策略实际调用的API接口。 授权项:自定义策略中支持的Action,在自定义策略中的Action中写入授权项,可以实现授权项对应的权限功能。 IAM项目(Project)/企业项目(Enterprise Project):自定义策略的授权范围,包括IAM项目与企业项目。授权范围如果同时支持IAM项目和企业项目,表示此授权项对应的自定义策略可以在IAM和企业管理两个服务中给用户组授权并生效。如果仅支持IAM项目,不支持企业项目,表示仅能在IAM中给用户组授权并生效,如果在企业管理中授权,则该自定义策略不生效。关于IAM项目与企业项目的区别,详情请参见:IAM与企业管理的区别。 “√”表示支持,“x”表示暂不支持。 OBS支持的自定义策略授权项如下所示: 桶相关授权项:包括OBS所有面向桶的接口所对应的授权项,如列举全部桶、创建桶、删除桶、设置桶策略、设置桶的日志记录、设置桶的事件通知、设置桶的跨区域复制配置等接口。 对象相关授权项:包括上传对象、下载对象、删除对象等接口。
  • 响应消息元素 表1 响应消息元素 名称 描述 id 规则ID。当前桶上配置的DIS策略规则的唯一标识。 类型:String stream DIS服务通道名称。 类型:String project DIS服务通道所属的项目ID。 类型:String events OBS事件列表。 类型:String数组 prefix 对象名前缀。 类型:String suffix 对象名后缀。 类型:String agency IAM委托名。 类型:String
  • 响应示例 HTTP/1.1 200 OK Server: OBS Date: Tue, 07 Jul 2020 07:28:46 GMT Content-Type: application/json Content-Length: 1063 { "rules": [{ "id": "event-01", "stream": "stream_name", "project": "project_id", "events": ["ObjectCreated:*", "ObjectRemoved:*"], "prefix": "", "suffix": "", "agency": "agency001" }] }
  • 请求示例 PUT /?mirrorBackToSource HTTP/1.1 Host: bucketname.obs.cn-north-4.myhuaweicloud.com Authorization: OBS H4IPJX0TQTHTHEBQQCEC:sc2PM13Wlfcoc/YZLK0MwsI2Zpo= Content-Type: application/json Content-Length: 1049 Date: Tue, 21 Jul 2020 15:38:30 GMT { "rules": [{ "id": "abc123", "condition": { "httpErrorCodeReturnedEquals": "404", "objectKeyPrefixEquals": "video/" }, "redirect": { "agency": "agency", "publicSource": { "sourceEndpoint": { "master":["http://bucket1.xxx.yyy.com", "https://bucket2.xxx.yyy.com"], "slave": ["http://bucket3.xxx.yyy.com", "https://bucket4.xxx.yyy.com"] } }, "retryConditions": ["4XX", "5XX"], "passQueryString": true, "mirrorFollowRedirect": true, "redirectWithoutReferer": true, "mirrorAllowHttpMethod":["HEAD"], "mirrorHttpHeader": { "passAll": false, "pass": ["content-encoding"], "remove": ["content-type"], "set": [{ "key": "helloworld", "value": "2222" }] }, "replaceKeyWith": "prefix${key}suffix", "replaceKeyPrefixWith": "picture/", "vpcEndpointURN": "001" } }] }
  • 请求消息元素 表1 请求消息元素 名称 描述 是否必选 rules 策略规则数组。 类型:Container 取值范围:数组大小[1, 10] 说明: 同一个桶下的不同策略前缀不能重复和起始包含,委托建议使用同一个。 是 表2 rules参数说明 名称 描述 是否必选 id 规则ID。当前桶上配置的镜像回源规则的唯一标识。 类型:String 取值范围:[1, 256],满足“^[a-zA-Z0-9_-]{1, 256}$” 是 condition 触发回源功能的条件。 类型:Container 是 httpErrorCodeReturnedEquals 触发回源功能的错误码。当下载请求返回此错误码时,会触发回源功能。 类型:Integer 取值范围:404 是 objectKeyPrefixEquals 触发回源功能的对象名前缀。当触发回源的请求里对象名满足此前缀,才会继续执行回源功能。当前缀配置为空时,默认所有对象都匹配。同一个桶上多条规则的前缀之间不允许重复和起始包含。 类型:String 有效值:长度[0, 1023],值允许为任意字符 否 redirect 回源功能主要参数。 类型:Container 是 agency 委托名。客户通过委托赋予OBS服务查询用户桶内指定对象是否存在以及向用户桶内上传对象的权限。 类型:String 是 publicSource 公共可访问源端配置。当源端为公共可访问的资源时,必选。 类型:Container 否 sourceEndpoint 公共可访问的源端地址。 类型:Container 否 master 主源端地址。如果源端为HTTP公共可访问的桶,则此地址为桶域名地址。如果源端为其他云厂商的私有桶,则此地址为区域域名地址。 类型:Array 有效取值:单个源站地址格式为https|http://xxx.yyy.zzz,长度为[10, 255] 说明: 回源时会优先使用主源站地址,如果同时配置多个主地址,会轮询访问所有主地址。如果配置2个及以上主地址,第一次请求主地址失败,并且满足重试条件时,会选用另一个主地址重试一次。 至少配置一个主地址。 最多同时配置5个主地址。 否 slave 备源端地址。如果源端为HTTP公共可访问的桶,则此地址为桶域名地址。如果源端为其他云厂商的私有桶,则此地址为区域域名地址。 类型:Array 有效取值:单个源站地址格式为https|http://xxx.yyy.zzz,长度为[10, 255] 说明: 主地址回源失败时,会选用一个备地址进行重试。 最多同时配置5个备地址。 否 retryConditions 回源地址切换的条件。 类型:Array 取值范围:4XX,5XX以及400~499,500~599等具体错误码 说明: 4XX和4开头的具体错误码不能同时配置,5XX和5开头的错误码不能同时配置。 最大支持同时配置20个错误码 否 passQueryString 是否携带请求字符串。如果是true,会将OBS请求中的queryString传递到源站。否则,则不会将queryString传递到源站。 该值默认值是false,如果设置为false则会忽略。 类型:Boolean 取值范围:false或true 说明: 如果是true,但query里有签名信息,则将签名信息去掉,剩余参数再传递。 是 mirrorFollowRedirect 是否跟随源站3xx重定向请求获取到资源。如果是true,跟随源站3xx重定向请求获取到资源。否则,OBS会透传3XX响应,不获取资源。该值默认值是false,如果设置为false则会忽略。 类型:Boolean 取值范围:false或true 是 mirrorHttpHeader HTTP header传递规则。 类型:Container 否 passAll 是否透传全部HTTP header到源端。 以下HTTP header类型不支持透传: 1.以下前缀开头的header: x-obs- x-amz- 2.所有标准HTTP header,例如: Content-Length Authorization Date passAll与pass互斥。 类型:bool 取值范围:false或true 否 pass 指定透传的HTTP header列表。 类型:List 取值范围:最大10个,每个长度[1, 63],key只支持字母(大小写)、数字、中划线、下划线 否 remove 不允许透传的HTTP header列表。 remove优先级高于pass和passAll。 类型:List 取值范围:最大10个,每个长度[1, 63],key只支持字母(大小写)、数字、中划线、下划线 否 set 设置透传的HTTP header值列表。 set优先级高于remove,pass和passAll。 如果自定义头域中包含了Referer头域,必须将redirectWithoutReferer设置为true,不然会被覆盖 类型:List 取值范围:最大10个 否 key 设置需要透传HTTP header的关键字。 多条key之间不允许重复。 类型:String 取值范围:长度[1, 63],只支持字母(大小写)、数字、中划线、下划线 否 value 设置需要透传HTTP header的值。 类型:String 取值范围:长度[0, 2048] 否 replaceKeyWith 添加前后缀。去源端下载对象的时候,如果需要添加前缀或后缀,则修改此项配置为prefix${key}suffix。如果不需要增加前后缀,则配置为${key}。 类型:String 取值范围:prefix${key}suffix。 ${key}为关键字,prefix为要添加的前缀,suffix为要添加的后缀。同时prefix和suffix的总长度[0, 1023] 否 replaceKeyPrefixWith 替换前缀objectKeyPrefixEquals的字符串。如果去源端下载对象时,需要替换当前的对象名前缀,则修改此项配置。 如果replaceKeyWith和ReplaceKeyPrefixWith同时为空,则ReplaceKeyPrefixWith生效。同时非空为非法请求。 类型:String 取值范围:长度[0, 1023] 否 vpcEndpointURN 终端节点服务的URN。 类型:String 取值范围:长度[0, 127] 否 redirectWithoutReferer 是否将原host作为referer头域携带到重定向的目的地址去。false为需要携带, true为不携带。 该值默认值是false,如果设置为false则会忽略。 类型:Boolean 默认值: false 否 mirrorAllowHttpMethod 如果公有桶添加HEAD后,表示同时支持HEAD类请求回源,可以通过HEAD类请求获取源站对象的元数据信息,但不会从源站获取对象。 类型:List 否
  • 请求消息样式 PUT /?mirrorBackToSource HTTP/1.1 Host: bucketname.obs.cn-north-4.myhuaweicloud.com Authorization: authorization Content-Type: application/json Content-Length: length Date: date policy json body
  • 功能介绍 桶的WORM开关开启后,支持配置默认保护策略和保护期限。 当您在桶内配置了桶级默认WORM策略以后,如果您在上传对象时没有指定保护策略和保护期限,则新上传的对象会自动应用桶级默认WORM策略。和配置对象级WORM保护策略不同的地方在于,对象级WORM保护策略需要您提供一个明确的时间,在这个时间之前对象都会受到保护,桶级默认WORM策略则要求您提供一个保护期限,实际上对象受到保护的时间点为其上传时间+您指定的保护期限。 要正确执行此操作,需要确保执行者有 "PutBucketObjectLockConfiguration"权限。默认情况下只有桶的所有者可以执行此操作,也可以通过设置桶策略或用户策略授权给其他用户。 您可以修改甚至清空桶级默认WORM策略,但这仅对修改后上传的对象生效,修改前上传的对象的保护状态不受影响。 多段上传的对象在合并前不受保护,合并后受桶级默认对象策略保护,您可以在其合并后单独为其配置对象级WORM保护策略。 其它约束如下: 策略目前仅支持设置为合规模式"COMPLIANCE" 支持设置的保留期限为1天-100*365天或1年~100年。
  • 响应示例 2 HTTP/1.1 200 OK Server: OBS x-obs-request-id: BF260000016435CE298386946AE4C482 x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCT9W2tcvLmMJ+plfdopaD62S0npbaRUz Date: WED, 01 Jul 2015 02:25:06 GMT Content-Length: 0
  • 请求消息元素 表1 请求消息元素表 名字 描述 是否必选 ObjectLockConfiguration 桶级WORM配置的容器 类型:Container 是 ObjectLockEnabled 桶级WORM开关状态,只能为Enabled 类型:String 示例:Enabled 否 Rule 桶级默认WORM策略的规则容器 类型:Container 设置桶级默认WORM策略配置时必选,不携带则会清空当前配置的桶级默认WORM策略 DefaultRetention 桶级默认WORM策略的容器 类型:Container 如果有Rule容器则必选 Mode 默认的保护策略,当前仅支持合规模式"COMPLIANCE" 类型:String 示例:COMPLIANCE 如果有DefaultRetention容器则必选 Days 默认的保护天数,取值范围为1-36500天 类型:Integer 示例:1 如果有DefaultRetention容器则和Years二选一,必须选择其中一个且不能同时指定 Years 默认的保护年数,取值范围为1-100年,一年实际上视为保护365天,不会考虑闰年 类型:Integer 示例:1 如果有DefaultRetention容器则和Days二选一,必须选择其中一个且不能同时指定
  • 响应示例 1 HTTP/1.1 200 OK Server: OBS x-obs-request-id: BF260000016435CE298386946AE4C482 x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCT9W2tcvLmMJ+plfdopaD62S0npbaRUz Date: WED, 01 Jul 2015 02:25:06 GMT Content-Length: 0
  • 请求示例:使用默认密钥对上传的对象进行加密 PUT /encryp1 HTTP/1.1 User-Agent: curl/7.29.0 Host: examplebucket.obs.cn-north-4.myhuaweicloud.com Accept: */* Date: Wed, 06 Jun 2018 09:08:21 GMT Authorization: OBS H4IPJX0TQTHTHEBQQCEC:f3/7eS6MFbW3JO4+7I5AtyAQENU= x-obs-server-side-encryption:AES256 Content-Length: 5242 Expect: 100-continue [5242 Byte object contents]
  • 请求示例:将普通对象拷贝为加密对象 PUT /destobject HTTP/1.1 User-Agent: curl/7.29.0 Host: examplebucket.obs.cn-north-4.myhuaweicloud.com x-obs-server-side-encryption:AES256 Accept: */* Date: Wed, 06 Jun 2018 09:10:29 GMT Authorization: OBS H4IPJX0TQTHTHEBQQCEC:SH3uTrElaGWarVI1uTq325kTVCI= x-obs-copy-source: /bucket/srcobject1
  • 响应示例:将普通对象拷贝为加密对象 HTTP/1.1 200 OK Server: OBS x-obs-request-id: BB78000001648480AF3900CED7F15155 ETag: "d8bffdfbab5345d91ac05141789d2477" x-obs-server-side-encryption: AES256 x-obs-id-2: oRAXhgwdaLc9wKVHqTLSmQB7I35D+32AAAUJAIAABAAAQAAEAABAAAQAAEAABCS Date: Wed, 06 Jun 2018 09:10:29 GMT Content-Length: 0
  • 响应示例:在URL中携带签名并上传加密对象 HTTP/1.1 200 OK Server: OBS x-obs-request-id: BB78000001648480AF3900CED7F15155 ETag: "d8bffdfbab5345d91ac05141789d2477" x-obs-server-side-encryption: AES256 x-obs-id-2: oRAXhgwdaLc9wKVHqTLSmQB7I35D+32AAAUJAIAABAAAQAAEAABAAAQAAEAABCS Date: Wed, 06 Jun 2018 09:10:29 GMT Content-Length: 0
  • 新增头域 SSE-OBS方式用户可以通过配置表1中的头域来实现SSE-OBS加密。 您也可以通过配置桶的默认加密方式来对桶内的对象进行加密。在为桶配置默认加密后,对于任何不带加密头域的上传对象的请求,将使用桶的默认加密配置进行加密。有关桶的加密配置的更多信息请参考设置桶的加密配置章节。 表1 SSE-OBS方式使用的头域 名称 描述 x-obs-server-side-encryption 使用该头域表示服务端加密是SSE-OBS方式。对象使用SSE-OBS方式加密。 类型:String 示例:x-obs-server-side-encryption:AES256
  • 请求示例:在URL中携带签名并上传加密对象 PUT /destobject?AccessKeyId=UI3SN1SRUQE14OYBKTZB&Expires=1534152518&x-obs-server-side-encryption=AES256&Signature=chvmG7%2FDA%2FDCQmTRJu3xngldJpg%3D HTTP/1.1 User-Agent: curl/7.29.0 Host: examplebucket.obs.cn-north-4.myhuaweicloud.com Accept: */* Date: Wed, 06 Jun 2018 09:10:29 GMT
  • 响应示例:使用默认密钥对上传的对象进行加密 HTTP/1.1 200 OK Server: OBS x-obs-request-id: 8DF400000163D45AA81D038B6AE4C482 ETag: "d8bffdfbab5345d91ac05141789d2477" x-obs-server-side-encryption: AES256 x-obs-id-2: 32AAAUJAIAABAAAQAAEAABAAAQAAEAABCTv7cHmAnGfBAGXUHeibUsiETTNqlCqC Date: Wed, 06 Jun 2018 09:08:21 GMT Content-Length: 0
  • 请求示例 PUT /?obscompresspolicy HTTP/1.1 Host: bucketname.obs.cn-north-4.myhuaweicloud.com Authorization: OBS H4IPJX0TQTHTHEBQQCEC:sc2PM13Wlfcoc/YZLK0MwsI2Zpo= Content-Type: application/json Content-Length: 497 Date: Tue, 21 Jul 2020 15:38:30 GMT { "rules": [{ "id": "ruleid", "project": "your project id", "agency": "testagency", "events": ["ObjectCreated:*"], "prefix": "decompress", "suffix": ".zip", "overwrite": 0, "decompresspath": "after-decompress/", "policytype": "decompress" }] }
  • 请求消息样式 PUT /?obscompresspolicy HTTP/1.1 Host: bucketname.obs.cn-north-4.myhuaweicloud.com Authorization: authorization Content-Type: application/json Content-Length: length Date: date policy json body
  • 请求消息元素 表1 请求消息元素 名称 描述 是否必选 rules 策略规则数组。 类型:Container 取值范围:数组大小[1, 10] 说明: 同一个桶下的不同策略前缀不能重复和起始包含,委托建议使用同一个。 是 表2 rules参数说明 名称 描述 是否必选 id 解压策略名称。当前桶上配置的解压规则的唯一标识。 类型:String 取值范围:[1, 256],满足“^[a-zA-Z0-9_-]{1, 256}$”,既长度为1~256个字符。只能由大写或小写的英文字母、数字、下划线(_)和连字符(-)组成。例如:event_0001。 是 project 项目ID。 类型:String 是 agency 委托名。客户通过委托赋予OBS服务查询用户桶内指定对象是否存在以及向用户桶内上传对象的权限。 类型:String 是 events 触发事件类型。 类型:String 支持: ["ObjectCreated:*"] ["ObjectCreated:Put"] ["ObjectCreated:Post"] ["ObjectCreated:Copy"] ["ObjectCreated:CompleteMultipartUpload"] 是 prefix 匹配规则前缀。 类型:String 取值范围:[0, 1023] 否 suffix 匹配规则后缀。 类型:String 固定值:.zip 是 overwrite 解压后同名文件的处理方式。 类型:Integer 取值范围:0:不覆盖跳过,1:不覆盖,以文件的CRC32值重命名,2:覆盖。 是 decompresspath 文件解压后存放的路径,不为空时必须以“/”结尾。 类型:String 取值范围:[0, 800] 否 policytype 文件解压策略类型。 类型:String 固定值:decompress 是 请保证解压策略名称、解压路径、IAM委托名称长度之和不超过800。
  • 签名不匹配报错处理 如果调用OBS API报如下错误: 状态码:403 Forbidden 错误码:SignatureDoesNotMatch 错误信息:The request signature we calculated does not match the signature you provided. Check your key and signing method. 请参考以下案例进行排查处理:签名不匹配(SignatureDoesNotMatch)如何处理
  • 向cn-north-4区域的桶bucket001中上传对象,名称为objecttest1 示例中使用通用的Apache Http Client。 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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 package com.obsclient; import java.io.*; import java.util.ArrayList; import java.util.List; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.InputStreamEntity; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; public class TestMain { /* 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。*/ public static String accessKey = System.getenv("HUAWEICLOUD_SDK_AK"); //取值为获取的AK public static String securityKey = System.getenv("HUAWEICLOUD_SDK_SK"); //取值为获取的SK public static void main(String[] str) { putObjectToBucket(); } private static void putObjectToBucket() { InputStream inputStream = null; CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse httpResponse = null; String requestTime = DateUtils.formatDate(System.currentTimeMillis()); HttpPut httpPut = new HttpPut("http://bucket001.obs.cn-north-4.myhuaweicloud.com/objecttest1"); httpPut.addHeader("Date", requestTime); /** 根据请求计算签名 **/ String contentMD5 = ""; String contentType = ""; String canonicalizedHeaders = ""; String canonicalizedResource = "/bucket001/objecttest1"; // Content-MD5 、Content-Type 没有直接换行, data格式为RFC 1123,和请求中的时间一致 String canonicalString = "PUT" + "\n" + contentMD5 + "\n" + contentType + "\n" + requestTime + "\n" + canonicalizedHeaders + canonicalizedResource; System.out.println("StringToSign:[" + canonicalString + "]"); String signature = null; try { signature = Signature.signWithHmacSha1(securityKey, canonicalString); // 上传的文件目录 inputStream = new FileInputStream("D:\\OBSobject\\text01.txt"); InputStreamEntity entity = new InputStreamEntity(inputStream); httpPut.setEntity(entity); // 增加签名头域 Authorization: OBS AccessKeyID:signature httpPut.addHeader("Authorization", "OBS " + accessKey + ":" + signature); httpResponse = httpClient.execute(httpPut); // 打印发送请求信息和收到的响应消息 System.out.println("Request Message:"); System.out.println(httpPut.getRequestLine()); for (Header header : httpPut.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println("Response Message:"); System.out.println(httpResponse.getStatusLine()); for (Header header : httpResponse.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } BufferedReader reader = new BufferedReader(new InputStreamReader( httpResponse.getEntity().getContent())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = reader.readLine()) != null) { response.append(inputLine); } reader.close(); // print result System.out.println(response.toString()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } } 其中Date头域DateUtils的格式为: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package com.obsclient; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Locale; import java.util.TimeZone; public class DateUtils { public static String formatDate(long time) { DateFormat serverDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH); serverDateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); return serverDateFormat.format(time); } } 签名字符串Signature的计算方法为: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package com.obsclient; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; import java.security.InvalidKeyException; import java.util.Base64; public class Signature { public static String signWithHmacSha1(String sk, String canonicalString) throws UnsupportedEncodingException { try { SecretKeySpec signingKey = new SecretKeySpec(sk.getBytes("UTF-8"), "HmacSHA1"); Mac mac = Mac.getInstance("HmacSHA1"); mac.init(signingKey); return Base64.getEncoder().encodeToString(mac.doFinal(canonicalString.getBytes("UTF-8"))); } catch (NoSuchAlgorithmException | InvalidKeyException | UnsupportedEncodingException e) { e.printStackTrace(); } return null; } }
  • 请求消息样式 通过表单携带回调参数的请求消息样式与POST上传对象相同,参考POST上传。policy的内容包含失效时间和条件元素,参考基于浏览器上传的表单中携带签名。 通过policy携带回调参数的policy如下所示,比普通的policy增加了回调参数“callback”。请求消息样式与POST上传对象相同,参考POST上传。 { "expiration": "2017-12-31T12:00:00.000Z", "conditions": [ {"x-obs-acl": "public-read" }, {"x-obs-security-token": "YwkaRTbdY8g7q...." }, {"bucket": "book" }, ["starts-with", "$key", "user/"] ], "callback": [ {"url": "http://www.example.com/callback" }, {"host": "www.example.com" }, {"body": "eyJrZXkiOiIkKGtleSkiLCJoYXNoIjoiJChldGFnKSJ9"}, {"body-type": "application/json"} ] }
  • 返回码 带回调参数的POST上传对象的返回码与普通POST上传对象不同。普通POST上传对象HTTP状态码是“204 No Content”。带回调参数的POST上传对象、PUT上传对象以及合并段返回结果是回调结果,如果回调成功,一般会返回“200 OK”,如果回调失败,会返回203。 表4 回调请求返回码 HTTP状态码 说明 200 OK 上传对象成功,并且回调成功。 203 Non Authoritative Information 上传对象成功,但是回调失败。
  • 请求示例 GET /v2/workflowexecutions/{execution_name}?x-workflow-graph-name={graph_name} HTTP/1.1 Host: obs.cn-north-4.myhuaweicloud.com Authorization: OBS H4IPJX0TQTHTHEBQQCEC:sc2PM13Wlfcoc/YZLK0MwsI2Zpo= Content-Type: application/json Content-Length: 0 Date: Thu, 27 Aug 2020 12:38:10 GMT
  • 请求消息样式 GET /v2/workflowexecutions/{execution_name}?x-workflow-graph-name={graph_name} HTTP/1.1 Host: obs.cn-north-4.myhuaweicloud.com Authorization: authorization Content-Type: application/json Content-Length: length Date: date
  • 请求示例 2 打开了桶级WORM开关,且配置了桶级默认WORM策略的情况: GET /?object-lock HTTP/1.1 User-Agent: curl/7.29.0 Host: examplebucket.obs.cn-north-4.myhuaweicloud.com Accept: */* Date: WED, 01 Jul 2015 02:25:05 GMT Authorization: OBS H4IPJX0TQTHTHEBQQCEC:75/Y4Ng1izvzc1nTGxpMXTE6ynw= Content-Length: 0
  • 请求示例 1 打开了桶级WORM开关,未配置桶级默认WORM策略的情况 GET /?object-lock HTTP/1.1 User-Agent: curl/7.29.0 Host: examplebucket.obs.cn-north-4.myhuaweicloud.com Accept: */* Date: WED, 01 Jul 2015 02:25:05 GMT Authorization: OBS H4IPJX0TQTHTHEBQQCEC:75/Y4Ng1izvzc1nTGxpMXTE6ynw= Content-Length: 0
共100000条