前言:
以下是引入七牛的步驟,以及在七牛中上傳文件和獲取文件private 私密地址.
生成上傳憑證和獲取下載憑證
具體如果使用過程有什么疑問可以加QQ(備注:七牛問題).
1:導入相關的包(注意是4個哦)
compile files('libs/android-async-http-1.4.9.jar')
compile files('libs/qiniu-android-sdk-7.0.9.jar')
compile files('libs/happy-dns-0.2.4.jar')
compile files('libs/httpclient-4.3.6.jar')
2:看下面代碼 調用方法即可.
1 package cn.haodehaode.utils; 2 3 import com.qiniu.android.http.ResponseInfo; 4 import com.qiniu.android.storage.UpCompletionHandler; 5 import com.qiniu.android.storage.UploadManager; 6 import com.qiniu.android.utils.UrlSafeBase64; 7 8 import org.json.JSONObject; 9 10 import java.net.URLEncoder; 11 import java.util.List; 12 13 import javax.crypto.Mac; 14 import javax.crypto.SecretKey; 15 import javax.crypto.spec.SecretKeySpec; 16 17 import cn.haodehaode.utils.upload.UploadCallBack; 18 19 /** 20 * 七牛上傳工具類 21 * 22 * @author JALEN c9n9m@163.com QQ:30338970 https://shop157209029.taobao.com/ 23 * @version V1.0 24 * @Title: ${FILE_NAME} 25 * @Package cn.haodehaode.utils 26 * @Description: ${todo} 27 * @date 15/10/31 15:32 28 */ 29 public class LxQiniuUploadUtils { 30 //七牛后台的key 31 private static String AccessKey = HDConstants.QN_ACCESSKEY; 32 //七牛后台的secret 33 private static String SecretKey = HDConstants.QN_SECRETKEY; 34 35 private static final String MAC_NAME = "HmacSHA1"; 36 private static final String ENCODING = "UTF-8"; 37 38 //unix時間戳:2065-12-31 00:00:00 39 private static long delayTimes = 3029414400l; 40 41 /** 42 * 上傳 43 * 44 * @param domain bucketName的名字 45 * @param path 上傳文件的路徑地址 46 */ 47 public static void uploadPic(final String domain, final String path, final String keys, final UploadCallBack callBack) { 48 try { 49 // 1:第一種方式 構造上傳策略 50 JSONObject _json = new JSONObject(); 51 _json.put("deadline", delayTimes);// 有效時間為一個小時 52 _json.put("scope", domain); 53 String _encodedPutPolicy = UrlSafeBase64.encodeToString(_json 54 .toString().getBytes()); 55 byte[] _sign = HmacSHA1Encrypt(_encodedPutPolicy, SecretKey); 56 String _encodedSign = UrlSafeBase64.encodeToString(_sign); 57 final String _uploadToken = AccessKey + ':' + _encodedSign + ':' 58 + _encodedPutPolicy; 59 UploadManager uploadManager = new UploadManager(); 60 uploadManager.put(path, keys, _uploadToken, 61 new UpCompletionHandler() { 62 @Override 63 public void complete(String key, ResponseInfo info, 64 JSONObject response) { 65 if (info.isOK()) { 66 String urls = getFileUrl(domain, keys); 67 callBack.success(urls); 68 } else 69 callBack.fail(key, info); 70 } 71 }, null); 72 } catch (Exception e) { 73 e.printStackTrace(); 74 } 75 } 76 77 78 /** 79 * 使用 HMAC-SHA1 簽名方法對對encryptText進行簽名 80 * 81 * @param encryptText 被簽名的字符串 82 * @param encryptKey 密鑰 83 * @return 84 * @throws Exception 85 */ 86 public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) 87 throws Exception { 88 byte[] data = encryptKey.getBytes(ENCODING); 89 // 根據給定的字節數組構造一個密鑰,第二參數指定一個密鑰算法的名稱 90 SecretKey secretKey = new SecretKeySpec(data, MAC_NAME); 91 // 生成一個指定 Mac 算法 的 Mac 對象 92 Mac mac = Mac.getInstance(MAC_NAME); 93 // 用給定密鑰初始化 Mac 對象 94 mac.init(secretKey); 95 byte[] text = encryptText.getBytes(ENCODING); 96 // 完成 Mac 操作 97 return mac.doFinal(text); 98 } 99 100 /** 101 * 通過key獲取上傳的資源文件的全路徑 102 * 103 * @param key 104 * @param domain 105 * @return 106 */ 107 public static String getFileUrl(String domain, String key) { 108 String url = HdUtils.transDomai2Zone(domain); 109 StringBuilder sb = new StringBuilder(); 110 sb.append(url); 111 try { 112 //1:構造URL 113 String encode = URLEncoder.encode(key, "UTF-8"); 114 sb.append(encode); 115 //2:為url加上過期時間 unix時間 116 sb.append("?e=" + delayTimes);//delayTimes = 1451491200 117 //3:對1 2 操作后的url進行hmac-sha1簽名 secrect 118 String s = sb.toString(); 119 byte[] bytes = HmacSHA1Encrypt(s, SecretKey); 120 String sign = UrlSafeBase64.encodeToString(bytes); 121 //4:將accsesskey 連接起來 122 sb.append("&token=" + AccessKey + ":" + sign); 123 } catch (Exception e) { 124 e.printStackTrace(); 125 } 126 return sb.toString(); 127 } 128 129 }
public interface UploadCallback{
void sucess(String url);
void fail(String key,ResonseInfo info);
}