gulp-aliyun-oss
Version:
一个阿里云上传文件的gulp插件
61 lines (51 loc) • 1.66 kB
JavaScript
// PLUGIN_NAME: gulp-aliyun-oss
const PLUGIN_NAME = 'gulp-aliyun-oss';
var path = require('path');
var through2 = require('through2');
var PluginError = require('gulp-util').PluginError;
var colors = require('gulp-util').colors;
var log = require('gulp-util').log;
var OSS = require('ali-oss');
var co = require('co');
function oss(option) {
if (!option) {
throw new PluginError(PLUGIN_NAME, 'Missing option!');
}
if(!option.bucket){
throw new PluginError(PLUGIN_NAME, 'Missing option.bucket!');
}
option.prefix = option.prefix || "";
var client = new OSS({
region: option.region,
accessKeyId: option.accessKeyId,
accessKeySecret: option.accessKeySecret,
bucket: option.bucket,
});
var ossOpt = option.ossOpt || {};
var stream = through2.obj(function (file, enc, cb) {
var filename = file.relative;
var self = this;
var getFileKey = function(){
return option.prefix
+ ((!option.prefix || (option.prefix[option.prefix.length - 1]) === '/') ? '' : '/')
+ path.posix.relative(file.base, file.path);
};
if(file.isBuffer()){
// console.log(filename);
co(function* () {
var result = yield client.put(getFileKey(), file.contents, ossOpt);
log('OK:', colors.green(filename));
cb(null, file);
})
.catch(function (err) {
log('ERR:', colors.red(filename + "\t" + err.code));
cb(err, null);
})
}
else {
cb();
}
});
return stream;
}
module.exports = oss;