Source: uploaders/qiniu.js

/*
 * deploy-asset
 * https://github.com/qiu8310/deploy-asset
 *
 * Copyright (c) 2015 Zhonglei Qiu
 * Licensed under the MIT license.
 */

var _ = require('lodash'),
  log = require('npmlog'),
  mime = require('mime'),
  qiniu = require('qiniu');

var Uploader = require('../uploader');


/**
 *
 * 这里你可以检查用户配置,如果配置有误可以抛出异常
 *
 * @constructor QiniuUploader
 * @extends Uploader
 * @param {Object} opts
 * @param {String} opts.ak      - 七牛的 access-key
 * @param {String} opts.sk      - 七牛的 secret-key
 * @param {String} opts.bucket  - 七牛的 bucket
 * @param {String} opts.domain  - 七牛的默认域名
 *
 */
function QiniuUploader(opts) {
  if (!opts.ak && !opts.sk && !opts.bucket && !opts.domain) {
    log.warn('Qiniu setting', 'You are using a public qiniu setting, it may not work.');
    log.warn('Qiniu setting');
    log.warn('Qiniu setting', 'You can register an account yourself in http://www.qiniu.com/');

    opts = _.assign({
      ak: '6mU6vJ3h3ffH4DrPaAyH1SDsDMktTjpBq0U6Zo8G',
      sk: '0Haz628E6jxjRwdXUiYpbH4jApz019XM6L6Ykl0M',
      bucket: 'depot-asset',
      domain: '7ximfq.com1.z0.glb.clouddn.com'
    }, opts);
  }

  var self = this;
  ['ak', 'sk', 'bucket', 'domain'].forEach(function(key) {
    if (!opts[key] && !_.isString(opts[key])) {
      throw new Error('Please set your qiniu\'s ' + key + ' option to valid String Value');
    }
    self[key] = opts[key];
  });

  qiniu.conf.ACCESS_KEY = self.ak;
  qiniu.conf.SECRET_KEY = self.sk;

  self.domain = this.normalizeBaseUrl(self.domain);
}


/**
 *
 * @method
 * @override
 *
 * @borrows Uploader.setFileRemotePath
 */
QiniuUploader.prototype.setFileRemotePath = function(file) {
  file.remote.path = this.domain + file.remote.basename;
};

/**
 *
 * @method
 * @override
 * @borrows Uploader.uploadFile
 */
QiniuUploader.prototype.uploadFile = function(file, cb) {
  var self = this;
  var token = new qiniu.rs.PutPolicy(self.bucket + ':' + file.remote.basename).token();

  var extra = new qiniu.io.PutExtra({}, mime.lookup(file.path));
  //var extra = new qiniu.io.PutExtra();

  //qiniu.io.putFile(token, file.remote.basename, file.path, extra, function(err, ret) {
  qiniu.io.put(token, file.remote.basename, file.content, extra, function(err, ret) {
    cb( err, ret );
  });
};


/* 为了生成好看点的 jsdoc 文档才这样写的 */
module.exports = Uploader.extend({
  constructor: QiniuUploader,
  setFileRemotePath: QiniuUploader.prototype.setFileRemotePath,
  uploadFile: QiniuUploader.prototype.uploadFile
});