1 packagecn.haodehaode.utils;2
3 importcom.qiniu.android.http.ResponseInfo;4 importcom.qiniu.android.storage.UpCompletionHandler;5 importcom.qiniu.android.storage.UploadManager;6 importcom.qiniu.android.utils.UrlSafeBase64;7
8 importorg.json.JSONObject;9
10 importjava.net.URLEncoder;11 importjava.util.List;12
13 importjavax.crypto.Mac;14 importjavax.crypto.SecretKey;15 importjavax.crypto.spec.SecretKeySpec;16
17 importcn.haodehaode.utils.upload.UploadCallBack;18
19 /**
20 * 七牛上传工具类21 *22 *@authorJALEN c9n9m@163.com QQ:30338970 https://shop157209029.taobao.com/23 *@versionV1.024 * @Title: ${FILE_NAME}25 * @Package cn.haodehaode.utils26 * @Description: ${todo}27 * @date 15/10/31 15:3228 */
29 public classLxQiniuUploadUtils {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 *@paramdomain bucketName的名字45 *@parampath 上传文件的路径地址46 */
47 public static void uploadPic(final String domain, final String path, final String keys, finalUploadCallBack callBack) {48 try{49 //1:第一种方式 构造上传策略
50 JSONObject _json = newJSONObject();51 _json.put("deadline", delayTimes);//有效时间为一个小时
52 _json.put("scope", domain);53 String _encodedPutPolicy =UrlSafeBase64.encodeToString(_json54 .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 = newUploadManager();60 uploadManager.put(path, keys, _uploadToken,61 newUpCompletionHandler() {62 @Override63 public voidcomplete(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 *@paramencryptText 被签名的字符串82 *@paramencryptKey 密钥83 *@return
84 *@throwsException85 */
86 public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey)87 throwsException {88 byte[] data =encryptKey.getBytes(ENCODING);89 //根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
90 SecretKey secretKey = newSecretKeySpec(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 returnmac.doFinal(text);98 }99
100 /**
101 * 通过key获取上传的资源文件的全路径102 *103 *@paramkey104 *@paramdomain105 *@return
106 */
107 public staticString getFileUrl(String domain, String key) {108 String url =HdUtils.transDomai2Zone(domain);109 StringBuilder sb = newStringBuilder();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 = 1451491200117 //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 returnsb.toString();127 }128
129 }