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);
}