七牛关于Node.js SDK的各种Demo

具体可以参考七牛PHP SDK的源码以及官网使用文档:
https://github.com/qiniu/nodejs-sdk.v6
http://developer.qiniu.com/docs/v6/sdk/nodejs-sdk.html

文件上传

上传代码

var qiniu = require("qiniu");

//需要填写你的 Access Key 和 Secret Key
qiniu.conf.ACCESS_KEY = 'Access_Key';
qiniu.conf.SECRET_KEY = 'Secret_Key';

//要上传的空间
bucket = 'Bucket_Name';

//上传到七牛后保存的文件名
key = 'my-nodejs-logo.png';

//构建上传策略函数
function uptoken(bucket, key) {
  var putPolicy = new qiniu.rs.PutPolicy(bucket+":"+key);
  return putPolicy.token();
}

//生成上传 Token
token = uptoken(bucket, key);

//要上传文件的本地路径
filePath = './ruby-logo.png'

//构造上传函数
function uploadFile(uptoken, key, localFile) {
  var extra = new qiniu.io.PutExtra();
    qiniu.io.putFile(uptoken, key, localFile, extra, function(err, ret) {
      if(!err) {
        // 上传成功, 处理返回值
        console.log(ret.hash, ret.key, ret.persistentId);       
      } else {
        // 上传失败, 处理返回代码
        console.log(err);
      }
  });
}

//调用uploadFile上传
uploadFile(token, skey, filePath);

上传&回调

var qiniu = require("qiniu");

//需要填写你的 Access Key 和 Secret Key
qiniu.conf.ACCESS_KEY = 'Access_Key';
qiniu.conf.SECRET_KEY = 'Secret_Key';

//要上传的空间
bucket = 'Bucket_Name';

//上传到七牛后保存的文件名
key = 'my-nodejs-logo.png';

//构建上传策略函数,设置回调的url以及需要回调给业务服务器的数据
function uptoken(bucket, key) {
  var putPolicy = new qiniu.rs.PutPolicy(bucket+":"+key);
  putPolicy.callbackUrl = 'http://your.domain.com/callback';
  putPolicy.callbackBody = 'filename=$(fname)&filesize=$(fsize)';
  return putPolicy.token();
}

//生成上传 Token
token = uptoken(bucket, key);

//要上传文件的本地路径
filePath = './nodejs-logo.png'

//构造上传函数
function uploadFile(uptoken, key, localFile) {
  var extra = new qiniu.io.PutExtra();
    qiniu.io.putFile(uptoken, key, localFile, extra, function(err, ret) {
      if(!err) {
        // 上传成功, 处理返回值
        console.log(ret.hash, ret.key, ret.persistentId);       
      } else {
        // 上传失败, 处理返回代码
        console.log(err);
      }
  });
}

//调用uploadFile上传
uploadFile(token, skey, filePath);

上传&预转持续化(以视频转码为例)

var qiniu = require("qiniu");

//需要填写你的 Access Key 和 Secret Key
qiniu.conf.ACCESS_KEY = 'Access_Key';
qiniu.conf.SECRET_KEY = 'Secret_Key';

//要上传的空间
bucket = 'Bucket_Name';

//上传到七牛后保存的文件名
key = 'my-nodejs.mp4';

//转码是使用的队列名称。 
pipeline = 'abc' #设定自己账号下的pipleline

//要进行转码的转码操作。 
fops = "avthumb/mp4/s/640x360/vb/1.25m"

//可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当间。
saveas_key = qiniu.util.urlsafeBase64Encode(目标Bucket_Name:自定义文件key); 
fops = fops+'|saveas/'+saveas_key;;

//上传策略中设置pipeline以及fops
function uptoken(bucket, key) {
  var putPolicy = new qiniu.rs.PutPolicy(bucket+":"+key);
  putPolicy.persistentOps = fops;
  putPolicy.persistentPipeline = pipleline;
  return putPolicy.token();
}

//生成上传 Token
token = uptoken(bucket, key);

//要上传文件的本地路径
filePath = './nodejs.mp4'

//构造上传函数
function uploadFile(uptoken, key, localFile) {
  var extra = new qiniu.io.PutExtra();
    qiniu.io.putFile(uptoken, key, localFile, extra, function(err, ret) {
      if(!err) {
        // 上传成功, 处理返回值
        console.log(ret.hash, ret.key, ret.persistentId);       
      } else {
        // 上传失败, 处理返回代码
        console.log(err);
      }
  });
}

//调用uploadFile上传
uploadFile(token, skey, filePath);


注:上面的Demo只是针对视频转码,如果需要别的功能比如音视频切片、视频截图、视频拼接只需要修改下上面的fops后面的参数就可以了,
eg: fops = 'vframe/jpg/offset/1/w/480/h/360/rotate/90'就表示视频截图了。
下面给出一些常见的数据处理功能,可以根据需要进行选择:
// ------------------图片缩放-------------------
fops ='imageView/2/w/200/h/200';

// ------------------视频转码-------------------
fops ='avthumb/avi/s/500x600';

// ------------------图片水印-------------------
base64URL = qiniu.util.urlsafeBase64Encode('http://developer.qiniu.com/resource/logo-2.jpg');
fops = 'watermark/1/image/'+base64URL;

// ------------------视频切片-------------------
fops = 'avthumb/m3u8/segtime/10/s/500x600';

// ------------------文档转换-------------------
fops = 'yifangyun_preview';

// ------------------视频截图-------------------
fops = 'vframe/jpg/offset/1/w/480/h/360/rotate/90';

//------------------视频拼接-------------------
//拼接视频片段时要保证所有源的画面长宽值一致
//除去作为数据处理对象的源文件以外,还可以指定最多5个源文件(即总计6个片段)
//所有源文件必须属于同一存储空间
//格式:avconcat/<Mode>/format/<Format>/<encodedUrl0>/<encodedUrl1>/<encodedUrl2>/...
encodedUrl1 = qiniu.util.urlsafeBase64Encode('http://7xl4c9.com1.z0.glb.clouddn.com/pingjie2.flv');
encodedUrl2 = qiniu.util.urlsafeBase64Encode('http://7xl4c9.com1.z0.glb.clouddn.com/pingjie3.avi');
fops = 'avconcat/2/format/mp4/'+encodedUrl1+'/'+encodedUrl2;

//------------------多文件压缩-------------------
//可将若干七牛空间中的资源文件,在七牛服务端压缩后存储
//格式:mkzip/<mode>/url/<Base64EncodedURL>/alias/<Base64EncodedAlias>/url/<Base64EncodedURL>
encodedfile1 = qiniu.util.urlsafeBase64Encode('http://7xl4c9.com1.z0.glb.clouddn.com/photo1.jpg');
encodedfile2 = qiniu.util.urlsafeBase64Encode('http://7xl4c9.com1.z0.glb.clouddn.com/vedio1.mp4');
encodedfile3 = qiniu.util.urlsafeBase64Encode('http://7xl4c9.com1.z0.glb.clouddn.com/audio1.mp3');
fops = 'mkzip/2/url/'+encodedfile1+'/url/'+encodedfile2+'/url/'+encodedfile3;

可以看到上传成功后的回调行为主要是有上传 Token 中的 policy 来指定。其中policy可以指定的行为不止这些,具体可以参考签权类中的policy字段。

文件下载

生成下载链接

var qiniu = require("qiniu");

qiniu.conf.ACCESS_KEY = 'Access_Key';
qiniu.conf.SECRET_KEY = 'Secret_Key';

//构建私有空间的链接
url = 'http://domain/key';

//生成下载链接url
var downloadUrl = policy.makeRequest(url);

//打印下载的url
console.log(downloadUrl);

空间资源的管理

获取文件的信息

var qiniu = require("qiniu");

qiniu.conf.ACCESS_KEY = 'Access_Key';
qiniu.conf.SECRET_KEY = 'Secret_Key';

//构建bucketmanager对象
var client = new qiniu.rs.Client();

//你要测试的空间, 并且这个key在你空间中存在
bucket = 'Bucket_Name';
key = 'nodejs-logo.png';

//获取文件信息
client.stat(bucket, key, function(err, ret) {
  if (!err) {
    console.log(ret.hash, ret.fsize, ret.putTime, ret.mimeType);
  } else {
    console.log(err);
  }
});

移动单个文件

var qiniu = require("qiniu");

qiniu.conf.ACCESS_KEY = 'Access_Key';
qiniu.conf.SECRET_KEY = 'Secret_Key';

//构建bucketmanager对象
var client = new qiniu.rs.Client();

//你要测试的空间, 并且这个key在你空间中存在
bucket = 'Bucket_Name';
key = 'nodejs-logo.png';

//移动到的目标空间名和重命名的key
dstbucket = 'dst_bucket'
dstkey = 'dst_key'

//移动资源
client.move(bucket, key, dstbucket, deskey, function(err, ret) {
  if (!err) {
    // ok
  } else {
    console.log(err);
  }
});

复制单个文件

var qiniu = require("qiniu");

qiniu.conf.ACCESS_KEY = 'Access_Key';
qiniu.conf.SECRET_KEY = 'Secret_Key';

//构建bucketmanager对象
var client = new qiniu.rs.Client();

//你要测试的空间, 并且这个key在你空间中存在
bucket = 'Bucket_Name';
key = 'nodejs-logo.png';

//复制到的目标空间名和重命名的key
dstbucket = 'dst_bucket'
dstkey = 'dst_key'

//复制资源
client.copy(bucket, key, dstbucket, deskey, function(err, ret) {
  if (!err) {
    // ok
  } else {
    console.log(err);
  }
});

删除单个文件

var qiniu = require("qiniu");

qiniu.conf.ACCESS_KEY = 'Access_Key';
qiniu.conf.SECRET_KEY = 'Secret_Key';

//构建bucketmanager对象
var client = new qiniu.rs.Client();

//你要测试的空间, 并且这个key在你空间中存在
bucket = 'Bucket_Name';
key = 'nodejs-logo.png';

//删除资源
client.remove(bucket, key, function(err, ret) {
  if (!err) {
    // ok
  } else {
    console.log(err);
  }
});

触发持久化操作(以视频转码为例)

视频转码

var qiniu = require("qiniu");

//
qiniu.conf.ACCESS_KEY = 'Access_Key';
qiniu.conf.SECRET_KEY = 'Secret_Key';

//要转码的文件所在的空间和文件名
bucket = 'Bucket_Name';
key = '1.mp4';

//转码所使用的队列名称。 
pipeline = 'abc';

//要进行转码的转码操作。 
fops = "avthumb/mp4/s/640x360/vb/1.25m"

//可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当前空间
saveas_key = qiniu.util.urlsafeBase64Encode(saved_bucket+':'+saved_key);
fops = fops+'|saveas/'+saveas_key;

opts = {
    pipeline: pipleline
};

var PFOP = qiniu.fop.pfop(bucket, key, fops, opts, function(err, ret) {
      if(!err) {
        // 上传成功, 处理返回值
        console.log('curl '+'http://api.qiniu.com/status/get/prefop?id='+ret.persistentId);       
      } else {
        // 上传失败, 处理返回代码
        console.log(err);
      }
  });



注:同样,上面的Demo只是针对视频转码,如果需要别的功能比如音视频切片、视频截图、视频拼接只需要修改下上面的fops后面的参数就可以了,
eg: fops = "vframe/jpg/offset/1/w/480/h/360/rotate/90"就表示视频截图了。
下面给出一些常见的数据处理功能,可以根据需要进行选择:
// ------------------图片缩放-------------------
fops ='imageView/2/w/200/h/200';

// ------------------视频转码-------------------
fops ='avthumb/avi/s/500x600';

// ------------------图片水印-------------------
base64URL = qiniu.util.urlsafeBase64Encode('http://developer.qiniu.com/resource/logo-2.jpg');
fops = 'watermark/1/image/'+base64URL;

// ------------------视频切片-------------------
fops = 'avthumb/m3u8/segtime/10/s/500x600';

// ------------------文档转换-------------------
fops = 'yifangyun_preview';

// ------------------视频截图-------------------
fops = 'vframe/jpg/offset/1/w/480/h/360/rotate/90';

//------------------视频拼接-------------------
//拼接视频片段时要保证所有源的画面长宽值一致
//除去作为数据处理对象的源文件以外,还可以指定最多5个源文件(即总计6个片段)
//所有源文件必须属于同一存储空间
//格式:avconcat/<Mode>/format/<Format>/<encodedUrl0>/<encodedUrl1>/<encodedUrl2>/...
encodedUrl1 = qiniu.util.urlsafeBase64Encode('http://7xl4c9.com1.z0.glb.clouddn.com/pingjie2.flv');
encodedUrl2 = qiniu.util.urlsafeBase64Encode('http://7xl4c9.com1.z0.glb.clouddn.com/pingjie3.avi');
fops = 'avconcat/2/format/mp4/'+encodedUrl1+'/'+encodedUrl2;

//------------------多文件压缩-------------------
//可将若干七牛空间中的资源文件,在七牛服务端压缩后存储
//格式:mkzip/<mode>/url/<Base64EncodedURL>/alias/<Base64EncodedAlias>/url/<Base64EncodedURL>
encodedfile1 = qiniu.util.urlsafeBase64Encode('http://7xl4c9.com1.z0.glb.clouddn.com/photo1.jpg');
encodedfile2 = qiniu.util.urlsafeBase64Encode('http://7xl4c9.com1.z0.glb.clouddn.com/vedio1.mp4');
encodedfile3 = qiniu.util.urlsafeBase64Encode('http://7xl4c9.com1.z0.glb.clouddn.com/audio1.mp3');
fops = 'mkzip/2/url/'+encodedfile1+'/url/'+encodedfile2+'/url/'+encodedfile3;

你可能感兴趣的:(七牛)