Skip to content

通过plupload插件和七牛云提供SDK实现直接上传文件至七牛云个人空间

Notifications You must be signed in to change notification settings

baigao2015/qiniu-nodejsSDK-plupload_real_fileup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#通过七牛云SDK和plupload实现文件上传至七牛个人空间 ##一、使用库 ###1、nodejs-sdk Node.js SDK 主要包含对七牛云存储API的包装,遵循qiniu sdkspec 涉及到以下几个方面:

  • 服务端操作,生成上传授权(uptoken),私有bucket下载URL(downloadUrl),文件操作授权
  • 客户端操作,上传文件(qiniu/io.js)
  • 文件管理(qiniu/rs.js)
  • 数据处理(qiniu/fop.js)
  • 公共库(qiniu/rpc.js, qiniu/util.js)

git地址:https://github.com/qiniu/nodejs-sdk

参考文档: http://developer.qiniu.com/ 七牛开发者中心

###2、plupload Plupload 是一个Web浏览器上的界面友好的文件上传组件,可显示上传进度、图像自动缩略和上传分块,同时上传多个文件。Plupload 的上传文件的引擎使用Flash,Silverlight,HTML5,Gears,BrowserPlus或正常的FileUpload。

地址:: https://github.com/moxiecode/plupload
参考文档: http://www.bubuko.com/infodetail-909829.html

##二、概述通过七牛提供SDK实现文件直传 ###文件上传流程

  • 客户端(终端用户) => 七牛 => 业务服务器

###实现方式 1、客户端请求业务服务器获得 uptoken

2、客户端凭借 上传凭证 上传文件到七牛

3、善后工作,比如保存相关的一些信息

##三、具体实现方式 ###1、获取上传凭证 获取上传凭证的主要是通过七牛nodejs-sdk的PutPolicy方法获取

  • 配置参数 module.exports = { 'ACCESS_KEY': 'CBk2qYIgebRVDFHqaYk0vf9Jp7hSAcIvKyw49qIx', // 七牛个人账户公钥 'SECRET_KEY': 'nNeq3K3ajI6NRQZzamyDxdbtnPnoXXjsn4af0V9n', // 七牛个人账户私钥 'Bucket_Name': 'qiniu-file-up', // 七牛-个人空间名 'Port': 19111, 'Uptoken_Url': '/api/fileupload/uptoken', // 获取token路径 'Domain': '7xqqm5.com1.z0.glb.clouddn.com' // 七牛子域名,自定义域名。 };

  • 配置好参数后,即可生成token

      var qiniu = require('qiniu');
      // 配置公钥和私钥
      qiniu.conf.ACCESS_KEY = config.ACCESS_KEY; 
      qiniu.conf.SECRET_KEY = config.SECRET_KEY;
      var uptoken = new qiniu.rs.PutPolicy(config.Bucket_Name); // 生成的uptoken对象的token()方法会返回上传凭证
      var token = uptoken.token();    // 获得token
    

###2、客户端直接上传文件至个人空间 通过plupload插件实现文件直传

//实例化一个plupload上传对象
uploader = new plupload.Uploader({
  runtimes: 'html5,flash,html4',
  browse_button : 'pickfiles', //触发文件选择对话框的按钮,为那个元素id
  url: 'http://upload.qiniu.com/',  // 服务器上传地址
  unique_names: true,
  multipart: true,
  multipart_params: {},     // 后续设置该从参数的值
});

//在实例对象上调用init()方法进行初始化
uploader.init();

// 当上传队列中的某一文件正要开始上传前触发
uploader.bind('BeforeUpload', function(uploader, files){
  // 设置当前上传文件名和token
  uploader.setOption('multipart_params', {
    token: token,               // 上传凭证
    'key': files.name,        // 设置key,key即为存放在云上的文件名
  });
});

// 当文件添加到上传队列后触发,files为一数组(本次添加的文件对象数组)
uploader.bind('FilesAdded',function(uploader, files){
  var html = '';
  for(var i=0; i<files.length; i++) {
    html = '<tr>'
            +'<td>'+files[i].name+'</td>'
            +'<td>'+files[i].size+'B'+'</td>'
            +'<td>'+'未上传'+'</td>'
    '</tr>';
    $('#file-info tbody').append(html);
  }
});

// 文件上传过程中不断触发,可以用此事件来显示上传进度
uploader.bind('UploadProgress',function(uploader,file){
});

// 当当前上传文件队列中的所有文件都已上传完时触发
uploader.bind('UploadComplete',function(uploader,file){
  // 修改表格状态
  $('#file-info tbody tr').each(function(index, ele){
    var text = $(this).find('td:eq(2)').text();
    if(text == '未上传') {
      $(this).find('td:eq(2)').text('已上传');
    }
  });
  // 清空文件队列
  file.length = 0 ;
});

//最后给"开始上传"按钮注册事件
document.getElementById('start_upload').onclick = function(){
  // 查看文件队列中是否有文件已被选中 TODO
  if(uploader.files.length == 0) {
    jAlert("请添加需要上传的文件!", "提示");
  }
  uploader.start(); //调用实例对象的start()方法开始上传文件,当然你也可以在其他地方调用该方法
}

##四、资源的下载 七牛个人账户的空间默认是公有的,公有的空间访问时是不需要下载凭证的,私有的空间需要进行实名认证后,才可将空间配置为私有!

###1、公开资源下载非常简单,以HTTP GET方式访问资源URL即可。资源URL的构成如下:

http://<domain>/<key>   // domain为个人的自定义域名,key即为资源名

###2、私有资源的下载 当将个人账户的空间设置成私有后,所有对空间内资源的访问都必须获得授权

私有资源下载也是通过以HTTP GET方式访问一个特定URL完成。私有资源URL与公开资源URL相比只是增加了两个参数e和token,分别表示过期时间和下载凭证。一个完整的私有资源URL如下所示:

http://<domain>/<key>?e=<deadline>&token=<downloadToken>

参考文档:

下载安全机制: http://developer.qiniu.com/docs/v6/api/overview/dn/security.html

###3、图片的预览 图片的预览其实是将图片下载即可!

图片查看原图的效果使用库materialize链接: http://materializecss.com/media.html 材料设计:

##五、总结 ###1、本例使用的实现方式是:

  • 1、客户端请求业务服务器获得 uptoken

  • 2、客户端凭借 上传凭证 上传文件到七牛

  • 3、善后工作,比如保存相关的一些信息

即:

    客户端(终端用户) => 七牛 => 业务服务器

注:此种方式使用了plupload插件来协助完成。

后续添加另一项目实现文件上传的方式为:

    客户端(终端用户) => 业务服务器 => 云存储服务

注:此种方式只适用七牛云提供的nodejs-sdk来实现!

About

通过plupload插件和七牛云提供SDK实现直接上传文件至七牛云个人空间

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published