有時候你的文件(文檔、圖片)可能不想讓拿到雲存儲的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了。
預覽: