前不久刚参加完七牛云举办的第二届1024创作节(虽然只是我单方面的被各方大佬碾压)
赛题是网页短视频应用开发,要求作品中使用七牛云的相关产品,于是我决定分享下七牛云产品的使用(这么好用的产品很难忍住不想分享的心情😝😝😝)
主要分享下新手如何快速使用,以及仅仅进行想进行测试的小伙伴怎么使用能不产生计费,不仔细看文档随便瞎使用可能会产生计费
【温馨提示】:要使用下面的产品记得先注册账号,绑定邮箱和实名认证哦
安装SDK
七牛云很贴心的帮我们封装好了一个工具包,里面提供各种的类和方法来让我们实现快速对接、开发
<!--七牛云SDK-->
<dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>[7.7.0, 7.10.99]</version>
</dependency>
对象存储 Kodo
作用:文件存储,但不仅仅是文件存储,kodo可以跟七牛的其他多种产品结合使用,实现1+1>3的效果
首先要去kodo控制台:https://portal.qiniu.com/kodo/bucket?ref=www.qiniu.com,创建一个存储桶(bucket),bucket是存储文件的容器
点击新建空间,输入空间名称,选择一个区域,选择公开空间(私有也可以,刚入门还是公开吧,以后还能改)
创建完了bucket,就可以开始写我们可爱的代码了,咦嘻嘻嘻
先给完整demo代码,再解释含义
public class UploadToQiniu {String bucket = "bucket名";String AccessKey = "你的ak";String SecretKey = "你的sk";Auth auth = Auth.create(AccessKey, SecretKey);// 文件上传@Testpublic void uploadV2() {Configuration cfg = new Configuration(Region.region2());cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;cfg.useHttpsDomains = true;cfg.resumableUploadMaxConcurrentTaskCount = 3;String localFile = "/Users/lixianhe/Downloads/86dac233-65d5-4b38-b40f-cb23dd618489.jpg";InputStream is = null;try {is = new FileInputStream(localFile);} catch (FileNotFoundException e) {e.printStackTrace();}String key = "a.png";String upToken = auth.uploadToken(bucket, key, 3600L, null);UploadManager uploadManager = new UploadManager(cfg);Response response;try {response = uploadManager.put(is, key, upToken, null, null);// 解析上传成功的结果DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);System.out.println("key: " + putRet.key);System.out.println("hash: " + putRet.hash);} catch (QiniuException e) {System.out.println(e.response.toString());}}
}
接下来逐行解释代码
String bucket = "bucket名";
String AccessKey = "你的ak";
String SecretKey = "你的sk";
Auth auth = Auth.create(AccessKey, SecretKey);
首先:bucket就是你刚才创建存储空间的名称
那下面的ak和sk又是啥呢?怎么获取呢?
答:ak和sk是生成鉴权的,可以理解为你的账号和密码,ak和sk非常重要,不能泄露给别人,如果泄露意味着你账号的最高权限泄露,别人可以拿着你的ak和sk疯狂调用七牛的服务,而费用算在你头上,掏空你的钱包
获取ak和sk的位置在这里:https://portal.qiniu.com/developer/user/key
Auth对象生成,参数传入了ak和sk,也就是这个Auth代表着你的账号
Configuration cfg = new Configuration(Region.region2());
// 指定分片上传版本为V2
cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;
// 设置分片上传并发,1:采用同步上传;大于1:采用并发上传
cfg.resumableUploadMaxConcurrentTaskCount = 3;
这个是配置对象,创建配置对象的使用,传入参数Region.region2()
【重点】:这个region2是精髓,代表着你存储空间的所在的区域,如果填错了,会报错incorrect region
华东 | Region.region0() , Region.huadong() |
华北 | Region.region1() , Region.huabei() |
华南 | Region.region2() , Region.huanan() |
北美 | Region.regionNa0() , Region.beimei() |
东南亚 | Region.regionAs0() , Region.xinjiapo() |
String localFile = "/Users/lixianhe/Downloads/86dac233-65d5-4b38-b40f-cb23dd618489.jpg";
InputStream is = null;
try {is = new FileInputStream(localFile);
} catch (FileNotFoundException e) {e.printStackTrace();
}
这个比较容易理解,将本地文件转为字节流
String key = "a.png";
String upToken = auth.uploadToken(bucket, key, 3600L, null);
【重点】:生成上传token
我们定睛一看,这个方法是Auth对象里面的方法,也就是生成这个token需要使用ak和sk
uploadToken的四个参数分别是:bucket名称,key名称,上传的token的有效期,上传策略
bucket我们了解了,key又是啥呢?key就是全路径(目录+文件名),也就是文件在存储空间的唯一标识
第三个参数:比较好理解,你生成的上传token只在有效期内可以使用,也就是超过这个时间token失效,单位秒
第四个参数:虽然我传的是null,但是这个参数"非常非常非常强大",不详细说了,叫上传策略
详细看:https://developer.qiniu.com/kodo/1206/put-policy
UploadManager uploadManager = new UploadManager(cfg);
Response response;
try {response = uploadManager.put(is, key, upToken, null, null);// 解析上传成功的结果DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);System.out.println("key: " + putRet.key);System.out.println("hash: " + putRet.hash);} catch (QiniuException e) {System.out.println(e.response.toString());
}
创建 UploadManager 对象,传入配置类,put方法:是真正执行上传的方法
Response对象,上传请求的响应的对象
DefaultPutRet对象,上传会默认返回hash和key,通过这个对象解析hash和key
到此为止,一个文件的上传就完成了,距离年薪百万又近了一步
最后是计费方面的提醒:七牛云上传文件是不计费,但是存储量需要计费,每月10GB免费存储额度,只要不用超过10GB就不会有费用哦