43 lines
1.0 KiB
TypeScript
43 lines
1.0 KiB
TypeScript
import AliOss from 'ali-oss';
|
|
import { getFilename } from '../utils';
|
|
|
|
export class AliOssStorage {
|
|
|
|
private client: AliOss;
|
|
|
|
private getFilename: Function;
|
|
|
|
constructor(opts) {
|
|
this.client = new AliOss(opts.config);
|
|
this.getFilename = opts.filename || getFilename;
|
|
}
|
|
|
|
_handleFile(req, file, cb) {
|
|
if (!this.client) {
|
|
console.error('oss client undefined');
|
|
return cb({ message: 'oss client undefined' });
|
|
}
|
|
this.getFilename(req, file, (err, filename) => {
|
|
if (err) return cb(err)
|
|
this.client.putStream(filename, file.stream).then(
|
|
result => cb(null, {
|
|
filename: result.name,
|
|
url: result.url
|
|
})
|
|
).catch(cb);
|
|
});
|
|
}
|
|
|
|
_removeFile(req, file, cb) {
|
|
if (!this.client) {
|
|
console.error('oss client undefined');
|
|
return cb({ message: 'oss client undefined' });
|
|
}
|
|
this.client.delete(file.filename).then(
|
|
result => cb(null, result)
|
|
).catch(cb);
|
|
}
|
|
}
|
|
|
|
export default (storage) => new AliOssStorage({ config: storage.options });
|