开发过程中,您有任何问题可以在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授权访问的步骤如下:
以下代码展示了如何使用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();
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();
2021年中国信通院ICT+深度观察报告会将于12月15日在北京国家会议中心召开。届时...
TOP云 (west.cn)8月3日消息,据眼尖的网友爆料,极品单字符 域名 i.cn已搭建“...
作者 | 默达 来源 | 阿里技术公众号 一 背景 在很多产品中都存在生命周期相关的...
前言 ClickHouse广泛用于用户和系统日志查询场景中,借助腾讯云提供基础设施,微...
往期精选合集包 戳我前往 囊括了 AI、架构师、 Serverless 、AIoT、DevOps、容器...
1、为什么Redis是单线程的呢? ????这里强调的单线程是指网络请求模块使用一个线...
【51CTO.com快译】数十年来,PHP一直是全球最受欢迎的编程语言之一。PHP开发具有...
观看发布会: https://yqh.aliyun.com/live/apsara_stack_new_release 更多混合...
回溯算法大家是不是已经快忘了,还记得组合问题应该怎么求了么?哈哈哈 回溯算法...
前两天,新疆喀什疫情冲上热搜。一夜之间,喀什激增了137例新冠肺炎无症状感染者...