public class UploadToken {
public static String getUploadToken(Object object){
Gson gson=new Gson();
String jsonObject=gson.toJson(object);
String encodedPutPolicy = UrlSafeBase64.encodeToString(jsonObject);
String encodedSign="";
try {
encodedSign =hmacSha1(encodedPutPolicy);
}catch (Exception e){
}
String uploadToken = QiNiuConstant.ACCESSKEY + ":" + encodedSign + ":" + encodedPutPolicy;
return uploadToken;
}
public static String hmacSha1(final String base)
throws NoSuchAlgorithmException, InvalidKeyException {
String type = "HmacSHA1";
SecretKeySpec secret = new SecretKeySpec(QiNiuConstant.SECRETKEY.getBytes(), type);
Mac mac = Mac.getInstance(type);
mac.init(secret);
byte[] digest = mac.doFinal(base.getBytes());
return Base64.encodeToString(digest, Base64.URL_SAFE);
}
其中Object的为:
public class ImagePutPolicy implements Serializable {
private String scope;
private long deadline;
private ReturnBody returnBody;
public ImagePutPolicy(String fileName) {
scope = QiNiuConstant.SAVESPACE+":"+fileName;
}
public long getDeadline() {
return deadline;
}
public void setDeadline(long deadline) {
this.deadline = System.currentTimeMillis()/1000+deadline;
}
public ReturnBody getReturnBody() {
return returnBody;
}
public void setReturnBody(ReturnBody returnBody) {
this.returnBody = returnBody;
}
}
上传代码为
private void simpleUpload() {
ImagePutPolicy putPolicy=new ImagePutPolicy(key);
putPolicy.setDeadline(3600);
token=UploadToken.getUploadToken(putPolicy);
byte[] data=new byte[]{ 0, 1, 2, 3};
uploadManager.put(data, key, token,new UpCompletionHandler() {
@Override
public void complete(String key, ResponseInfo info, JSONObject response) {
// res 包含hash、key等信息,具体字段取决于上传策略的设置。
Log.i("qiniu", key + ",\r\n " + info + ",\r\n " + response);
}
}, new UploadOptions(null, "test-type", true, null, null));
}
token不是后台生成过来的么
-----------------------------------7-29编辑-------------------------------------------------
这应该是七牛上传,所以需要安卓端生成token。如果是七牛上传,代码如下:
public String getToken() {
try {
JSONObject _json = new JSONObject();
long _dataline = System.currentTimeMillis() / 1000 + 3600;
_json.put("deadline", _dataline);// 有效时间为一个小时
_json.put("scope", "images");
String _encodedPutPolicy = UrlSafeBase64.encodeToString(_json
.toString().getBytes());
byte[] _sign = HmacSHA1Encrypt(_encodedPutPolicy, SecretKey);
String _encodedSign = UrlSafeBase64.encodeToString(_sign);
String _uploadToken = AccessKey + ':' + _encodedSign + ':'
+ _encodedPutPolicy;
return _uploadToken;
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
/**
*
* 使用 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);
}
希望对你有帮助,以上
1、第一次听说token是移动端生成的
2、不禁想问:你们的服务端在忙什么
http://www.yl1001.com/group_article/4101468381601608.htm?classic_id=6551468816785644#comment_6551468816785644
我问了一下朋友,他说一般常规做法是后端生成token。有什么问题可以在这个帖子回复问一下他