ali-oss
Version:
aliyun oss(object storage service) node client
71 lines (58 loc) • 1.84 kB
JavaScript
const ms = require('humanize-ms');
const urlutil = require('url');
const _checkBucketName = require('../utils/checkBucketName');
function setEndpoint(endpoint, secure) {
let url = urlutil.parse(endpoint);
if (!url.protocol) {
url = urlutil.parse(`http${secure ? 's' : ''}://${endpoint}`);
}
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
throw new Error('Endpoint protocol must be http or https.');
}
return url;
}
function setRegion(region, internal, secure) {
const protocol = secure ? 'https://' : 'http://';
let suffix = internal ? '-internal.aliyuncs.com' : '.aliyuncs.com';
const prefix = 'vpc100-oss-cn-';
// aliyun VPC region: https://help.aliyun.com/knowledge_detail/38740.html
if (region.substr(0, prefix.length) === prefix) {
suffix = '.aliyuncs.com';
}
return urlutil.parse(protocol + region + suffix);
}
module.exports = function (options) {
if (!options
|| !options.accessKeyId
|| !options.accessKeySecret) {
throw new Error('require accessKeyId, accessKeySecret');
}
if (options.bucket) {
_checkBucketName(options.bucket);
}
const opts = Object.assign({
region: 'oss-cn-hangzhou',
internal: false,
secure: false,
timeout: 60000,
bucket: null,
endpoint: null,
cname: false,
isRequestPay: false,
sldEnable: false
}, options);
opts.accessKeyId = opts.accessKeyId.trim();
opts.accessKeySecret = opts.accessKeySecret.trim();
if (opts.timeout) {
opts.timeout = ms(opts.timeout);
}
if (opts.endpoint) {
opts.endpoint = setEndpoint(opts.endpoint, opts.secure);
} else if (opts.region) {
opts.endpoint = setRegion(opts.region, opts.internal, opts.secure);
} else {
throw new Error('require options.endpoint or options.region');
}
opts.inited = true;
return opts;
};