有奖捉虫:行业应用 & 管理与支持文档专题 HOT

简介

对象存储(Cloud Object Storage,COS)支持使用预签名 URL 进行对象的上传、下载,原理是将签名嵌入 URL 生成签名链接。您可以通过签名的有效期,控制预签名 URL 的生效时间。本文档提供关于生成对象预签名链接的示例代码。
生成预签名 URL 支持使用永久密钥或临时密钥。
使用永久密钥来生成预签名,注意遵循最小权限原则,权限范围仅限于上传或下载操作,并且合理设置签名生效时长。
使用 临时密钥 生成预签名,可以通过临时授权的方式进一步提高预签名上传、下载等请求的安全性。申请临时密钥时,请遵循 最小权限指引原则,防止泄露目标存储桶或对象之外的资源。
获取签名/预签名函数,默认签入 Header Host;您也可以选择不签入 Header Host,但可能导致请求失败或安全漏洞。

使用方法

关于使用预签名 URL 上传的说明请参见 预签名授权上传
使用预签名 URL 下载的说明请参见 预签名授权下载

注意事项

当存储桶为私有读写时,请求对象时需携带签名用于身份验证,也就是 临时密钥
如您使用的存储桶权限为公有读,请求对象时无需携带签名,可直接通过链接访问对象。
临时密钥生成的预签名 URL,其过期时间由临时密钥和预签名 URL 两个的过期时间共同限制,当其中任何一个时间到期,临时密钥生成的预签名 URL 都会到期。

通过 COSClient 生成预签名 URL

创建 COSClient

执行任何和 COS 服务相关请求之前,都需要生成 COSClient 类的对象,COSClient 实例是并发安全的,这里推荐一个进程只创建一个 COSClient 实例,当不会再通过这个实例发起请求的时候,再选择关闭这个实例。

生成预签名 URL

此部分代码是通用性示例。
方法原型
public URL generatePresignedUrl(String bucketName, String key, Date expiration, HttpMethodName method, Map<String, String> headers, Map<String, String> params, Boolean signPrefixMode, Boolean signHost) throws CosClientException
请求示例
// 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:创建 COSClient
COSClient cosClient = createCOSClient();
?
// 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
String bucketName = "examplebucket-1250000000";
// 对象键(Key)是对象在存储桶中的唯一标识。详情请参见 [对象键](/document/product/436/13324)
String key = "exampleobject";
?
// 设置签名过期时间(可选), 若未进行设置则默认使用 ClientConfig 中的签名过期时间(1小时)
// 这里设置签名在半个小时后过期
Date expirationDate = new Date(System.currentTimeMillis() + 30 * 60 * 1000);
?
// 填写本次请求的参数,需与实际请求相同,能够防止用户篡改此签名的 HTTP 请求的参数
Map<String, String> params = new HashMap<String, String>();
params.put("param1", "value1");
?
// 填写本次请求的头部,需与实际请求相同,能够防止用户篡改此签名的 HTTP 请求的头部
Map<String, String> headers = new HashMap<String, String>();
headers.put("header1", "value1");
?
// 请求的 HTTP 方法,上传请求用 PUT,下载请求用 GET,删除请求用 DELETE
HttpMethodName method = HttpMethodName.GET;
?
URL url = cosClient.generatePresignedUrl(bucketName, key, expirationDate, method, headers, params);
System.out.println(url.toString());
?
// 确认本进程不再使用 cosClient 实例之后,关闭即可
cosClient.shutdown();
参数说明
参数名称
描述
类型
是否必填
method
HTTP 方法,可选:GET、POST、PUT、DELETE、HEAD
HttpMethodName
bucketName
存储桶名称,存储桶的命名格式为 BucketName-APPID,详情请参见 命名规范?
String
key
对象键(Key)是对象在存储桶中的唯一标识,详情请参见 对象键注意:用户无需对key进行编码操作
String
expiration
签名过期的时间,可以设置任意一个未来的时间,不设置则默认是1小时之后过期
Date
headers
签名头部
Map<String, String>
params
签名参数
Map<String, String>
signPrefixMode
是否以 sign 参数指定签名(不推荐),默认 false
boolean
signHost
是否签入 Host 头部(推荐),默认 true
boolean

使用示例

?

生成签名后拼接预签名 URL

构造 COS 请求的签名。生成后需拼接完整的 URL。推荐使用临时密钥来生成签名。

?

常见问题

使用自定义域名时,如何生成预签名 URL?

您可以通过在使用 SDK 初始化时,指定对应的自定义源站域名,从而实现在生成预签名URL时进行指定自定义域名功能需求,例如 JavaSDK
初始化完成之后,然后实现 生成预签名URL
?
?


http://www.vxiaotou.com