有时候你的文件(文档、图片)可能不想让拿到云存储的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了。

预览: