七牛雲端儲存之sign簡單實現
阿新 • • 發佈:2019-01-26
概述:
上一篇博文講解了如何從七牛的私有空間下載資原始檔到本地,那麼這篇博文,講解一下七牛雲下載token的實現。步驟:
1、給私有空間繫結一個自定義域名,通過該自定義域名,拼接上檔名稱,即可獲取一個baseUrl;如圖:
2、設定時間戳,java中設定Unix時間戳,其實就是獲取格林尼治時間,轉換為秒即可。
3、 簽名獲取token;
4、 拼接生成真正的downloadUrl程式碼示例如下:
package com.qiniu.kodo;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import com.qiniu.base.AccountMgr;
import com.qiniu.common.Constants;
import com.qiniu.util.UrlSafeBase64;
/**
* 個人針對七牛的私有空間檔案進行簽名
* @author xuhuanchao
*
*/
public class SignDownloadToken {
public static void main(String[] args) {
String baseUrl = "http://private.qiniuts.com/admin_1.jpg" ;
System.out.println(getDownloadUrl(baseUrl, 3600));
// Auth auth = Auth.create(AccountMgr.ACCESS_KEY, AccountMgr.SECRET_KEY);
// String realUrl = auth.privateDownloadUrl(baseUrl);
// System.out.println(realUrl);
}
/**
*
* @param baseUrl
* @param deadline
* @return
*/
public static String getDownloadUrl(String baseUrl, long deadline) {
StringBuffer downloadUrl = new StringBuffer(baseUrl);
long ts = (System.currentTimeMillis()/1000) + deadline;
downloadUrl.append("?e=" + String.valueOf(ts));
try {
Mac mac = Mac.getInstance("HmacSHA1");
byte[] sk = AccountMgr.SECRET_KEY.getBytes(Constants.UTF_8);
SecretKeySpec secretKey = new SecretKeySpec(sk, "HmacSHA1");
mac.init(secretKey);
String encodeSign = UrlSafeBase64.encodeToString(mac.doFinal(downloadUrl.toString().getBytes()));
String token = AccountMgr.ACCESS_KEY + ":" + encodeSign;
downloadUrl.append("&token=" + token);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return downloadUrl.toString();
}
}
測試結果:
瀏覽器訪問: