import { Plugin } from '@nocobase/server'; import addDumpCommand from './commands/dump-command'; import addRestoreCommand from './commands/restore-command'; import zhCN from './locale/zh-CN'; import dumpAction from './actions/dump-action'; import { getPackageContent, restoreAction } from './actions/restore-action'; import getDictAction from './actions/get-dict-action'; import dumpableCollections from './actions/dumpable-collections-action'; import multer from '@koa/multer'; import * as os from 'os'; export default class Duplicator extends Plugin { beforeLoad() { this.app.i18n.addResources('zh-CN', 'duplicator', zhCN); addDumpCommand(this.app); addRestoreCommand(this.app); } async load() { this.app.resourcer.define({ name: 'duplicator', middleware: async (ctx, next) => { if (ctx.action.actionName !== 'upload') { return next(); } const storage = multer.diskStorage({ destination: os.tmpdir(), // 获取临时目录 filename: function (req, file, cb) { const randomName = Date.now().toString() + Math.random().toString().slice(2); // 随机生成文件名 cb(null, randomName); }, }); const upload = multer({ storage }).single('file'); return upload(ctx, next); }, actions: { restore: restoreAction, upload: getPackageContent, dump: dumpAction, dumpableCollections: dumpableCollections, getDict: getDictAction, }, }); this.app.acl.allow('duplicator', 'getDict'); } }