生成带授权信息的URL(Harmony SDK)
功能说明
通过访问密钥、请求方法类型、请求参数等信息生成一个在Query参数中携带鉴权信息的URL,可将该URL提供给其他用户进行临时访问。在生成URL时,需要指定URL的有效期来限制访客用户的访问时长。
如果想授予其他用户对桶或对象临时进行其他操作的权限(例如上传或下载对象),则需要生成带对应请求的URL后(例如使用生成PUT请求的URL上传对象),将该URL提供给其他用户。
接口约束
方法定义
createSignedUrlSync(input: CreateSignedUrlSyncInput): CreateSignedUrlSyncOutput
请求参数
| 
        参数名称  | 
      
        参数类型  | 
      
        是否必选  | 
      
        描述  | 
     
|---|---|---|---|
| 
        input  | 
      
        必选  | 
      
        参数解释: 生成带授权信息的URL接口入参,详见CreateSignedUrlInput。  | 
     
| 
        参数名称  | 
      
        参数类型  | 
      
        是否必选  | 
      
        描述  | 
     
|---|---|---|---|
| 
        Method  | 
      
        必选  | 
      
        参数解释: HTTP方法类型,详情参见HttpMethodType。  | 
     |
| 
        Bucket  | 
      
        string  | 
      
        可选  | 
      
        参数解释: 桶名。 约束限制: 
 默认取值: 无  | 
     
| 
        Key  | 
      
        string  | 
      
        可选  | 
      
        参数解释: 对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4. myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无  | 
     
| 
        SpecialParam  | 
      
        可选  | 
      
        参数解释: 要访问的子资源,详情参见SpecialParam。  | 
     |
| 
        Expires  | 
      
        number  | 
      
        可选  | 
      
        参数解释: 带授权信息的URL的过期时间。 取值范围: 0~(231-1),单位:秒。 默认取值: 300  | 
     
| 
        Headers  | 
      
        object  | 
      
        可选  | 
      
        参数解释: 请求中携带的头域。 默认取值: 无  | 
     
| 
        QueryParams  | 
      
        object  | 
      
        可选  | 
      
        参数解释: 请求中携带的查询参数。 默认取值: 无  | 
     
| 
        常量名  | 
      
        原始值  | 
      
        说明  | 
     
|---|---|---|
| 
        GET  | 
      
        GET  | 
      
        HTTP GET请求。  | 
     
| 
        POST  | 
      
        POST  | 
      
        HTTP POST请求。  | 
     
| 
        PUT  | 
      
        PUT  | 
      
        HTTP PUT请求。  | 
     
| 
        DELETE  | 
      
        DELETE  | 
      
        HTTP DELETE请求。  | 
     
| 
        HEAD  | 
      
        HEAD  | 
      
        HTTP HEAD请求。  | 
     
| 
        OPTIONS  | 
      
        OPTIONS  | 
      
        HTTP OPTIONS请求。  | 
     
| 
        常量名  | 
      
        原始值  | 
      
        适用接口  | 
     
|---|---|---|
| 
        STORAGE_POLICY  | 
      
        storagePolicy  | 
      
        设置/获取桶存储类型。  | 
     
| 
        QUOTA  | 
      
        quota  | 
      
        设置/获取桶配额。  | 
     
| 
        STORAGE_INFO  | 
      
        storageinfo  | 
      
        获取桶存量信息。  | 
     
| 
        LOCATION  | 
      
        location  | 
      
        获取桶区域位置。  | 
     
| 
        ACL  | 
      
        acl  | 
      
        设置/获取桶ACL、设置/获取对象ACL。  | 
     
| 
        POLICY  | 
      
        policy  | 
      
        设置/获取/删除桶策略。  | 
     
| 
        CORS  | 
      
        cors  | 
      
        设置/获取/删除桶CORS配置。  | 
     
| 
        VERSIONING  | 
      
        versioning  | 
      
        设置/获取桶多版本状态。  | 
     
| 
        WEBSITE  | 
      
        website  | 
      
        设置/获取/删除桶Website配置。  | 
     
| 
        LOGGING  | 
      
        logging  | 
      
        设置/获取桶日志管理配置。  | 
     
| 
        LIFECYCLE  | 
      
        lifecycle  | 
      
        设置/获取/删除桶生命周期配置。  | 
     
| 
        NOTIFICATION  | 
      
        notification  | 
      
        设置/获取桶时间通知配置。  | 
     
| 
        TAGGING  | 
      
        tagging  | 
      
        设置/获取/删除桶标签。  | 
     
| 
        APPEND  | 
      
        append  | 
      
        追加上传对象  | 
     
| 
        DELETE  | 
      
        delete  | 
      
        批量删除对象。  | 
     
| 
        VERSIONS  | 
      
        versions  | 
      
        列举桶内多版本对象。  | 
     
| 
        UPLOADS  | 
      
        uploads  | 
      
        列举桶内分段上传任务、初始化分段上传任务。  | 
     
| 
        RESTORE  | 
      
        restore  | 
      
        恢复归档存储或深度归档存储对象。  | 
     
返回结果
| 
        参数名称  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|
| 
        SignedUrl  | 
      
        string  | 
      
        参数解释: 带授权信息的URL。 默认取值: 无  | 
     
| 
        ActualSignedRequestHeaders  | 
      
        object  | 
      
        参数解释: 通过带授权信息的URL发起请求时实际应携带的头域。 默认取值: 无  | 
     
代码示例
使用临时URL上传对象
        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  | 
       
        // 引入依赖包 import ObsClient, { HttpMethodType } from '@obs/esdk-obs-harmony'; // 指定存储桶名称 const bucketName = "examplebucket"; // 指定对象,此处以 example/objectname 为例 const objectKey = "example/objectname"; // Server填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写 const server = "https://obs.cn-north-4.myhuaweicloud.com"; // 文件的本地存储路径。仅支持"internal"协议类型,"internal://cache/"为应用的私有目录,是必填字段 const sourceFile = "internal://cache/hello.txt"; // 创建ObsClient实例 const obsClient = new ObsClient({ // 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html AccessKeyId: process.env.ACCESS_KEY_ID, SecretAccessKey: process.env.SECRET_ACCESS_KEY, // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入 // SecurityToken: process.env.SECURITY_TOKEN, Server, }); const putObject = async () => { const result = obsClient.createSignedUrlSync({ // 指定HTTP方法类型,这里以HttpMethodType.PUT为例 Method: HttpMethodType.PUT, // 指定存储桶名称 Bucket: bucketName, // 指定对象名 Key: objectKey, // 指定带授权信息的URL的过期时间。 Expires: 3600, // 指定请求中携带的头域 Headers: { "Content-Type": "text/plain" } }); let uploadTask: request.UploadTask; // 指定上传的配置信息,可参考鸿蒙开发者文档https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-request-V5#uploadconfig6 let uploadConfig: request.UploadConfig = { url: result.SignedUrl, method: HttpMethodType.PUT, header: result.ActualSignedRequestHeaders, files: [{ filename: objectKey, name: "file", uri: sourceFile, type: "text/plain" }], data: [], }; try { request.uploadFile(getContext(), uploadConfig).then((data: request.UploadTask) => { uploadTask = data; uploadTask.on('progress', (uploadedSize: number, totalSize: number) => { console.info('Upload delete progress notification.' + 'totalSize:' + totalSize + 'uploadedSize:' + uploadedSize); }); let upCompleteCallback = (taskStates: Array<request.TaskState>) => { for (let i = 0; i < taskStates.length; i++) { console.info("upOnComplete taskState:" + JSON.stringify(taskStates[i])); } }; uploadTask.on('complete', upCompleteCallback); let upFailCallback = (taskStates: Array<request.TaskState>) => { for (let i = 0; i < taskStates.length; i++) { console.info("upOnFail taskState:" + JSON.stringify(taskStates[i])); } }; uploadTask.on('fail', upFailCallback); }).catch((err: BusinessError) => { console.error(`Failed to request the upload. Code: ${err.code}, message: ${err.message}`); }); } catch (err) { console.error(`Failed to request the upload. err: ${JSON.stringify(err)}`); } } putObject();  |