参考 http://developer.qiniu.com/docs/v6/api/reference/rs/fetch.html //ak,sk配置在config中 1.使用七牛相关sdk: public void fetch(){ String from = "http://ubmcmm.baidustatic.com/media/v1/0f000Q4BuusCvrTW2gnMm0.png"; String to = "aaa5:media/v1/0f000Q4BuusCvrTW2gnMm0.png"; String encodeFrom = EncodeUtils.urlsafeEncode(from); String encodeTo = EncodeUtils.urlsafeEncode(to); String url = "http://iovip.qbox.me/fetch/" + encodeFrom + "/to/" + encodeTo; mac = new com.qiniu.api.auth.digest.Mac(Config.ACCESS_KEY, Config.SECRET_KEY); Client client = new DigestAuthClient(mac); CallRet ret = client.call(url); } 2.独立代码及其相关代码,使用apache http client。(可不要 handleResult) public void fetch1() throws Exception{ String from = "http://ubmcmm.baidustatic.com/media/v1/0f000Q4BuusCvrTW2gnMm0.png"; String bucket = "aaa5"; String key = "media/v2/0f000Q4BuusCvrTW2gnMm0___.png"; fetch(from, bucket, key); } public CallRet fetch(String from, String bucket, String key) throws InvalidKeyException, NoSuchAlgorithmException, IOException{ String to = bucket + ":" + key; String encodeFrom = encodeBase64URLSafeString(from); String encodeTo = encodeBase64URLSafeString(to); String url = "http://iovip.qbox.me/fetch/" + encodeFrom + "/to/" + encodeTo; HttpClient client = Http.getClient(); HttpPost post = new HttpPost(url); String accessToken = signRequest(post, Config.SECRET_KEY, Config.ACCESS_KEY); post.setHeader("User-Agent", Config.USER_AGENT); post.setHeader("Authorization", "QBox " + accessToken); HttpResponse res = client.execute(post); CallRet ret = handleResult(res); return ret; } public static String CHARSET = "utf-8"; public static String encodeBase64URLSafeString(String p) { return encodeBase64URLSafeString(toByte(p)); } public static String encodeBase64URLSafeString(byte[] binaryData) { byte[] b = encodeBase64URLSafe(binaryData); return toString(b); } /** 保留尾部的“=” */ public static byte[] encodeBase64URLSafe(byte[] binaryData) { byte[] b = Base64.encodeBase64URLSafe(binaryData); int mod = b.length % 4; if(mod == 0){ return b; }else{ int pad = 4 - mod; byte[] b2 = new byte[b.length + pad]; System.arraycopy(b, 0, b2, 0, b.length); b2[b.length] = '='; if (pad > 1) { b2[b.length + 1] = '='; } return b2; } } public static byte[] toByte(String s){ try { return s.getBytes(CHARSET); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } public static String toString(byte[] bs){ try { return new String(bs, CHARSET); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } public static String signRequest(HttpRequestBase request, String secretKey, String accessKey) throws NoSuchAlgorithmException, InvalidKeyException, IOException { URI uri = request.getURI(); String path = uri.getRawPath(); String query = uri.getRawQuery(); byte[] sk = toByte(secretKey); javax.crypto.Mac mac = javax.crypto.Mac.getInstance("HmacSHA1"); SecretKeySpec keySpec = new SecretKeySpec(sk, "HmacSHA1"); mac.init(keySpec); mac.update(toByte(path)); if (query != null && query.length() != 0) { mac.update((byte) ('?')); mac.update(toByte(query)); } mac.update((byte) '\n'); signEntity(request, mac); byte[] digest = mac.doFinal(); byte[] digestBase64 = encodeBase64URLSafe(digest); StringBuffer b = new StringBuffer(); b.append(accessKey); b.append(':'); b.append(toString(digestBase64)); return b.toString(); } private static void signEntity(HttpRequestBase request, javax.crypto.Mac mac) throws IOException { HttpEntity entity = getEntity(request); if (entity != null) { if (needSignEntity(entity, request)) { ByteArrayOutputStream w = new ByteArrayOutputStream(); entity.writeTo(w); mac.update(w.toByteArray()); } } } private static HttpEntity getEntity(HttpRequestBase request) { try { HttpPost post = (HttpPost) request; if (post != null) { return post.getEntity(); } } catch (Exception e) { } return null; } private static boolean needSignEntity(HttpEntity entity, HttpRequestBase request) { String contentType = "application/x-www-form-urlencoded"; Header ect = entity.getContentType(); if(ect!= null && contentType.equals(ect.getValue())){ return true; } Header[] cts = request.getHeaders("Content-Type"); for(Header ct : cts){ if(contentType.equals(ct.getValue())){ return true; } } return false; } public static CallRet handleResult(HttpResponse response) { try { StatusLine status = response.getStatusLine(); int statusCode = status.getStatusCode(); String responseBody = EntityUtils.toString( response.getEntity(), CHARSET); return new CallRet(statusCode, responseBody); } catch (Exception e) { return new CallRet(400, e); } }
参考 http://developer.qiniu.com/docs/v6/api/reference/rs/fetch.html
//ak,sk配置在config中
1.使用七牛相关sdk:
public void fetch(){
String from = "http://ubmcmm.baidustatic.com/media/v1/0f000Q4BuusCvrTW2gnMm0.png";
String to = "aaa5:media/v1/0f000Q4BuusCvrTW2gnMm0.png";
String encodeFrom = EncodeUtils.urlsafeEncode(from);
String encodeTo = EncodeUtils.urlsafeEncode(to);
String url = "http://iovip.qbox.me/fetch/" + encodeFrom + "/to/" + encodeTo;
mac = new com.qiniu.api.auth.digest.Mac(Config.ACCESS_KEY, Config.SECRET_KEY);
Client client = new DigestAuthClient(mac);
CallRet ret = client.call(url);
}
2.独立代码及其相关代码,使用apache http client。(可不要 handleResult)
public void fetch1() throws Exception{
String from = "http://ubmcmm.baidustatic.com/media/v1/0f000Q4BuusCvrTW2gnMm0.png";
String bucket = "aaa5";
String key = "media/v2/0f000Q4BuusCvrTW2gnMm0___.png";
fetch(from, bucket, key);
}