@nocobase/plugin-file-manager 0.9.4-alpha.1 → 0.10.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/client/FileStorage.d.ts +2 -1
- package/lib/client/FileStorage.js +6 -6
- package/lib/client/StorageOptions.d.ts +1 -1
- package/lib/client/StorageOptions.js +18 -21
- package/lib/client/index.d.ts +2 -2
- package/lib/client/index.js +12 -7
- package/lib/client/initializers/UploadActionInitializer.d.ts +2 -1
- package/lib/client/initializers/UploadActionInitializer.js +1 -1
- package/lib/client/interfaces/attachment.d.ts +2 -0
- package/lib/client/interfaces/attachment.js +139 -0
- package/lib/client/locale/en-US.d.ts +22 -0
- package/lib/client/locale/en-US.js +28 -0
- package/lib/client/locale/index.js +0 -10
- package/lib/client/locale/ja-JP.d.ts +19 -0
- package/lib/client/locale/ja-JP.js +25 -0
- package/lib/client/locale/ru-RU.d.ts +19 -0
- package/lib/client/locale/ru-RU.js +25 -0
- package/lib/client/locale/tr-TR.d.ts +18 -0
- package/lib/client/locale/tr-TR.js +24 -0
- package/lib/client/locale/zh-CN.d.ts +25 -3
- package/lib/client/locale/zh-CN.js +25 -4
- package/lib/client/schemas/storage.js +41 -18
- package/lib/client/templates/file.js +1 -1
- package/lib/server/actions/attachments.d.ts +3 -0
- package/lib/server/actions/{upload.js → attachments.js} +140 -141
- package/lib/server/actions/index.d.ts +3 -0
- package/lib/server/actions/index.js +22 -0
- package/lib/server/collections/attachments.js +1 -0
- package/lib/server/collections/storages.js +3 -2
- package/lib/server/constants.d.ts +1 -1
- package/lib/server/constants.js +3 -3
- package/lib/server/rules/mimetype.d.ts +1 -1
- package/lib/server/rules/mimetype.js +1 -1
- package/lib/server/server.d.ts +1 -0
- package/lib/server/server.js +18 -6
- package/lib/server/storages/ali-oss.d.ts +2 -0
- package/lib/server/storages/ali-oss.js +12 -0
- package/lib/server/storages/index.d.ts +29 -4
- package/lib/server/storages/index.js +17 -7
- package/lib/server/storages/local.d.ts +2 -0
- package/lib/server/storages/local.js +34 -5
- package/lib/server/storages/s3.d.ts +2 -0
- package/lib/server/storages/s3.js +21 -0
- package/lib/server/storages/tx-cos.d.ts +2 -0
- package/lib/server/storages/tx-cos.js +25 -0
- package/package.json +10 -7
- package/lib/client/FileStorageShortcut.d.ts +0 -1
- package/lib/client/FileStorageShortcut.js +0 -91
- package/lib/server/actions/upload.d.ts +0 -4
|
@@ -12,6 +12,6 @@ function _mimeMatch() {
|
|
|
12
12
|
return data;
|
|
13
13
|
}
|
|
14
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
function _default(file, options = '*'
|
|
15
|
+
function _default(file, options = '*') {
|
|
16
16
|
return options.toString().split(',').some((0, _mimeMatch().default)(file.mimetype));
|
|
17
17
|
}
|
package/lib/server/server.d.ts
CHANGED
package/lib/server/server.js
CHANGED
|
@@ -4,6 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
Object.defineProperty(exports, "storageTypes", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function get() {
|
|
10
|
+
return _storages.default;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
7
13
|
function _server() {
|
|
8
14
|
const data = require("@nocobase/server");
|
|
9
15
|
_server = function _server() {
|
|
@@ -18,9 +24,12 @@ function _path() {
|
|
|
18
24
|
};
|
|
19
25
|
return data;
|
|
20
26
|
}
|
|
21
|
-
var
|
|
27
|
+
var _actions = _interopRequireDefault(require("./actions"));
|
|
22
28
|
var _constants = require("./constants");
|
|
23
|
-
var _storages = require("./storages");
|
|
29
|
+
var _storages = _interopRequireWildcard(require("./storages"));
|
|
30
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
31
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
32
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
24
33
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
25
34
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
26
35
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
@@ -30,7 +39,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
|
|
|
30
39
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
31
40
|
class PluginFileManager extends _server().Plugin {
|
|
32
41
|
storageType() {
|
|
33
|
-
|
|
42
|
+
var _process$env$DEFAULT_;
|
|
43
|
+
return (_process$env$DEFAULT_ = process.env.DEFAULT_STORAGE_TYPE) !== null && _process$env$DEFAULT_ !== void 0 ? _process$env$DEFAULT_ : 'local';
|
|
34
44
|
}
|
|
35
45
|
install() {
|
|
36
46
|
var _this = this;
|
|
@@ -62,10 +72,12 @@ class PluginFileManager extends _server().Plugin {
|
|
|
62
72
|
name: `pm.${_this2.name}.storages`,
|
|
63
73
|
actions: ['storages:*']
|
|
64
74
|
});
|
|
75
|
+
(0, _actions.default)(_this2);
|
|
65
76
|
_this2.app.acl.allow('attachments', 'upload', 'loggedIn');
|
|
66
|
-
_this2.app.
|
|
67
|
-
|
|
68
|
-
|
|
77
|
+
_this2.app.acl.allow('attachments', 'create', 'loggedIn');
|
|
78
|
+
// this.app.resourcer.use(uploadMiddleware);
|
|
79
|
+
// this.app.resourcer.use(createAction);
|
|
80
|
+
// this.app.resourcer.registerActionHandler('upload', uploadAction);
|
|
69
81
|
if (process.env.APP_ENV !== 'production') {
|
|
70
82
|
yield (0, _storages.getStorageConfig)(_constants.STORAGE_TYPE_LOCAL).middleware(_this2.app);
|
|
71
83
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AttachmentModel } from '.';
|
|
1
2
|
declare const _default: {
|
|
2
3
|
make(storage: any): any;
|
|
3
4
|
defaults(): {
|
|
@@ -12,5 +13,6 @@ declare const _default: {
|
|
|
12
13
|
bucket: string;
|
|
13
14
|
};
|
|
14
15
|
};
|
|
16
|
+
delete(storage: any, records: AttachmentModel[]): Promise<[number, AttachmentModel[]]>;
|
|
15
17
|
};
|
|
16
18
|
export default _default;
|
|
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _constants = require("../constants");
|
|
8
8
|
var _utils = require("../utils");
|
|
9
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
10
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
9
11
|
var _default = {
|
|
10
12
|
make(storage) {
|
|
11
13
|
const createAliOssStorage = require('multer-aliyun-oss');
|
|
@@ -27,6 +29,16 @@ var _default = {
|
|
|
27
29
|
bucket: process.env.ALI_OSS_BUCKET
|
|
28
30
|
}
|
|
29
31
|
};
|
|
32
|
+
},
|
|
33
|
+
delete(storage, records) {
|
|
34
|
+
var _this = this;
|
|
35
|
+
return _asyncToGenerator(function* () {
|
|
36
|
+
const _this$make = _this.make(storage),
|
|
37
|
+
client = _this$make.client;
|
|
38
|
+
const _yield$client$deleteM = yield client.deleteMulti(records.map(record => `${record.path}/${record.filename}`)),
|
|
39
|
+
deleted = _yield$client$deleteM.deleted;
|
|
40
|
+
return [deleted.length, records.filter(record => !deleted.find(item => item.Key === `${record.path}/${record.filename}`))];
|
|
41
|
+
})();
|
|
30
42
|
}
|
|
31
43
|
};
|
|
32
44
|
exports.default = _default;
|
|
@@ -1,8 +1,33 @@
|
|
|
1
|
+
import { StorageEngine } from 'multer';
|
|
2
|
+
import Application from '@nocobase/server';
|
|
3
|
+
import { Registry } from '@nocobase/utils';
|
|
4
|
+
export interface StorageModel {
|
|
5
|
+
title: string;
|
|
6
|
+
type: string;
|
|
7
|
+
name: string;
|
|
8
|
+
baseUrl: string;
|
|
9
|
+
options: {
|
|
10
|
+
[key: string]: string;
|
|
11
|
+
};
|
|
12
|
+
deleteFileOnDestroy?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface AttachmentModel {
|
|
15
|
+
title: string;
|
|
16
|
+
filename: string;
|
|
17
|
+
path: string;
|
|
18
|
+
}
|
|
1
19
|
export interface IStorage {
|
|
2
20
|
filenameKey?: string;
|
|
3
|
-
middleware
|
|
4
|
-
getFileData
|
|
5
|
-
|
|
6
|
-
|
|
21
|
+
middleware?(app: Application): void;
|
|
22
|
+
getFileData?(file: {
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
}): {
|
|
25
|
+
[key: string]: any;
|
|
26
|
+
};
|
|
27
|
+
make(storage: StorageModel): StorageEngine;
|
|
28
|
+
defaults(): StorageModel;
|
|
29
|
+
delete(storage: StorageModel, records: AttachmentModel[]): Promise<[number, AttachmentModel[]]>;
|
|
7
30
|
}
|
|
31
|
+
declare const storageTypes: Registry<IStorage>;
|
|
8
32
|
export declare function getStorageConfig(key: string): IStorage;
|
|
33
|
+
export default storageTypes;
|
|
@@ -3,18 +3,28 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.default = void 0;
|
|
6
7
|
exports.getStorageConfig = getStorageConfig;
|
|
8
|
+
function _utils() {
|
|
9
|
+
const data = require("@nocobase/utils");
|
|
10
|
+
_utils = function _utils() {
|
|
11
|
+
return data;
|
|
12
|
+
};
|
|
13
|
+
return data;
|
|
14
|
+
}
|
|
7
15
|
var _local = _interopRequireDefault(require("./local"));
|
|
8
16
|
var _aliOss = _interopRequireDefault(require("./ali-oss"));
|
|
9
17
|
var _s = _interopRequireDefault(require("./s3"));
|
|
10
18
|
var _txCos = _interopRequireDefault(require("./tx-cos"));
|
|
11
19
|
var _constants = require("../constants");
|
|
12
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
const storageTypes = new (_utils().Registry)();
|
|
22
|
+
storageTypes.register(_constants.STORAGE_TYPE_LOCAL, _local.default);
|
|
23
|
+
storageTypes.register(_constants.STORAGE_TYPE_ALI_OSS, _aliOss.default);
|
|
24
|
+
storageTypes.register(_constants.STORAGE_TYPE_S3, _s.default);
|
|
25
|
+
storageTypes.register(_constants.STORAGE_TYPE_TX_COS, _txCos.default);
|
|
18
26
|
function getStorageConfig(key) {
|
|
19
|
-
return
|
|
20
|
-
}
|
|
27
|
+
return storageTypes.get(key);
|
|
28
|
+
}
|
|
29
|
+
var _default = storageTypes;
|
|
30
|
+
exports.default = _default;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Application from '@nocobase/server';
|
|
2
2
|
import multer from 'multer';
|
|
3
|
+
import { AttachmentModel } from '.';
|
|
3
4
|
declare function middleware(app: Application): Promise<void>;
|
|
4
5
|
declare const _default: {
|
|
5
6
|
middleware: typeof middleware;
|
|
@@ -13,5 +14,6 @@ declare const _default: {
|
|
|
13
14
|
documentRoot: string;
|
|
14
15
|
};
|
|
15
16
|
};
|
|
17
|
+
delete(storage: any, records: AttachmentModel[]): Promise<[number, AttachmentModel[]]>;
|
|
16
18
|
};
|
|
17
19
|
export default _default;
|
|
@@ -4,6 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
function _promises() {
|
|
8
|
+
const data = _interopRequireDefault(require("fs/promises"));
|
|
9
|
+
_promises = function _promises() {
|
|
10
|
+
return data;
|
|
11
|
+
};
|
|
12
|
+
return data;
|
|
13
|
+
}
|
|
7
14
|
function _koaStatic() {
|
|
8
15
|
const data = _interopRequireDefault(require("koa-static"));
|
|
9
16
|
_koaStatic = function _koaStatic() {
|
|
@@ -102,7 +109,7 @@ function createLocalServerUpdateHook(app, storages) {
|
|
|
102
109
|
function getDocumentRoot(storage) {
|
|
103
110
|
const _ref2 = storage.options || {},
|
|
104
111
|
_ref2$documentRoot = _ref2.documentRoot,
|
|
105
|
-
documentRoot = _ref2$documentRoot === void 0 ? 'uploads' : _ref2$documentRoot;
|
|
112
|
+
documentRoot = _ref2$documentRoot === void 0 ? process.env.LOCAL_STORAGE_DEST || 'storage/uploads' : _ref2$documentRoot;
|
|
106
113
|
// TODO(feature): 后面考虑以字符串模板的方式使用,可注入 req/action 相关变量,以便于区分文件夹
|
|
107
114
|
return _path().default.resolve(_path().default.isAbsolute(documentRoot) ? documentRoot : _path().default.join(process.cwd(), documentRoot));
|
|
108
115
|
}
|
|
@@ -120,7 +127,7 @@ function _middleware() {
|
|
|
120
127
|
yield refresh(app, storages);
|
|
121
128
|
}));
|
|
122
129
|
app.use( /*#__PURE__*/function () {
|
|
123
|
-
var
|
|
130
|
+
var _ref5 = _asyncToGenerator(function* (ctx, next) {
|
|
124
131
|
var _iterator2 = _createForOfIteratorHelper(storages.values()),
|
|
125
132
|
_step2;
|
|
126
133
|
try {
|
|
@@ -167,7 +174,7 @@ function _middleware() {
|
|
|
167
174
|
yield next();
|
|
168
175
|
});
|
|
169
176
|
return function (_x7, _x8) {
|
|
170
|
-
return
|
|
177
|
+
return _ref5.apply(this, arguments);
|
|
171
178
|
};
|
|
172
179
|
}());
|
|
173
180
|
});
|
|
@@ -189,9 +196,9 @@ var _default = {
|
|
|
189
196
|
LOCAL_STORAGE_DEST = _process$env.LOCAL_STORAGE_DEST,
|
|
190
197
|
LOCAL_STORAGE_BASE_URL = _process$env.LOCAL_STORAGE_BASE_URL,
|
|
191
198
|
APP_PORT = _process$env.APP_PORT;
|
|
192
|
-
const documentRoot = LOCAL_STORAGE_DEST || 'uploads';
|
|
199
|
+
const documentRoot = LOCAL_STORAGE_DEST || 'storage/uploads';
|
|
193
200
|
return {
|
|
194
|
-
title: '
|
|
201
|
+
title: 'Local storage',
|
|
195
202
|
type: _constants.STORAGE_TYPE_LOCAL,
|
|
196
203
|
name: `local`,
|
|
197
204
|
baseUrl: LOCAL_STORAGE_BASE_URL || `http://localhost:${APP_PORT || '13000'}/${documentRoot}`,
|
|
@@ -199,6 +206,28 @@ var _default = {
|
|
|
199
206
|
documentRoot
|
|
200
207
|
}
|
|
201
208
|
};
|
|
209
|
+
},
|
|
210
|
+
delete(storage, records) {
|
|
211
|
+
return _asyncToGenerator(function* () {
|
|
212
|
+
const documentRoot = getDocumentRoot(storage);
|
|
213
|
+
let count = 0;
|
|
214
|
+
const undeleted = [];
|
|
215
|
+
yield records.reduce((promise, record) => promise.then( /*#__PURE__*/_asyncToGenerator(function* () {
|
|
216
|
+
try {
|
|
217
|
+
yield _promises().default.unlink(_path().default.join(documentRoot, record.path, record.filename));
|
|
218
|
+
count += 1;
|
|
219
|
+
} catch (ex) {
|
|
220
|
+
if (ex.code === 'ENOENT') {
|
|
221
|
+
console.warn(ex.message);
|
|
222
|
+
count += 1;
|
|
223
|
+
} else {
|
|
224
|
+
console.error(ex);
|
|
225
|
+
undeleted.push(record);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
})), Promise.resolve());
|
|
229
|
+
return [count, undeleted];
|
|
230
|
+
})();
|
|
202
231
|
}
|
|
203
232
|
};
|
|
204
233
|
exports.default = _default;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AttachmentModel } from '.';
|
|
1
2
|
declare const _default: {
|
|
2
3
|
filenameKey: string;
|
|
3
4
|
make(storage: any): any;
|
|
@@ -13,5 +14,6 @@ declare const _default: {
|
|
|
13
14
|
bucket: string;
|
|
14
15
|
};
|
|
15
16
|
};
|
|
17
|
+
delete(storage: any, records: AttachmentModel[]): Promise<[number, AttachmentModel[]]>;
|
|
16
18
|
};
|
|
17
19
|
export default _default;
|
|
@@ -7,6 +7,8 @@ exports.default = void 0;
|
|
|
7
7
|
var _constants = require("../constants");
|
|
8
8
|
var _utils = require("../utils");
|
|
9
9
|
const _excluded = ["accessKeyId", "secretAccessKey", "bucket", "acl"];
|
|
10
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
11
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
10
12
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
11
13
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
12
14
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
@@ -60,6 +62,25 @@ var _default = {
|
|
|
60
62
|
bucket: process.env.AWS_S3_BUCKET
|
|
61
63
|
}
|
|
62
64
|
};
|
|
65
|
+
},
|
|
66
|
+
delete(storage, records) {
|
|
67
|
+
var _this = this;
|
|
68
|
+
return _asyncToGenerator(function* () {
|
|
69
|
+
const _require2 = require('@aws-sdk/client-s3'),
|
|
70
|
+
DeleteObjectsCommand = _require2.DeleteObjectsCommand;
|
|
71
|
+
const _this$make = _this.make(storage),
|
|
72
|
+
s3 = _this$make.s3;
|
|
73
|
+
const _yield$s3$send = yield s3.send(new DeleteObjectsCommand({
|
|
74
|
+
Bucket: storage.options.bucket,
|
|
75
|
+
Delete: {
|
|
76
|
+
Objects: records.map(record => ({
|
|
77
|
+
Key: `${record.path}/${record.filename}`
|
|
78
|
+
}))
|
|
79
|
+
}
|
|
80
|
+
})),
|
|
81
|
+
Deleted = _yield$s3$send.Deleted;
|
|
82
|
+
return [Deleted.length, records.filter(record => !Deleted.find(item => item.Key === `${record.path}/${record.filename}`))];
|
|
83
|
+
})();
|
|
63
84
|
}
|
|
64
85
|
};
|
|
65
86
|
exports.default = _default;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AttachmentModel } from '.';
|
|
1
2
|
declare const _default: {
|
|
2
3
|
filenameKey: string;
|
|
3
4
|
make(storage: any): any;
|
|
@@ -13,5 +14,6 @@ declare const _default: {
|
|
|
13
14
|
Bucket: string;
|
|
14
15
|
};
|
|
15
16
|
};
|
|
17
|
+
delete(storage: any, records: AttachmentModel[]): Promise<[number, AttachmentModel[]]>;
|
|
16
18
|
};
|
|
17
19
|
export default _default;
|
|
@@ -4,8 +4,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
function _util() {
|
|
8
|
+
const data = require("util");
|
|
9
|
+
_util = function _util() {
|
|
10
|
+
return data;
|
|
11
|
+
};
|
|
12
|
+
return data;
|
|
13
|
+
}
|
|
7
14
|
var _constants = require("../constants");
|
|
8
15
|
var _utils = require("../utils");
|
|
16
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
17
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
9
18
|
var _default = {
|
|
10
19
|
filenameKey: 'url',
|
|
11
20
|
make(storage) {
|
|
@@ -28,6 +37,22 @@ var _default = {
|
|
|
28
37
|
Bucket: process.env.TX_COS_BUCKET
|
|
29
38
|
}
|
|
30
39
|
};
|
|
40
|
+
},
|
|
41
|
+
delete(storage, records) {
|
|
42
|
+
var _this = this;
|
|
43
|
+
return _asyncToGenerator(function* () {
|
|
44
|
+
const _this$make = _this.make(storage),
|
|
45
|
+
cos = _this$make.cos;
|
|
46
|
+
const _yield$promisify = yield (0, _util().promisify)(cos.deleteMultipleObject)({
|
|
47
|
+
Region: storage.options.Region,
|
|
48
|
+
Bucket: storage.options.Bucket,
|
|
49
|
+
Objects: records.map(record => ({
|
|
50
|
+
Key: `${record.path}/${record.filename}`
|
|
51
|
+
}))
|
|
52
|
+
}),
|
|
53
|
+
Deleted = _yield$promisify.Deleted;
|
|
54
|
+
return [Deleted.length, records.filter(record => !Deleted.find(item => item.Key === `${record.path}/${record.filename}`))];
|
|
55
|
+
})();
|
|
31
56
|
}
|
|
32
57
|
};
|
|
33
58
|
exports.default = _default;
|
package/package.json
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nocobase/plugin-file-manager",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.10.0-alpha.2",
|
|
4
|
+
"displayName": "file manager",
|
|
5
|
+
"displayName.zh-CN": "文件管理",
|
|
6
|
+
"description": "file management plugin.",
|
|
7
|
+
"description.zh-CN": "文件管理。",
|
|
5
8
|
"license": "AGPL-3.0",
|
|
6
9
|
"main": "./lib/index.js",
|
|
7
10
|
"types": "./lib/index.d.ts",
|
|
8
11
|
"dependencies": {
|
|
9
12
|
"@aws-sdk/client-s3": "^3.245.0",
|
|
10
13
|
"@koa/multer": "^3.0.0",
|
|
11
|
-
"@nocobase/actions": "0.
|
|
12
|
-
"@nocobase/client": "0.
|
|
13
|
-
"@nocobase/server": "0.
|
|
14
|
+
"@nocobase/actions": "0.10.0-alpha.2",
|
|
15
|
+
"@nocobase/client": "0.10.0-alpha.2",
|
|
16
|
+
"@nocobase/server": "0.10.0-alpha.2",
|
|
14
17
|
"cos-nodejs-sdk-v5": "^2.11.14",
|
|
15
18
|
"koa-static": "^5.0.0",
|
|
16
19
|
"mime-match": "^1.0.2",
|
|
@@ -21,9 +24,9 @@
|
|
|
21
24
|
"multer-s3": "^3.0.1"
|
|
22
25
|
},
|
|
23
26
|
"devDependencies": {
|
|
24
|
-
"@nocobase/test": "0.
|
|
27
|
+
"@nocobase/test": "0.10.0-alpha.2",
|
|
25
28
|
"@types/koa-multer": "^1.0.1",
|
|
26
29
|
"@types/multer": "^1.4.5"
|
|
27
30
|
},
|
|
28
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "85028ae1733fcbd46ecd5d291dacbdc175f7f073"
|
|
29
32
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const FileStorageShortcut: () => JSX.Element;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.FileStorageShortcut = void 0;
|
|
7
|
-
function _icons() {
|
|
8
|
-
const data = require("@ant-design/icons");
|
|
9
|
-
_icons = function _icons() {
|
|
10
|
-
return data;
|
|
11
|
-
};
|
|
12
|
-
return data;
|
|
13
|
-
}
|
|
14
|
-
function _shared() {
|
|
15
|
-
const data = require("@formily/shared");
|
|
16
|
-
_shared = function _shared() {
|
|
17
|
-
return data;
|
|
18
|
-
};
|
|
19
|
-
return data;
|
|
20
|
-
}
|
|
21
|
-
function _client() {
|
|
22
|
-
const data = require("@nocobase/client");
|
|
23
|
-
_client = function _client() {
|
|
24
|
-
return data;
|
|
25
|
-
};
|
|
26
|
-
return data;
|
|
27
|
-
}
|
|
28
|
-
function _react() {
|
|
29
|
-
const data = _interopRequireWildcard(require("react"));
|
|
30
|
-
_react = function _react() {
|
|
31
|
-
return data;
|
|
32
|
-
};
|
|
33
|
-
return data;
|
|
34
|
-
}
|
|
35
|
-
function _reactI18next() {
|
|
36
|
-
const data = require("react-i18next");
|
|
37
|
-
_reactI18next = function _reactI18next() {
|
|
38
|
-
return data;
|
|
39
|
-
};
|
|
40
|
-
return data;
|
|
41
|
-
}
|
|
42
|
-
var _storage = require("./schemas/storage");
|
|
43
|
-
var _StorageOptions = require("./StorageOptions");
|
|
44
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
45
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
46
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
47
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
48
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
49
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
50
|
-
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
51
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
52
|
-
const schema = {
|
|
53
|
-
type: 'object',
|
|
54
|
-
properties: {
|
|
55
|
-
[(0, _shared().uid)()]: {
|
|
56
|
-
'x-component': 'Action.Drawer',
|
|
57
|
-
type: 'void',
|
|
58
|
-
title: '{{t("File storages")}}',
|
|
59
|
-
properties: {
|
|
60
|
-
storageSchema: _storage.storageSchema
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
const FileStorageShortcut = () => {
|
|
66
|
-
const _useState = (0, _react().useState)(false),
|
|
67
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
68
|
-
visible = _useState2[0],
|
|
69
|
-
setVisible = _useState2[1];
|
|
70
|
-
const _useTranslation = (0, _reactI18next().useTranslation)(),
|
|
71
|
-
t = _useTranslation.t;
|
|
72
|
-
return _react().default.createElement(_client().ActionContext.Provider, {
|
|
73
|
-
value: {
|
|
74
|
-
visible,
|
|
75
|
-
setVisible
|
|
76
|
-
}
|
|
77
|
-
}, _react().default.createElement(_client().PluginManager.Toolbar.Item, {
|
|
78
|
-
eventKey: 'FileStorage',
|
|
79
|
-
onClick: () => {
|
|
80
|
-
setVisible(true);
|
|
81
|
-
},
|
|
82
|
-
icon: _react().default.createElement(_icons().FileOutlined, null),
|
|
83
|
-
title: t('File storages')
|
|
84
|
-
}), _react().default.createElement(_client().SchemaComponent, {
|
|
85
|
-
components: {
|
|
86
|
-
StorageOptions: _StorageOptions.StorageOptions
|
|
87
|
-
},
|
|
88
|
-
schema: schema
|
|
89
|
-
}));
|
|
90
|
-
};
|
|
91
|
-
exports.FileStorageShortcut = FileStorageShortcut;
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { Context, Next } from '@nocobase/actions';
|
|
2
|
-
export declare function middleware(ctx: Context, next: Next): Promise<any>;
|
|
3
|
-
export declare function createAction(ctx: Context, next: Next): Promise<any>;
|
|
4
|
-
export declare function uploadAction(ctx: Context, next: Next): Promise<never>;
|