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);
}
posted @ 2015-10-31 16:05  北京刘星  阅读(2481)  评论(4编辑  收藏  举报