有时候你的文件(文档、图片)可能不想让拿到云存储的url就能让用户访问,新建bucket的时候就要设置为私有读写。
此时腾讯云提供了一个【预签名URL】功能,就是通过java sdk(不用http调用腾讯云),算出来一个带有时效性的临时访问链接。
先上传一个文件做实验:
示例代码:
// 初始化永久密钥信息 String secretId = "AKIDhBOO8dyHxxxxxxVmnXgjCP"; String secretKey = "5yau0qVMyKxxxxxxxxqlR"; COSCredentials cred = new BasicCOSCredentials(secretId, secretKey); Region region = new Region("ap-nanjing"); ClientConfig clientConfig = new ClientConfig(region); // 如果要生成一个使用 https 协议的 URL,则设置此行,推荐设置。 // clientConfig.setHttpProtocol(HttpProtocol.https); // 生成 cos 客户端。 COSClient cosClient = new COSClient(cred, clientConfig); String bucketName = "nb-1301887372"; // 此处的key为对象键,对象键是对象在存储桶内的唯一标识 GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, key, HttpMethodName.GET); // 设置签名过期时间(可选), 若未进行设置, 则默认使用 ClientConfig 中的签名过期时间(1小时) // 可以设置任意一个未来的时间,推荐是设置 10 分钟到 3 天的过期时间 // 这里设置签名在半个小时后过期 Date expirationDate = new Date(System.currentTimeMillis() + 100* 24 * 60 * 60L * 1000L); req.setExpiration(expirationDate); // 填写本次请求的参数 //req.addRequestParameter("param1", "value1"); // 填写本次请求的头部。Host 头部会自动补全,不需要填写 //req.putCustomRequestHeader("header1", "value1"); URL url = cosClient.generatePresignedUrl(req); System.out.println("获取到临时访问链接======>>>> "+url.toString()); cosClient.shutdown();
生成的临时访问链接:
https://nb-1301887372.cos.ap-nanjing.myqcloud.com/XXOO.pdf?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDhBOO8dyHPGtFMDpD4fz5uBDyVmnXgjCP%26q-sign-time%3D1632379402%3B1641019402%26q-key-time%3D1632379402%3B1641019402%26q-header-list%3Dhost%26q-url-param-list%3D%26q-signature%3D7e6cda6ae43c7abda29d5b26c7a5485d2ab97663
这个链接的特点是 https://nb-1301887372.cos.ap-nanjing.myqcloud.com/XXOO.pdf?sign= 之前,不urlencode,之后的参数urlencode了。
预览: