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:看下面代码 调用方法即可.
package cn.haodehaode.utils;
import android.util.Log;
import com.qiniu.android.http.ResponseInfo;
import com.qiniu.android.storage.UpCompletionHandler;
import com.qiniu.android.storage.UploadManager;
import com.qiniu.android.utils.UrlSafeBase64;
import org.json.JSONObject;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/**
* 七牛上传工具类
*
* @author JALEN c9n9m@163.com
* @version V1.0
* @Title: ${FILE_NAME}
* @Package cn.haodehaode.utils
* @Description: ${todo}
* @date 15/10/31 15:32
*/
public class LxQiniuUploadUtils {
//七牛后台的key
private static String AccessKey = HDConstants.QN_ACCESSKEY;
//七牛后台的secret
private static String SecretKey = HDConstants.QN_SECRETKEY;
private static final String MAC_NAME = "HmacSHA1";
private static final String ENCODING = "UTF-8";
public static void uploadPic() {
String keys = CommonUtils.getTodayDate18();
String bucketName = HDConstants.BUCKET_AUTHFILE;
try {
// 1:第一种方式 构造上传策略
JSONObject _json = new JSONObject();
long _dataline = System.currentTimeMillis() / 1000 + 3600;
_json.put("deadline", _dataline);// 有效时间为一个小时
_json.put("scope", bucketName);
String _encodedPutPolicy = UrlSafeBase64.encodeToString(_json
.toString().getBytes());
byte[] _sign = HmacSHA1Encrypt(_encodedPutPolicy, SecretKey);
String _encodedSign = UrlSafeBase64.encodeToString(_sign);
String _uploadToken = AccessKey + ':' + _encodedSign + ':'
+ _encodedPutPolicy;
//此处为模拟的本地相册的一个图片
String picPath = "/storage/emulated/0/DCIM/Camera/IMG_20150924_214351.jpg";
UploadManager uploadManager = new UploadManager();
//以下api可以修改为图片地址 或者file 或者byte[]
uploadManager.put(picPath, keys, _uploadToken,
new UpCompletionHandler() {
@Override
public void complete(String key, ResponseInfo info,
JSONObject response) {
Log.e("qiniu", info.toString());
}
}, null);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 这个签名方法找了半天 一个个对出来的、、、、程序猿辛苦啊、、、 使用 HMAC-SHA1 签名方法对对encryptText进行签名
*
* @param encryptText 被签名的字符串
* @param encryptKey 密钥
* @return
* @throws Exception
*/
public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey)
throws Exception {
byte[] data = encryptKey.getBytes(ENCODING);
// 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
// 生成一个指定 Mac 算法 的 Mac 对象
Mac mac = Mac.getInstance(MAC_NAME);
// 用给定密钥初始化 Mac 对象
mac.init(secretKey);
byte[] text = encryptText.getBytes(ENCODING);
// 完成 Mac 操作
return mac.doFinal(text);
}
}