1

[toc]

本文在最新qiniu sdk 开发只适用于0.4.6node 开发。
详细关注: https://github.com/tstrilogy/...

在网上寻找了很多七牛云存储的博文,也百度了许多。但是都不尽如人意,因此自个撸一个小示例。

1-准备工作

  • 确认安装node和npm

  • 安装 qiniu,formidable,express模块

npm install --save qiniu formidable
  • [x] 导入模块

let qiniu = require('qiniu'),
    formidable = require('formidable'),
    express = require('express'),
    router = express.Router();

2-服务器端的云存储操作

2-1文件上传

router.post('/qiniu', function (req, res, next) {

  let bucket = 'myblog',
    key = '',
    form = formidable.IncomingForm(),
    token, putPolicy;


  form.uploadDir = path.join(__dirname, '../../', 'public/img/upload');
  form.keepExtensions = true

  form.parse(req, function (err, fields, files) {
    if (err) {
      console.log(err);
    }
    key = files.mypic.path.split(path.sep).pop();
    putPolicy = new qiniu.rs.PutPolicy(bucket + ':' + key)
    //设置回调
    // putPolicy.callbackUrl = 'http://localhost:81/test/callback'
    // putPolicy.callbackBody = 'filename=$(fname)&filesize=$(fsize)'

    token = putPolicy.token()

    console.log('token', token)
    let extra = new qiniu.io.PutExtra()
    qiniu.io.putFile(token, key, files.mypic.path, extra, function (err, ret) {
      if (err) {
        console.log(err)
      }
      console.log('ret', ret);
      res.json({
        token: token,
        ret: ret,
        files: files,
        fields: fields
      })
    })
  })

})

文件下载

router.get('/download/:key', function (req, res, next) {
  let url = 'http://xxxx.bkt.clouddn.com/' + req.params.key,
    policy = new qiniu.rs.GetPolicy();

  console.log(url);

  res.json({url: policy.makeRequest(url)})
})

文件获取

router.get('/info/:key', function (req, res, next) {
  let bucket = 'myblog',
    key = req.params.key,
    client = new qiniu.rs.Client();

  client.stat(bucket, key, (err, ret) => {
    if (err) {
      console.log(err);
    }
    res.json(ret);
  })
})

zsirfs
832 声望24 粉丝

菜鸟挣扎努力的去学习