@big-bear
2016-12-14T10:43:34.000000Z
字数 7802
阅读 2331
服务器
七牛云存储是一家数据管理平台,专门为互联网网站和移动App提供数据的在线托管、传输加速以及图片、音视频等富媒体的云处理服务。
Access Key 与 Secret Key 是七牛颁发的一对密钥,用于对操作请求进行授权签名.类似于用户名和密码,七牛通过这两个字段来确保用户的唯一性,每个账号完成申请后都可以在七牛网站里找到.
资源与key(键名)
- 资源作为七牛云存储服务中基础的逻辑存储的单元(可以理解为文件).
- 键名key可以理解为资源的文件名,在同一个bucket中每个资源的key是唯一的.
- 在七牛云中没有文件夹的概念,所以可以用key来区分目录的层次结构,比如"wisdomhr/web/src/webapp/index.html".
- 七牛云支持key中加入"/",".","-"等字符,用户的角度看没有文件拓展名的.
bucket(空间)和domain(域名)
- 资源的组织管理单位,一个资源必须存放在一个空间里.
- bucket+key可以确定一个资源的唯一性.
- 每个bucket会对应一个唯一的domain(域名),在下载的时候通过域名来访问相应的bucket
- 每个bucket作为上传和下载的基础,即上传或者下载资源都是指定到bucket(或者bucket对应的domain).
- 用户可以对每个bucket进行不同的配置,包括访问权限、数据处理、域名设置等。
- bucket分为公有空间与私有空间。下载的时候公有空间里的资源可以通过url直接下载,但是私用空间的必须在URL上带上一个token作为下载凭证
- 一个账号默认情况下可以拥有20个空间.
在上传和下载过程中,开发者或者用户需要生成一个token,这个token会作为请求内容的一部分,如果不带凭证或者带非法凭证就是现实认证失败,无法完成相关的操作.


maven引入七牛SDK的jar包:
<dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>[7.0.0, 7.0.99]</version></dependency>
public static final String QINIU_ACCESS_KEY = "sdPLhMYbhzwHYrwFaLL4C--Af9s_D4EdpambxYXc";public static final String QINIU_SECRET_KEY = "YHLh47oVdi4k7smL83WHtCzbFUfz80jQrNBK9BRq";//AccessKey与SecretKey来确定了账号的唯一性public static final String QINIU_DOMAIN_PRIVATE = "http://7xsnwy.com2.z0.glb.qiniucdn.com";public static final String QINIU_BUCKET_PRIVATE = "wisdomhr-pc";//每个Bucket都会对应一个Domainpublic static final String QINIU_DOMAIN_PUBLIC = "http://7xso5g.com2.z0.glb.qiniucdn.com";public static final String QINIU_BUCKET_PUBLIC = "wisdomhr-pc-public";
public class UploadDemo {// 设置好账号的ACCESS_KEY和SECRET_KEYString ACCESS_KEY = Constants.QINIU_ACCESS_KEY;String SECRET_KEY = Constants.QINIU_SECRET_KEY;// 要上传的空间String bucketName = "bigbear";// 上传到七牛后保存的文件名String key = "test/bigbear.jpg";// 上传文件的路径String FilePath = "E:\\40.jpg";// 密钥配置Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);// 创建上传对象UploadManager uploadManager = new UploadManager();public String getUpToken() {return auth.uploadToken(bucketName,3600);//3600为token的有效时间,单位ms;在这里只设置bucketName的话,可以上传任意名称的资源,但是如果资源的key重复了的话会上传失败//return auto.uploadToken(bucketName,key,3600);如果设置了bucketName和key两个参数的话,必须上传资源的key就固定了,这样如果七牛云上没有相同key名的话就会创建一个,如果有相同key的资源的话会覆盖掉七牛云上原有的文件.// return auth.uploadToken(bucketname, key, 3600, new StringMap().put("insertOnly", 1 ));//如果同时设置了insertOnly,上传以后这个文件不会允许修改,也不会发生覆盖.}public void upload() throws IOException {try {// 调用put方法上传Response res = uploadManager.put(FilePath, key, getUpToken());// 打印返回的信息System.out.println(res.bodyString());} catch (QiniuException e) {Response r = e.response;// 请求失败时打印的异常的信息System.out.println(r.toString());try {// 响应的文本信息System.out.println(r.bodyString());} catch (QiniuException e1) {// ignore}}}public static void main(String args[]) throws IOException {new UploadDemo().upload();}
public class DownloadDemo {// 设置好账号的ACCESS_KEY和SECRET_KEYString ACCESS_KEY = Constants.QINIU_ACCESS_KEY;String SECRET_KEY = Constants.QINIU_SECRET_KEY;// 密钥配置Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);// 构造私有空间的需要生成的下载的链接String URL = Constants.QINIU_DOMAIN_PRIVATE + "/test/bigbear.jpg";public void download() {// 调用privateDownloadUrl方法生成下载链接,第二个参数可以设置Token的过期时间String downloadRUL = auth.privateDownloadUrl(URL, 3600);}public static void main(String args[]) {new DownloadDemo().download();}}
这是一个覆盖上传的demo
namespace ConsoleDemo{class UploadDemo{private void upload(){//设置账号的AK和SKQiniu.Conf.Config.ACCESS_KEY = "Access_Key";Qiniu.Conf.Config.SECRET_KEY = "Secret_Key";IOClient target = new IOClient();PutExtra extra = new PutExtra();//设置上传的空间String bucket = "bucket_name";//设置上传的文件的key值String key = "yourdefinekey";//覆盖上传,<bucket>:<key>,表示只允许用户上传指定key的文件。在这种格式下文件默认允许“修改”,已存在同名资源则会被本次覆盖。PutPolicy put = new PutPolicy(bucket+":"+key, 3600);//设置callbackUrl以及callbackBody,七牛将文件名和文件大小回调给业务服务器put.CallBackUrl = "http://your.domain.com/callback";put.CallBackBody = "filename=$(fname)&filesize=$(fsize)";//调用Token()方法生成上传的Tokenstring upToken = put.Token();//上传文件的路径String filePath = "/.../...";//调用PutFile()方法上传PutRet ret = target.PutFile(upToken, key, filePath, extra);//打印出相应的信息Console.WriteLine(ret.Response.ToString());Console.WriteLine(ret.key);Console.ReadLine();}static void Main(string[] args){//实例化UploadDemo对象并调用设置的upload方法UploadDemo Upload = new UploadDemo();Upload.upload();}}}
下载的demo
namespace ConsoleDemo{class Download{public static void download(){//设置需要操作的账号的AK和SKQiniu.Conf.Config.ACCESS_KEY = "Access_Key";Qiniu.Conf.Config.SECRET_KEY = "Secret_Key";//构造私有空间的需要生成的下载的链接string baseUrl = "http://bucketdomain/key";//调用MakeRequest方法生成私有下载链接string private_url = GetPolicy.MakeRequest(baseUrl);Console.WriteLine(private_url);Console.ReadLine();}static void Main(string[] args){Download.download();}}}
plupload.full.min.js,qiniu.js
七牛SDK依赖于plupload.full.min.js
js
define([
'jquery',
'bootstrap',
'plupload',
'zh_CN',
'qiniuUi',
'qiniu',
'highlight',
'wutil'
],
function($,bootstrap,plupload,zh_CN,qiniu,qiniuUi,highlight,wutil) {
var utils={
domain:'http://7xrfjz.com1.z0.glb.clouddn.com',
// domain:'http://7xsnwy.com2.z0.glb.qiniucdn.com',
//上传图片
// options{
// uploadNum:2 //涉及到一个页面多个上传空间的时候,输入上传位置的序号
// browse_button:'upload',//上传选择的点选按钮,**必需**
// uptoken_url:'xxx/xxx?xx=xxx',//获取上传的token的url
// FileUploaded:function(up, file, info){ // 每个文件上传成功后,处理相关的事情
// var sourceLink = domain + res.key; //获取上传成功后的文件的Url
// },
// 'BeforeUpload': function(up, file) {
// // 每个文件上传前,处理相关的事情
// },
// 'UploadProgress': function(up, file) {
// // 每个文件上传时,处理相关的事情
// },
// 'Error': function(up, err, errTip) {
// //上传出错时,处理相关的事情
// },
// 'UploadComplete': function() {
// //队列文件处理完毕后,处理相关的事情
// },
// 'Key': function(up, file) {
// // 若想在前端对每个文件的key进行个性化处理,可以配置该函数
// var key = "";
// // do something with key here
// return key
// }
// }
qiniuUploadPic:function(options){
/*调用七牛的JS-sdk,部分参数已经忽略,有疑问的话可以查询:https://github.com/qiniu/js-sdk/*/
var qiniuOptions={
runtimes: 'html5,flash,html4',
browse_button: options.browse_button,//必填
max_file_size: '5mb',
dragdrop: false,//是否拖拽上传
// drop_element: 'container',//否
//chunk_size: '4mb',//分块上传每块的体积
// container:'container',
uptoken_url:options.uptoken_url,
domain: this.domain,
get_new_uptoken: false,
downtoken_url: options.downtoken_url,
//'/api/v1/qiniu/download-url?fileName=attached/student',
auto_start: true,//选择文件后自动上传
log_level: 5,
init: {
'FilesAdded': function(up, files) {
},
'BeforeUpload':options.BeforeUpload,
'UploadProgress':options.UploadProgress,
'UploadComplete': options.UploadComplete,
'FileUploaded': options.FileUploaded,
'Error':options.Error,
'Key':options.Key
}
}
var QiniuArray = new Array();
var uploaderArray=new Array();
if(options.uploadNum){
QiniuArray[options.uploadNum]=new QiniuJsSDK();
uploaderArray[options.uploadNum]=QiniuArray[options.uploadNum].uploader(qiniuOptions);
}else {
var uploader = Qiniu.uploader(qiniuOptions);//加载页面的时候会初始化这个函数,,当点击上传ID绑定的按钮的时候就会触发上传事件.
}
},
}
};//end utils
return utils;
});
html页面
html
<div class="upload-file-wrap"><input name="isQiniuLogo" type="hidden" value="{{isQiniuLogo}}"><input name="portrait" type="hidden" value="{{portrait}}"><input type="hidden" name="localLogoPath" value="" disabled><!-- <a class="hidden" data-purpose="upload"></a> --><input id="logoUpload" name="upload" title="支持jpg、jpeg、gif、png格式,文件小于10M" type="file"></div>