移动应用图片的福音--七牛云存储
0
Word Count: 1,319(words)
Read Count: 6(minutes)
摘要: 本篇来介绍移动应用图片存储的第三方,官方网址:http://www.qiniu.com/ 首先,在七牛上要注册开发者账号,需要认证身份证信息。认证完之后,我们来开始进行安卓端的开发。一、准备信息 进行图片的上传与下载,我们需要准备几个信息,首先是空间名,然后是域名,再者是密钥对。如下图:二、…阅读全文
本篇来介绍移动应用图片存储的第三方,官方网址:http://www.qiniu.com/
首先,在七牛上要注册开发者账号,需要认证身份证信息。认证完之后,我们来开始进行安卓端的开发。
一、准备信息
进行图片的上传与下载,我们需要准备几个信息,首先是空间名,然后是域名,再者是密钥对。如下图:


二、安卓端图片上传
首先我们需要导入JAR包,网址:http://developer.qiniu.com/docs/v6/sdk/android-sdk.html
现在来编写上传相关的程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| private volatile boolean isCancelled = false; static String SecretKey =七牛上的私钥; UploadManager uploadManager;
uploadManager=new UploadManager(); Configuration config= new Configuration.Builder().chunkSize(256 * 1024) .putThreshhold(512 * 1024) .connectTimeout(10) .responseTimeout(60) .build(); uploadManager = new UploadManager(config);
|
初始化配置搞定了,下面来进行上传操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| String _uploadToken = getUploadToken(scope); uploadManager.put(SAVE_FILE_DIRECTORY, key, _uploadToken, new UpCompletionHandler() { @Override public void complete(String key, ResponseInfo info, JSONObject response) { Log.e("qiniu", info.toString()); Log.i("是否成功", String.valueOf(info.isOK())); } }, new UploadOptions(null, "webp", false, new UpProgressHandler() { public void progress(String key, double percent) { Log.i("qiniu", key + ": " + percent); } }, new UpCancellationSignal() { public boolean isCancelled() { return isCancelled; } }) );
|
在上传的操作中唯一需要我们头疼的就是_uploadToken,下面来介绍如何生成一个_uploadToken令牌信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| public String getUploadToken(String scope) { JSONObject json = new JSONObject(); long dataline = System.currentTimeMillis() / 1000 + 3600; String uploadToken = null; try { json.put("deadline", dataline); json.put("scope", scope); String encodedPutPolicy = UrlSafeBase64.encodeToString(json.toString().getBytes()); byte[] sign = HmacSHA1Encrypt(encodedPutPolicy, SecretKey); String encodedSign = UrlSafeBase64.encodeToString(sign); uploadToken = AccessKey + ':' + encodedSign + ':' + encodedPutPolicy; } catch (JSONException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return uploadToken; }
private static final String MAC_NAME = "HmacSHA1"; private static final String ENCODING = "UTF-8";
private byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception { byte[] data = encryptKey.getBytes(ENCODING); SecretKey secretKey = new SecretKeySpec(data, MAC_NAME); Mac mac = Mac.getInstance(MAC_NAME); mac.init(secretKey); byte[] text = encryptText.getBytes(ENCODING); return mac.doFinal(text); }
|
好了现在我们就可以成功上传了。
三、编写其他操作
1、取消操作
1 2 3 4 5 6
|
public void cancell() { isCancelled = true; }
|
2、删除操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
public boolean deleteFile(String bucket, String fileName) { try { String entryUrl = bucket + ":" + fileName; String encodedEntryURI = UrlSafeBase64.encodeToString(entryUrl.getBytes()); String host = "http://rs.qiniu.com"; String path = "/delete/" + encodedEntryURI; String url = host + path; byte[] sign = HmacSHA1Encrypt(path + "\n", SecretKey); String encodedSign = UrlSafeBase64.encodeToString(sign); String authorization = AccessKey + ':' + encodedSign; HttpClient httpClient = new DefaultHttpClient(); HttpPost mothod = new HttpPost(url); mothod.setHeader("Content-Type", "application/x-www-form-urlencoded"); mothod.setHeader("Authorization", "QBox " + authorization); httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 20000); httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 20000); HttpResponse response = httpClient.execute(mothod); StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); if (statusCode == HttpStatus.SC_OK) { Log.e("删除结果", "successful"); return true; } } catch (Exception e) { e.printStackTrace(); } Log.e("删除结果", "false"); return false; }
|
好了,暂时就先到这里,虽然进行了一些封装,但是对自己的封装不很满意所以暂时不发了,以后封装完善了再发吧,这些已经足够新手理解了。下篇介绍获取网络图片并显示。主要用到目前最好的图片加载框架ImageLoad。