tmc-egg-oss
v1.0.0
Published
OSS plugin for egg
Readme
egg-oss
OSS plugin for egg
Install
$ npm i egg-ossConfigration
To enable oss plugin, you should change ${baseDir}/config/plugin.js
// config/plugin.js
exports.oss = {
enable: true,
package: 'egg-oss',
};Then fill in nessary information like OSS's bucket, accessKeyId, accessKeySecret in ${baseDir}/config/config.{env}.js
Mention, egg-oss support normal oss client and oss cluster client, based on ali-oss:
// normal oss bucket
exports.oss = {
client: {
accessKeyId: 'your access key',
accessKeySecret: 'your access secret',
bucket: 'your bucket name',
endpoint: 'oss-cn-hongkong.aliyun.com',
timeout: '60s',
},
};
// cluster oss bucket
// need to config all bucket information under cluster
exports.oss = {
client: {
cluster: [{
endpoint: 'host1',
accessKeyId: 'id1',
accessKeySecret: 'secret1',
}, {
endpoint: 'host2',
accessKeyId: 'id2',
accessKeySecret: 'secret2',
}],
schedule: 'masterSlave', //default is `roundRobin`
timeout: '60s',
},
};Init in egg agent, default is false:
exports.oss = {
useAgent: true,
};Usage
You can aquire oss instance on app or ctx.
const path = require('path');
// upload a file in controller
module.exports = function*() {
const parts = this.multipart();
let object;
let part;
part = yield parts;
while (part) {
if (part.length) {
// arrays are busboy fields
console.log('field: ' + part[0]);
console.log('value: ' + part[1]);
console.log('valueTruncated: ' + part[2]);
console.log('fieldnameTruncated: ' + part[3]);
} else {
// otherwise, it's a stream
console.log('field: ' + part.fieldname);
console.log('filename: ' + part.filename);
console.log('encoding: ' + part.encoding);
console.log('mime: ' + part.mime);
// file handle
object = yield this.oss.put('egg-oss-demo-' + part.filename, part);
}
part = yield parts;
}
console.log('and we are done parsing the form!');
if (object) {
console.log('get oss object: %j', object);
this.unsafeRedirect(object.url);
} else {
this.body = 'please select a file to upload!';
}
}To learn OSS client API, please check oss document。
Create one more OSS buckets
Some application need to access more than one oss bucket, then you need to configure oss.clients, and
you can create new oss instance dynamicly by app.oss.createInstance(config).
${appdir}/config/config.default.js
exports.oss = {
clients: {
bucket1: {
bucket: 'bucket1',
},
bucket2: {
bucket: 'bucket2',
},
},
// shared by client, clients and createInstance
default: {
endpoint: '',
accessKeyId: '',
accessKeySecret: '',
},
};
exports.bucket3 = {
bucket: 'bucket3',
};${appdir}/config/plugin.js
exports.oss = true;${appdir}/app.js
module.exports = function (app) {
const bucket1 = app.oss.get('bucket1');
const bucket2 = app.oss.get('bucket2');
// it will merge app.config.bucket3 and app.config.oss.default
const bucket3 = app.oss.createInstance(app.config.bucket3);
}Questions & Suggestions
Please open an issue here.
secure keys
ping @fengmk2 to give you the access key!
