j9九游会登录/ 对象存储服务 obs/ sdk参考/ android/ / 使用临时url进行授权访问
更新时间:2024-06-21 gmt 08:00

使用临时url进行授权访问-j9九游会登录

开发过程中,您有任何问题可以在github上,或者在中发帖求助。详细介绍了每个接口的参数和使用方法。

obs客户端支持通过访问密钥、请求方法类型、请求参数等信息生成一个在query参数中携带鉴权信息的url,可将该url提供给其他用户进行临时访问。在生成url时,您需要指定url的有效期来限制访客用户的访问时长。

如果您想授予其他用户对桶或对象临时进行其他操作的权限(例如上传或下载对象),则需要生成带对应请求的url后(例如使用生成put请求的url上传对象),将该url提供给其他用户。

通过该方式可支持的操作以及相关信息见下表:

操作名

http请求方法(obs android sdk对应值)

特殊操作符(obs android sdk对应值)

是否需要桶名

是否需要对象名

创建桶

httpmethodenum.put

n/a

是

否

获取桶列表

httpmethodenum.get

n/a

否

否

删除桶

httpmethodenum.delete

n/a

是

否

列举桶内对象

httpmethodenum.get

n/a

是

否

列举桶内多版本对象

httpmethodenum.get

specialparamenum.versions

是

否

列举分段上传任务

httpmethodenum.get

specialparamenum.uploads

是

否

获取桶元数据

httpmethodenum.head

n/a

是

否

获取桶区域位置

httpmethodenum.get

specialparamenum.location

是

否

获取桶存量信息

httpmethodenum.get

specialparamenum.storageinfo

是

否

设置桶配额

httpmethodenum.put

specialparamenum.quota

是

否

获取桶配额

httpmethodenum.get

specialparamenum.quota

是

否

设置桶存储类型

httpmethodenum.put

specialparamenum.storagepolicy

是

否

获取桶存储类型

httpmethodenum.get

specialparamenum.storagepolicy

是

否

设置桶访问权限

httpmethodenum.put

specialparamenum.acl

是

否

获取桶访问权限

httpmethodenum.get

specialparamenum.acl

是

否

开启/关闭桶日志

httpmethodenum.put

specialparamenum.logging

是

否

查看桶日志

httpmethodenum.get

specialparamenum.logging

是

否

设置桶策略

httpmethodenum.put

specialparamenum.policy

是

否

查看桶策略

httpmethodenum.get

specialparamenum.policy

是

否

删除桶策略

httpmethodenum.delete

specialparamenum.policy

是

否

设置生命周期规则

httpmethodenum.put

specialparamenum.lifecycle

是

否

查看生命周期规则

httpmethodenum.get

specialparamenum.lifecycle

是

否

删除生命周期规则

httpmethodenum.delete

specialparamenum.lifecycle

是

否

设置托管配置

httpmethodenum.put

specialparamenum.website

是

否

查看托管配置

httpmethodenum.get

specialparamenum.website

是

否

清除托管配置

httpmethodenum.delete

specialparamenum.website

是

否

设置桶多版本状态

httpmethodenum.put

specialparamenum.versioning

是

否

查看桶多版本状态

httpmethodenum.get

specialparamenum.versioning

是

否

设置跨域规则

httpmethodenum.put

specialparamenum.cors

是

否

查看跨域规则

httpmethodenum.get

specialparamenum.cors

是

否

删除跨域规则

httpmethodenum.delete

specialparamenum.cors

是

否

设置桶标签

httpmethodenum.put

specialparamenum.tagging

是

否

查看桶标签

httpmethodenum.get

specialparamenum.tagging

是

否

删除桶标签

httpmethodenum.delete

specialparamenum.tagging

是

否

上传对象

httpmethodenum.put

n/a

是

是

追加上传

httpmethodenum.post

specialparamenum.append

是

是

下载对象

httpmethodenum.get

n/a

是

是

复制对象

httpmethodenum.put

n/a

是

是

删除对象

httpmethodenum.delete

n/a

是

是

批量删除对象

httpmethodenum.post

specialparamenum.delete

是

是

获取对象属性

httpmethodenum.head

n/a

是

是

设置对象访问权限

httpmethodenum.put

specialparamenum.acl

是

是

查看对象访问权限

httpmethodenum.get

specialparamenum.acl

是

是

初始化分段上传任务

httpmethodenum.post

specialparamenum.uploads

是

是

上传段

httpmethodenum.put

n/a

是

是

复制段

httpmethodenum.put

n/a

是

是

列举已上传的段

httpmethodenum.get

n/a

是

是

合并段

httpmethodenum.post

n/a

是

是

取消分段上传任务

httpmethodenum.delete

n/a

是

是

恢复归档存储对象

httpmethodenum.post

specialparamenum.restore

是

是

通过obs android sdk生成临时url访问obs的步骤如下:

  1. 通过obsclient.createtemporarysignature生成带签名信息的url。
  2. 使用任意http库发送http/https请求,访问obs服务。

如果遇到跨域报错、签名不匹配问题,请参考以下步骤排查问题:

  1. 未配置跨域,需要在控制台配置cors规则,请参考。
  2. 签名计算问题,请参考url中携带签名排查签名参数是否正确;比如上传对象功能,后端将content-type参与计算签名生成授权url,但是前端使用授权url时没有设置content-type字段或者传入错误的值,此时会出现跨域错误。j9九游会登录的解决方案为:content-type字段前后端保持一致。

以下代码展示了如何使用临时url进行授权访问,包括:创建桶、上传对象、下载对象、列举对象、删除对象。

创建桶

// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量access_key_id和secret_access_key_id。
// 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
string ak = system.getenv("access_key_id");
string sk = system.getenv("secret_access_key_id");
string endpoint = "https://your-endpoint";
// 创建obsclient实例
obsclient obsclient = new obsclient(ak, sk, endpoint);
// url有效期,3600秒
long expireseconds = 3600l;
temporarysignaturerequest request = new temporarysignaturerequest(httpmethodenum.put, expireseconds);
request.setbucketname("bucketname");
temporarysignatureresponse response = obsclient.createtemporarysignature(request);
log.i("createtemporarysignature", "creating bucket using temporary signature url:");
log.i("createtemporarysignature", "\t"   response.getsigned);
request.builder builder = new request.builder();
for (map.entry entry : response.getactualsignedrequestheaders().entryset()) {
       builder.header(entry.getkey(), entry.getvalue());
}
// 使用put请求创建桶
string location = "your bucket location";
request httprequest = builder..put(requestbody.create(null, ""   location   "".getbytes())).build();
okhttpclient httpclient = new okhttpclient.builder().followredirects(false).retryonconnectionfailure(false)
              .cache(null).build();
call c = httpclient.newcall(httprequest);
response res = c.execute();
log.i("createtemporarysignature", "\tstatus:"   res.code());
if (res.body() != null) {
       log.i("createtemporarysignature", "\tcontent:"   res.body().string()   "\n");
}
res.close();

上传对象

// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量access_key_id和secret_access_key_id。
// 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
string ak = system.getenv("access_key_id");
string sk = system.getenv("secret_access_key_id");
string endpoint = "https://your-endpoint";
// 创建obsclient实例
obsclient obsclient = new obsclient(ak, sk, endpoint);
// url有效期,3600秒
long expireseconds = 3600l;
map headers = new hashmap();
string contenttype = "text/plain";
headers.put("content-type", contenttype);
temporarysignaturerequest request = new temporarysignaturerequest(httpmethodenum.put, expireseconds);
request.setbucketname("bucketname");
request.setobjectkey("objectname");
request.setheaders(headers);
temporarysignatureresponse response = obsclient.createtemporarysignature(request);
log.i("createtemporarysignature", "creating object using temporary signature url:");
log.i("createtemporarysignature", "\t"   response.getsigned);
request.builder builder = new request.builder();
for (map.entry entry : response.getactualsignedrequestheaders().entryset()) {
       builder.header(entry.getkey(), entry.getvalue());
}
//使用put请求上传对象
request httprequest = builder..put(requestbody.create(mediatype.parse(contenttype), "hello obs".getbytes("utf-8"))).build();
okhttpclient httpclient = new okhttpclient.builder().followredirects(false).retryonconnectionfailure(false)
              .cache(null).build();
call c = httpclient.newcall(httprequest);
response res = c.execute();
log.i("createtemporarysignature", "\tstatus:"   res.code());
if (res.body() != null) {
       log.i("createtemporarysignature", "\tcontent:"   res.body().string()   "\n");
}
res.close();

下载对象

// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量access_key_id和secret_access_key_id。
// 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
string ak = system.getenv("access_key_id");
string sk = system.getenv("secret_access_key_id");
string endpoint = "https://your-endpoint";
// 创建obsclient实例
obsclient obsclient = new obsclient(ak, sk, endpoint);
// url有效期,3600秒
long expireseconds = 3600l;
temporarysignaturerequest request = new temporarysignaturerequest(httpmethodenum.get, expireseconds);
request.setbucketname("bucketname");
request.setobjectkey("objectname");
temporarysignatureresponse response = obsclient.createtemporarysignature(request);
log.i("createtemporarysignature", "getting object using temporary signature url:");
log.i("createtemporarysignature", "\t"   response.getsigned);
request.builder builder = new request.builder();
for (map.entry entry : response.getactualsignedrequestheaders().entryset()) {
       builder.header(entry.getkey(), entry.getvalue());
}
//使用get请求下载对象
request httprequest = builder..get().build();
okhttpclient httpclient = new okhttpclient.builder().followredirects(false).retryonconnectionfailure(false)
              .cache(null).build();
call c = httpclient.newcall(httprequest);
response res = c.execute();
log.i("createtemporarysignature", "\tstatus:"   res.code());
if (res.body() != null) {
       log.i("createtemporarysignature", "\tcontent:"   res.body().string()   "\n");
}
res.close();

列举对象

// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量access_key_id和secret_access_key_id。
// 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
string ak = system.getenv("access_key_id");
string sk = system.getenv("secret_access_key_id");
string endpoint = "https://your-endpoint";
// 创建obsclient实例
obsclient obsclient = new obsclient(ak, sk, endpoint);
// url有效期,3600秒
long expireseconds = 3600l;
temporarysignaturerequest request = new temporarysignaturerequest(httpmethodenum.get, expireseconds);
request.setbucketname("bucketname");
temporarysignatureresponse response = obsclient.createtemporarysignature(request);
log.i("createtemporarysignature", "getting object list using temporary signature url:");
log.i("createtemporarysignature", "\t"   response.getsigned);
request.builder builder = new request.builder();
for (map.entry entry : response.getactualsignedrequestheaders().entryset()) {
       builder.header(entry.getkey(), entry.getvalue());
}
//使用get请求获取对象列表
request httprequest = builder..get().build();
okhttpclient httpclient = new okhttpclient.builder().followredirects(false).retryonconnectionfailure(false)
              .cache(null).build();
call c = httpclient.newcall(httprequest);
response res = c.execute();
log.i("createtemporarysignature", "\tstatus:"   res.code());
if (res.body() != null) {
       log.i("createtemporarysignature", "\tcontent:"   res.body().string()   "\n");
}
res.close();

删除对象

// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量access_key_id和secret_access_key_id。
// 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
string ak = system.getenv("access_key_id");
string sk = system.getenv("secret_access_key_id");
string endpoint = "https://your-endpoint";
// 创建obsclient实例
obsclient obsclient = new obsclient(ak, sk, endpoint);
// url有效期,3600秒
long expireseconds = 3600l;
temporarysignaturerequest request = new temporarysignaturerequest(httpmethodenum.delete, expireseconds);
request.setbucketname("bucketname");
request.setobjectkey("objectname");
temporarysignatureresponse response = obsclient.createtemporarysignature(request);
log.i("createtemporarysignature", "deleting object using temporary signature url:");
log.i("createtemporarysignature", "\t"   response.getsigned);
request.builder builder = new request.builder();
for (map.entry entry : response.getactualsignedrequestheaders().entryset()) {
       builder.header(entry.getkey(), entry.getvalue());
}
//使用delete删除对象
request httprequest = builder..delete().build();
okhttpclient httpclient = new okhttpclient.builder().followredirects(false).retryonconnectionfailure(false)
              .cache(null).build();
call c = httpclient.newcall(httprequest);
response res = c.execute();
log.i("createtemporarysignature", "\tstatus:"   res.code());
if (res.body() != null) {
       log.i("createtemporarysignature", "\tcontent:"   res.body().string()   "\n");
}
res.close();

httpmethodenum是obs android sdk定义的枚举类型,代表请求方法类型。

相关文档

网站地图