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

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

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

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

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

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

操作名

http请求方法

特殊操作符(子资源)

是否需要桶名

是否需要对象名

列举桶内对象

get

n/a

是

否

列举桶内多版本对象

get

versions

是

否

列举分段上传任务

get

uploads

是

否

获取桶元数据

head

n/a

是

否

获取桶区域位置

get

location

是

否

获取桶存量信息

get

storageinfo

是

否

设置桶配额

put

quota

是

否

获取桶配额

get

quota

是

否

设置桶存储类型

put

storagepolicy

是

否

获取桶存储类型

get

storagepolicy

是

否

设置桶访问权限

put

acl

是

否

获取桶访问权限

get

acl

是

否

开启/关闭桶日志

put

logging

是

否

查看桶日志

get

logging

是

否

设置桶策略

put

policy

是

否

查看桶策略

get

policy

是

否

删除桶策略

delete

policy

是

否

设置生命周期规则

put

lifecycle

是

否

查看生命周期规则

get

lifecycle

是

否

删除生命周期规则

delete

lifecycle

是

否

设置托管配置

put

website

是

否

查看托管配置

get

website

是

否

清除托管配置

delete

website

是

否

设置桶多版本状态

put

versioning

是

否

查看桶多版本状态

get

versioning

是

否

查看跨域规则

get

cors

是

否

删除跨域规则

delete

cors

是

否

设置桶标签

put

tagging

是

否

查看桶标签

get

tagging

是

否

删除桶标签

delete

tagging

是

否

上传对象

put

n/a

是

是

追加上传

post

append

是

是

下载对象

get

n/a

是

是

复制对象

put

n/a

是

是

删除对象

delete

n/a

是

是

批量删除对象

post

delete

是

是

获取对象属性

head

n/a

是

是

设置对象访问权限

put

acl

是

是

查看对象访问权限

get

acl

是

是

初始化分段上传任务

post

uploads

是

是

上传段

put

n/a

是

是

复制段

put

n/a

是

是

列举已上传的段

get

n/a

是

是

合并段

post

n/a

是

是

取消分段上传任务

delete

n/a

是

是

恢复归档存储对象

post

restore

是

是

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

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

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

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

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

上传对象

// 创建obsclient实例
var obsclient = new obsclient({
    // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量accesskeyid和secretaccesskey。
    // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。
    // 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
    access_key_id: process.env.accesskeyid,
    secret_access_key: process.env.secretaccesskey,
    // 这里以华北-北京四为例,其他地区请按实际情况填写
    server: 'https://obs.cn-north-4.myhuaweicloud.com'
});
// 使用put请求上传对象
var bucketname = 'bucketname';
var objectkey = 'objectname';
var method = 'put';
var headers = {
       'content-type' : 'text/plain'
}
var res = obsclient.createsignedurlsync({
       method : method,
       bucket : bucketname,
       key : objectkey,
       expires : 3600,
       headers : headers
});
var content = 'hello obs';
var reopt = {
       method : method,
       url : res.signedurl,
       withcredentials: false, 
       headers : res.actualsignedrequestheaders || {},
       validatestatus: function(status){
              return status >= 200;
       },
       maxredirects : 0,
       responsetype : 'text',
       data : content,
};
axios.request(reopt).then(function (response) {
       if(response.status < 300){                     
              console.log('creating object using temporary signature succeed.');              
       }else{                     
              console.log('creating object using temporary signature failed!');                     
              console.log('status:'   response.status);                     
              console.log('\n');              
       }              
       console.log(response.data);              
       console.log('\n');
}).catch(function (err) {
       console.log('creating object using temporary signature failed!');       
       console.log(err);       
       console.log('\n');
});

下载对象

// 创建obsclient实例
var obsclient = new obsclient({
    // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量accesskeyid和secretaccesskey。
    // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。
    // 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
    access_key_id: process.env.accesskeyid,
    secret_access_key: process.env.secretaccesskey,
    // 这里以华北-北京四为例,其他地区请按实际情况填写
    server: 'https://obs.cn-north-4.myhuaweicloud.com'
});
// 使用get请求下载对象
var bucketname = 'bucketname';
var objectkey = 'objectname';
var method = 'get';
var res = obsclient.createsignedurlsync({
       method : method,
       bucket : bucketname,
       key : objectkey,
       expires : 3600,
});
var reopt = {
       method : method,
       url : res.signedurl,
       withcredentials: false, 
       headers : res.actualsignedrequestheaders || {},
       validatestatus: function(status){
              return status >= 200;
       },
       maxredirects : 0,
       responsetype : 'text',
};
axios.request(reopt).then(function (response) {
       if(response.status < 300){                     
              console.log('getting object using temporary signature succeed.');              
       }else{                     
              console.log('getting object using temporary signature failed!');                     
              console.log('status:'   response.status);                     
              console.log('\n');              
       }              
       console.log(response.data);              
       console.log('\n');
}).catch(function (err) {
       console.log('getting object using temporary signature failed!');       
       console.log(err);       
       console.log('\n');
});

列举对象

// 创建obsclient实例
var obsclient = new obsclient({
    // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量accesskeyid和secretaccesskey。
    // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。
    // 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
    access_key_id: process.env.accesskeyid,
    secret_access_key: process.env.secretaccesskey,
    // 这里以华北-北京四为例,其他地区请按实际情况填写
    server: 'https://obs.cn-north-4.myhuaweicloud.com'
});
// 使用get请求获取对象列表
var bucketname = 'bucketname';
var method = 'get';
var res = obsclient.createsignedurlsync({
       method : method,
       bucket : bucketname,
       expires : 3600,
});
var reopt = {
       method : method,
       url : res.signedurl,
       withcredentials: false, 
       headers : res.actualsignedrequestheaders || {},
       validatestatus: function(status){
              return status >= 200;
       },
       maxredirects : 0,
       responsetype : 'text',
};
axios.request(reopt).then(function (response) {
       if(response.status < 300){                     
              console.log('listing object using temporary signature succeed.');              
       }else{                     
              console.log('listing object using temporary signature failed!');                     
              console.log('status:'   response.status);                     
              console.log('\n');              
       }              
       console.log(response.data);              
       console.log('\n');
}).catch(function (err) {
       console.log('listing object using temporary signature failed!');       
       console.log(err);       
       console.log('\n');
});

删除对象

// 创建obsclient实例
var obsclient = new obsclient({
    // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量accesskeyid和secretaccesskey。
    // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。
    // 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
    access_key_id: process.env.accesskeyid,
    secret_access_key: process.env.secretaccesskey,
    // 这里以华北-北京四为例,其他地区请按实际情况填写
    server: 'https://obs.cn-north-4.myhuaweicloud.com'
});
// 使用delete请求删除对象
var bucketname = 'bucketname';
var objectkey = 'objectname';
var method = 'delete';
var res = obsclient.createsignedurlsync({
       method : method,
       bucket : bucketname,
       key : objectkey,
       expires : 3600,
});
var reopt = {
       method : method,
       url : res.signedurl,
       withcredentials: false, 
       headers : res.actualsignedrequestheaders || {},
       validatestatus: function(status){
              return status >= 200;
       },
       maxredirects : 0,
       responsetype : 'text',
};
axios.request(reopt).then(function (response) {
       if(response.status < 300){                     
              console.log('deleting object using temporary signature succeed.');              
       }else{                     
              console.log('deleting object using temporary signature failed!');                     
              console.log('status:'   response.status);                     
              console.log('\n');              
       }              
       console.log(response.data);              
       console.log('\n');
}).catch(function (err) {
       console.log('deleting object using temporary signature failed!');       
       console.log(err);       
       console.log('\n');
});

初始化分段上传任务

// 创建obsclient实例
var obsclient = new obsclient({
    // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量accesskeyid和secretaccesskey。
    // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。
    // 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
    access_key_id: process.env.accesskeyid,
    secret_access_key: process.env.secretaccesskey,
    // 这里以华北-北京四为例,其他地区请按实际情况填写
    server: 'https://obs.cn-north-4.myhuaweicloud.com'
});
// 使用post请求初始化分段上传任务
var bucketname = 'bucketname';
var objectkey = 'objectname';
var method = 'post';
var res = obsclient.createsignedurlsync({
       method : method,
       bucket : bucketname,
       key : objectkey,
       expires : 3600,
       specialparam: "uploads"
});
var reopt = {
       method : method,
       url : res.signedurl,
       withcredentials: false, 
       headers : res.actualsignedrequestheaders || {},
       validatestatus: function(status){
              return status >= 200;
       },
       maxredirects : 0,
       responsetype : 'text',
};
axios.request(reopt).then(function (response) {
       if(response.status < 300){                     
              console.log('initiate multipart upload using temporary signature succeed.');              
       }else{                     
              console.log('initiate multipart upload using temporary signature failed!');                     
              console.log('status:'   response.status);                     
              console.log('\n');              
       }              
       console.log(response.data);              
       console.log('\n');
}).catch(function (err) {
       console.log('initiate multipart upload using temporary signature failed!');       
       console.log(err);       
       console.log('\n');
});

上传段

// 创建obsclient实例
var obsclient = new obsclient({
    // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量accesskeyid和secretaccesskey。
    // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。
    // 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
    access_key_id: process.env.accesskeyid,
    secret_access_key: process.env.secretaccesskey,
    // 这里以华北-北京四为例,其他地区请按实际情况填写
    server: 'https://obs.cn-north-4.myhuaweicloud.com'
});
// 使用put请求上传段
var bucketname = 'bucketname';
var objectkey = 'objectname';
var method = 'put';
var headers = {
       'content-type' : 'text/plain'
}
var res = obsclient.createsignedurlsync({
       method : method,
       bucket : bucketname,
       key : objectkey,
       expires : 3600,
       headers: headers
       queryparams: {
           // 指定上传段的段号
           'partnumber': '1',
           // 分段上传任务的id。任务id可以通过初始化分段上传任务生成。
           'uploadid': '000001648453845dbb78f2340dd4*****',          
       }
});
var content = 'hello obs';
var reopt = {
       method : method,
       url : res.signedurl,
       withcredentials: false, 
       headers : res.actualsignedrequestheaders || {},
       validatestatus: function(status){
              return status >= 200;
       },
       maxredirects : 0,
       responsetype : 'text',
       data : content,
};
axios.request(reopt).then(function (response) {
       if(response.status < 300){                     
              console.log('upload part using temporary signature succeed.');              
       }else{                     
              console.log('upload part using temporary signature failed!');                     
              console.log('status:'   response.status);                     
              console.log('\n');              
       }              
       console.log(response.data);              
       console.log('\n');
}).catch(function (err) {
       console.log('upload part upload using temporary signature failed!');       
       console.log(err);       
       console.log('\n');
});

合并段

// 创建obsclient实例
var obsclient = new obsclient({
    // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量accesskeyid和secretaccesskey。
    // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。
    // 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
    access_key_id: process.env.accesskeyid,
    secret_access_key: process.env.secretaccesskey,
    // 这里以华北-北京四为例,其他地区请按实际情况填写
    server: 'https://obs.cn-north-4.myhuaweicloud.com'
});
// 使用post请求合并段
var bucketname = 'bucketname';
var objectkey = 'objectname';
var method = 'post';
var headers = {
       'content-type' : 'application/xml'
}
var res = obsclient.createsignedurlsync({
       method : method,
       bucket : bucketname,
       key : objectkey,
       expires : 3600,
       headers: headers,
       queryparams: {
           // 分段上传任务的id。任务id可以通过初始化分段上传任务生成。
           'uploadid': '000001648453845dbb78f2340dd4*****',          
       }
});
var content = "";
content  = "";
content  = "1";
content  = "da6a0d097e307ac52ed9b4ad551801fc";
content  = "";
content  = "";
content  = "2";
content  = "da6a0d097e307ac52ed9b4ad551801fc";
content  = "";
content  = "";
var reopt = {
       method : method,
       url : res.signedurl,
       withcredentials: false, 
       headers : res.actualsignedrequestheaders || {},
       validatestatus: function(status){
              return status >= 200;
       },
       maxredirects : 0,
       responsetype : 'text',
       data : content,
};
axios.request(reopt).then(function (response) {
       if(response.status < 300){                     
              console.log('complete multipart upload using temporary signature succeed.');              
       }else{                     
              console.log('complete multipart upload using temporary signature failed!');                     
              console.log('status:'   response.status);                     
              console.log('\n');              
       }              
       console.log(response.data);              
       console.log('\n');
}).catch(function (err) {
       console.log('complete multipart upload using temporary signature failed!');       
       console.log(err);       
       console.log('\n');
});
  1. 使用method参数指定http请求方法类型;使用expires参数指定生成的url有效期;使用headers参数指定请求的头信息;使用specialparam参数指定特殊操作符;使用queryparams参数指定请求的查询参数。
  2. 后端生成临时url返回的actualsignedrequestheaders可能会携带host,如果使用浏览器上传对象,则不需要配置host,即在上传时需要去掉headers中的host,否则会报错。

相关文档

网站地图