前言:

以下是引入七牛的步骤,以及在七牛中上传文件和获取文件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:看下面代码 调用方法即可.

 package cn.haodehaode.utils;

 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 java.net.URLEncoder;
import java.util.List; import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; import cn.haodehaode.utils.upload.UploadCallBack; /**
* 七牛上传工具类
*
* @author JALEN c9n9m@163.com QQ:30338970 https://shop157209029.taobao.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"; //unix时间戳:2065-12-31 00:00:00
private static long delayTimes = 3029414400l; /**
* 上传
*
* @param domain bucketName的名字
* @param path 上传文件的路径地址
*/
public static void uploadPic(final String domain, final String path, final String keys, final UploadCallBack callBack) {
try {
// 1:第一种方式 构造上传策略
JSONObject _json = new JSONObject();
_json.put("deadline", delayTimes);// 有效时间为一个小时
_json.put("scope", domain);
String _encodedPutPolicy = UrlSafeBase64.encodeToString(_json
.toString().getBytes());
byte[] _sign = HmacSHA1Encrypt(_encodedPutPolicy, SecretKey);
String _encodedSign = UrlSafeBase64.encodeToString(_sign);
final String _uploadToken = AccessKey + ':' + _encodedSign + ':'
+ _encodedPutPolicy;
UploadManager uploadManager = new UploadManager();
uploadManager.put(path, keys, _uploadToken,
new UpCompletionHandler() {
@Override
public void complete(String key, ResponseInfo info,
JSONObject response) {
if (info.isOK()) {
String urls = getFileUrl(domain, keys);
callBack.success(urls);
} else
callBack.fail(key, info);
}
}, 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);
} /**
* 通过key获取上传的资源文件的全路径
*
* @param key
* @param domain
* @return
*/
public static String getFileUrl(String domain, String key) {
String url = HdUtils.transDomai2Zone(domain);
StringBuilder sb = new StringBuilder();
sb.append(url);
try {
//1:构造URL
String encode = URLEncoder.encode(key, "UTF-8");
sb.append(encode);
//2:为url加上过期时间 unix时间
sb.append("?e=" + delayTimes);//delayTimes = 1451491200
//3:对1 2 操作后的url进行hmac-sha1签名 secrect
String s = sb.toString();
byte[] bytes = HmacSHA1Encrypt(s, SecretKey);
String sign = UrlSafeBase64.encodeToString(bytes);
//4:将accsesskey 连接起来
sb.append("&token=" + AccessKey + ":" + sign);
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
} }

public  interface UploadCallback{
void sucess(String url);
void fail(String key,ResonseInfo info);
}

android上引入七牛 上传图片或者文件 最终整理版本(可用)的更多相关文章

  1. 七牛php-sdk使用-文件上传

    使用七牛进行文件上传可以有多种方式: 直接form表单上传,需要自己按照文档做配置 使用七牛jssdk,部署较简单,大文件分片上传 php-sdk后台上传 首先,所有的上传方法以及所有的跟七牛接口相关 ...

  2. vue-element:文件上传七牛之key和异步的问题

    效果图: html 代码: <el-form-item label="Excel文件" :label-width="formLabelWidth" pro ...

  3. nodejs+phantomjs+七牛 实现截屏操作并上传七牛存储

    近来研究了下phantomjs,只是初涉,还谈不上深入研究,首先介绍下什么是phantomjs. 官网上的介绍是:”PhantomJS is a headless WebKit scriptable ...

  4. MWEB+七牛 上传图片

    MWEB+七牛 上传图片 博客之前的图片也都用的七牛,但编辑和上传分离还是很麻烦,所以一直很心水meb, 上周mweb降到¥50,感觉短期内应该不会再降了,于是果断入手,今天在和使用图床功能遇到了一些 ...

  5. 七牛上传图片视频demo

    /引入Plupload .qiniu.js后 varuploader = Qiniu.uploader({ runtimes:'html5,flash,html4',//上传模式,依次退化 brows ...

  6. PHP系列 | Thinkphp3.2 上传七牛 bad token 问题 [ layui.upload 图片/文件上传]

    前端代码 <div class="logo_out" id="upload-logo"></div> JS代码 /** * 上传图片 * ...

  7. java 七牛上传图片到服务器(采用的html5 压缩 传输base64方式)

    //html 页面如下<div class="form-group"> <label class="col-sm-2 control-label&quo ...

  8. php base64编码图片上传七牛

    上网上找了好几个例子 都是自己写curl上传 感觉七牛这么多年了不应该sdk不提供一个方法 然后试 试 试 显示put 方式 上传上去 就是个字符串 后来换成文件上传方法 putFile 成了 不废话 ...

  9. yii2上传七牛图片(超详细)

    前期准备 1.在七牛注册账号https://portal.qiniu.com/signup/choice 2.创建空间https://portal.qiniu.com/bucket(记住存储空间名称和 ...

随机推荐

  1. jquery 监听input输入值事件

    <html> <head> <title></title> <script type="text/javascript" sr ...

  2. 动态代理模式和AOP探究

    java强大的反射机制给动态代理带来了可能.能够自由穿梭在类与方法之间.简直神通广大. 动态代理的一个小例子,顺便看看神奇的AOP是如何实现的.代码如下: 首先声明的是一个接口Dog类 package ...

  3. day10---异步I/O,gevent协程

    协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来 ...

  4. 【摘】【网络】无线AP与无线路由器有什么区别?

    参考网站: 1.无线上网百科 http://wifi.baike.com/article-290204.html 图片 1 今天我们从功能.应用.组网和成本四个方面为大家区分无线路由器和无线AP.当前 ...

  5. arm v5,v6,v7?

    http://blog.csdn.net/woshi_ziyu/article/details/7946862

  6. Linux内核--网络栈实现分析(四)--网络层之IP协议(上)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7514017 更多请看专栏,地址 ...

  7. hdu 4193 - Non-negative Partial Sums(滚动数列)

    题意: 给定一个由n个整数组成的整数序列,可以滚动,滚动的意思就是前面k个数放到序列末尾去.问有几种滚动方法使得前面任意个数的和>=0. 思路: 先根据原来的数列求sum数组,找到最低点,然后再 ...

  8. 从MySQL5.7.6开始,安装MySQL提示“请键入 NET HELPMSG 3534 以获得更多的帮助”的解决办法

    今天安装MySQL提示如下错误: ----------------------------------------------------------------------------------- ...

  9. App开发如何利用Fidder,在api接口还没有实现的情况下模拟数据,继续开发

    相信app开发很多时候,都是等后台出接口,拿到数据调试错误.殊不知,我们完全可以不用等,只要有约定好的接口定义文档,借助工具就能做到,自己模拟数据返回~      下面主要是在项目组开发过程中,使用F ...

  10. Caused by: java.lang.UnsatisfiedLinkError...解决经历

    Caused by: java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapVOS_v2_1_3: findLibrary returned nu ...