1. 程式人生 > >七牛雲端儲存之sign簡單實現

七牛雲端儲存之sign簡單實現

  • 概述:
    上一篇博文講解了如何從七牛的私有空間下載資原始檔到本地,那麼這篇博文,講解一下七牛雲下載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(); } }
  • 測試結果:
    這裡寫圖片描述

    瀏覽器訪問:
    這裡寫圖片描述