zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    MySQL设计之三范式的理解
    git基本操作命令和安装
    MySQL 中<=>用法(长知识)
    举个栗子看如何做MySQL 内核深度优化
    我们来说一说TCP神奇的40ms
    一览js模块化:从CommonJS到ES6
    Vtiger CRM 几处SQL注入漏洞分析,测试工程师可借鉴
    做优化的数据库工程师请参考!CynosDB的计算层设计优化揭秘
    1个开发如何撑起一个过亿用户的小程序
    教你一个vue小技巧,一般人我不说的
  • 原文地址:https://www.cnblogs.com/china-soft/p/4925683.html
Copyright © 2011-2022 走看看