android上引入七牛 上傳圖片或者文件 最終整理版本(可用)


前言:

以下是引入七牛的步驟,以及在七牛中上傳文件和獲取文件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);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM