当前位置:主页 > 查看内容

使用URL进行授权访问_对象存储服务 OBS_SDK参考_Java_授权访问

发布时间:2021-09-10 00:00| 位朋友查看

简介:开发过程中,您有任何问题可以在github上 提交issue ,或者在 华为云对象存储服务论坛 中发帖求助。 接口参考文档 详细介绍了每个接口的参数和使用方法。 OBS客户端支持通过访问密钥、请求方法类型、请求参数等信息生成一个在Query参数中携带鉴权信息的URL,……

开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。

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

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

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

操作名

HTTP请求方法(OBS Java SDK对应值)

特殊操作符(OBS Java 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.NOTIFICATION

查看事件通知

HttpMethodEnum.GET

SpecialParamEnum.NOTIFICATION

设置桶标签

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 Java SDK实现URL授权访问的步骤如下:

  1. 通过ObsClient.createTemporarySignature生成带签名信息的URL。
  2. 使用任意HTTP库发送HTTP/HTTPS请求,访问OBS服务。

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

创建桶

String endPoint = "http://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";

// 创建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);
System.out.println("Creating bucket using temporary signature url:");
System.out.println("\t" + response.getSignedUrl());

Request.Builder builder = new Request.Builder();
for (Map.Entry<String, String> entry : response.getActualSignedRequestHeaders().entrySet()) {
       builder.header(entry.getKey(), entry.getValue());
}
// 使用PUT请求创建桶
String location = "your bucket location";
Request httpRequest = builder.url(response.getSignedUrl()).put(RequestBody.create(null, "<CreateBucketConfiguration><Location>" + location + "</Location></CreateBucketConfiguration>".getBytes())).build();
OkHttpClient httpClient = new OkHttpClient.Builder().followRedirects(false).retryOnConnectionFailure(false)
              .cache(null).build();

Call c = httpClient.newCall(httpRequest);
Response res = c.execute();
System.out.println("\tStatus:" + res.code());
if (res.body() != null) {
       System.out.println("\tContent:" + res.body().string() + "\n");
}
res.close();

上传对象

String endPoint = "http://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";

// 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
// URL有效期,3600
long expireSeconds = 3600L;

Map<String, String> headers = new HashMap<String, String>();
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);

System.out.println("Creating object using temporary signature url:");
System.out.println("\t" + response.getSignedUrl());
Request.Builder builder = new Request.Builder();
for (Map.Entry<String, String> entry : response.getActualSignedRequestHeaders().entrySet()) {
       builder.header(entry.getKey(), entry.getValue());
}

//使用PUT请求上传对象
Request httpRequest = builder.url(response.getSignedUrl()).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();
System.out.println("\tStatus:" + res.code());
if (res.body() != null) {
       System.out.println("\tContent:" + res.body().string() + "\n");
}
res.close();

下载对象

String endPoint = "http://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";

// 创建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);

System.out.println("Getting object using temporary signature url:");
System.out.println("\t" + response.getSignedUrl());
Request.Builder builder = new Request.Builder();
for (Map.Entry<String, String> entry : response.getActualSignedRequestHeaders().entrySet()) {
       builder.header(entry.getKey(), entry.getValue());
}

//使用GET请求下载对象
Request httpRequest = builder.url(response.getSignedUrl()).get().build();
OkHttpClient httpClient = new OkHttpClient.Builder().followRedirects(false).retryOnConnectionFailure(false)
              .cache(null).build();

Call c = httpClient.newCall(httpRequest);
Response res = c.execute();
System.out.println("\tStatus:" + res.code());
if (res.body() != null) {
       System.out.println("\tContent:" + res.body().string() + "\n");
}
res.close();

列举对象

String endPoint = "http://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";

// 创建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);

System.out.println("Getting object list using temporary signature url:");
System.out.println("\t" + response.getSignedUrl());
Request.Builder builder = new Request.Builder();
for (Map.Entry<String, String> entry : response.getActualSignedRequestHeaders().entrySet()) {
       builder.header(entry.getKey(), entry.getValue());
}

//使用GET请求获取对象列表
Request httpRequest = builder.url(response.getSignedUrl()).get().build();
OkHttpClient httpClient = new OkHttpClient.Builder().followRedirects(false).retryOnConnectionFailure(false)
              .cache(null).build();

Call c = httpClient.newCall(httpRequest);
Response res = c.execute();
System.out.println("\tStatus:" + res.code());
if (res.body() != null) {
       System.out.println("\tContent:" + res.body().string() + "\n");
}
res.close();

删除对象

String endPoint = "http://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";

// 创建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);

System.out.println("Deleting object using temporary signature url:");
System.out.println("\t" + response.getSignedUrl());
Request.Builder builder = new Request.Builder();
for (Map.Entry<String, String> entry : response.getActualSignedRequestHeaders().entrySet()) {
       builder.header(entry.getKey(), entry.getValue());
}

//使用DELETE删除对象
Request httpRequest = builder.url(response.getSignedUrl()).delete().build();
OkHttpClient httpClient = new OkHttpClient.Builder().followRedirects(false).retryOnConnectionFailure(false)
              .cache(null).build();

Call c = httpClient.newCall(httpRequest);
Response res = c.execute();
System.out.println("\tStatus:" + res.code());
if (res.body() != null) {
       System.out.println("\tContent:" + res.body().string() + "\n");
}
res.close();

初始化分段上传任务

String endPoint = "http://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";

// 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
// URL有效期,3600
long expireSeconds = 3600L;

TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.POST, expireSeconds);
request.setBucketName("bucketname");
request.setObjectKey("objectname");
request.setSpecialParam(SpecialParamEnum.UPLOADS);

TemporarySignatureResponse response = obsClient.createTemporarySignature(request);

System.out.println("initiate multipart upload using temporary signature url:");
System.out.println("\t" + response.getSignedUrl());

Request.Builder builder = new Request.Builder();
for (Map.Entry<String, String> entry : response.getActualSignedRequestHeaders().entrySet()) {
       builder.header(entry.getKey(), entry.getValue());
}

//使用POST请求初始化分段上传任务
Request httpRequest = builder.url(response.getSignedUrl()).post(RequestBody.create(null, "")).build();
OkHttpClient httpClient = new OkHttpClient.Builder().followRedirects(false).retryOnConnectionFailure(false)
              .cache(null).build();

Call c = httpClient.newCall(httpRequest);
Response res = c.execute();
System.out.println("\tStatus:" + res.code());
if (res.body() != null) {
       System.out.println("\tContent:" + res.body().string() + "\n");
}
res.close();

上传段

String endPoint = "http://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";

// 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
// URL有效期,3600
long expireSeconds = 3600L;

TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.PUT, expireSeconds);
request.setBucketName("bucketname");
request.setObjectKey("objectname");

Map<String, Object> queryParams = new HashMap<String, Object>();
// 设置partNumber请求参数,例如:queryParams.put("partNumber", "1");
queryParams.put("partNumber", "partNumber");
queryParams.put("uploadId", "your uploadId");

request.setQueryParams(queryParams);

TemporarySignatureResponse response = obsClient.createTemporarySignature(request);

System.out.println("upload part using temporary signature url:");
System.out.println("\t" + response.getSignedUrl());

Request.Builder builder = new Request.Builder();
for (Map.Entry<String, String> entry : response.getActualSignedRequestHeaders().entrySet()) {
       builder.header(entry.getKey(), entry.getValue());
}

//使用PUT请求上传段
Request httpRequest = builder.url(response.getSignedUrl()).put(RequestBody.create(null, new byte[6 * 1024 * 1024])).build();
OkHttpClient httpClient = new OkHttpClient.Builder().followRedirects(false).retryOnConnectionFailure(false)
              .cache(null).build();

Call c = httpClient.newCall(httpRequest);
Response res = c.execute();
System.out.println("\tStatus:" + res.code());
if (res.body() != null) {
       System.out.println("\tContent:" + res.body().string() + "\n");
}
res.close();

列举已上传段

String endPoint = "http://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";

// 创建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");

Map<String, Object> queryParams = new HashMap<String, Object>();
queryParams.put("uploadId", "your uploadId");
request.setQueryParams(queryParams);

TemporarySignatureResponse response = obsClient.createTemporarySignature(request);

System.out.println("list parts using temporary signature url:");
System.out.println("\t" + response.getSignedUrl());

Request.Builder builder = new Request.Builder();
for (Map.Entry<String, String> entry : response.getActualSignedRequestHeaders().entrySet()) {
       builder.header(entry.getKey(), entry.getValue());
}

//使用GET请求列举已上传段
Request httpRequest = builder.url(response.getSignedUrl()).get().build();
OkHttpClient httpClient = new OkHttpClient.Builder().followRedirects(false).retryOnConnectionFailure(false)
              .cache(null).build();

Call c = httpClient.newCall(httpRequest);
Response res = c.execute();
System.out.println("\tStatus:" + res.code());
if (res.body() != null) {
       System.out.println("\tContent:" + res.body().string() + "\n");
}
res.close();

合并段

String endPoint = "http://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";

// 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
// URL有效期,3600
long expireSeconds = 3600L;

TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.POST, expireSeconds);
request.setBucketName("bucketname");
request.setObjectKey("objectname");

Map<String, String> headers = new HashMap<String, String>();
String contentType = "application/xml";
headers.put("Content-Type", contentType);
request.setHeaders(headers);

Map<String, Object> queryParams = new HashMap<String, Object>();
queryParams.put("uploadId", "your uploadId");
request.setQueryParams(queryParams);

TemporarySignatureResponse response = obsClient.createTemporarySignature(request);

System.out.println("complete multipart upload using temporary signature url:");
System.out.println("\t" + response.getSignedUrl());

Request.Builder builder = new Request.Builder();
for (Map.Entry<String, String> entry : response.getActualSignedRequestHeaders().entrySet()) {
       builder.header(entry.getKey(), entry.getValue());
}

// 以下content为示例代码,需要通过列举已上传段方法的响应结果,拼装以下内容
String content = "<CompleteMultipartUpload>";
content += "<Part>";
content += "<PartNumber>1</PartNumber>";
content += "<ETag>da6a0d097e307ac52ed9b4ad551801fc</ETag>";
content += "</Part>";
content += "<Part>";
content += "<PartNumber>2</PartNumber>";
content += "<ETag>da6a0d097e307ac52ed9b4ad551801fc</ETag>";
content += "</Part>";
content += "</CompleteMultipartUpload>";

//使用POST请求合并段
Request httpRequest = builder.url(response.getSignedUrl()).post(RequestBody.create(MediaType.parse(contentType), content.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();
System.out.println("\tStatus:" + res.code());
if (res.body() != null) {
       System.out.println("\tContent:" + res.body().string() + "\n");
}
res.close();

获取图片转码的下载链接

String endPoint = "http://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";

// 创建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");

// 设置图片转码参数

Map<String,Object> queryParams = new HashMap<String, Object>();
queryParams.put("x-image-process", "image/resize,m_fixed,w_100,h_100/rotate,100");
request.setQueryParams(queryParams);

TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
//获取支持图片转码的下载链接
System.out.println("Getting object using temporary signature url:");
System.out.println("\t" + response.getSignedUrl());
res.close();

下载SSE-C加密类型的对象

String endPoint = "http://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";

ObsConfiguration config = new ObsConfiguration();
config.setSocketTimeout(30000);
config.setConnectionTimeout(10000);
config.setEndPoint(endPoint);
// 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, config);
// URL有效期,3600
long expireSeconds = 3600L;

TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expireSeconds);
request.setBucketName("bucketname");
request.setObjectKey("objectname");
// 设置SSE-C加密方式的头域信息
Map<String, String> headers = new HashMap<String, String>();
headers.put("x-obs-server-side-encryption-customer-algorithm", "AES256");
// 设置加密使用的密钥,该头域由256-bit的密钥经过base64-encoded得到
headers.put("x-obs-server-side-encryption-customer-key", "your base64 sse-c key generated by AES-256 algorithm");
// 设置加密使用的密钥的MD5值,该头域由密钥的128-bit MD5值经过base64-encoded得到
headers.put("x-obs-server-side-encryption-customer-key-MD5", "the md5 value of your sse-c key");
request.setHeaders(headers);

TemporarySignatureResponse response = obsClient.createTemporarySignature(request);

System.out.println("Getting object using temporary signature url:");
System.out.println("\t" + response.getSignedUrl());
Request.Builder builder = new Request.Builder();
for (Map.Entry<String, String> entry : response.getActualSignedRequestHeaders().entrySet()) {
       builder.header(entry.getKey(), entry.getValue());
}

//使用GET请求下载对象
Request httpRequest = builder.url(response.getSignedUrl()).get().build();
OkHttpClient httpClient = new OkHttpClient.Builder().followRedirects(false).retryOnConnectionFailure(false)
              .cache(null).build();

Call c = httpClient.newCall(httpRequest);
Response res = c.execute();
System.out.println("\tStatus:" + res.code());
if (res.body() != null) {
       System.out.println("\tContent:" + res.body().string() + "\n");
}
res.close();
  • HttpMethodEnum是OBS Java SDK定义的枚举类型,代表请求方法类型。

本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:创建存储容量单位包 - 云服务器 ECS 下一篇:没有了

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐