@nocobase/plugin-file-manager 1.7.0-beta.8 → 1.7.0

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.
Files changed (47) hide show
  1. package/dist/client/index.d.ts +13 -0
  2. package/dist/client/index.js +1 -1
  3. package/dist/client/schemas/storageTypes/ali-oss.d.ts +8 -0
  4. package/dist/client/schemas/storageTypes/index.d.ts +8 -0
  5. package/dist/common/collections/attachments.d.ts +37 -0
  6. package/dist/common/collections/attachments.js +97 -0
  7. package/dist/common/collections/storages.d.ts +79 -0
  8. package/dist/common/collections/storages.js +98 -0
  9. package/dist/common/constants.d.ts +9 -0
  10. package/dist/common/constants.js +36 -0
  11. package/dist/externalVersion.js +11 -10
  12. package/dist/locale/de-DE.json +1 -1
  13. package/dist/locale/en-US.json +25 -6
  14. package/dist/locale/it-IT.json +1 -1
  15. package/dist/locale/ja-JP.json +1 -1
  16. package/dist/locale/nl-NL.json +27 -9
  17. package/dist/locale/zh-CN.json +4 -2
  18. package/dist/node_modules/@aws-sdk/client-s3/dist-cjs/index.js +834 -834
  19. package/dist/node_modules/@aws-sdk/client-s3/package.json +1 -1
  20. package/dist/node_modules/mime-match/package.json +1 -1
  21. package/dist/node_modules/mkdirp/package.json +1 -1
  22. package/dist/node_modules/multer-aliyun-oss/index.js +3 -3
  23. package/dist/node_modules/multer-aliyun-oss/package.json +1 -1
  24. package/dist/node_modules/multer-cos/index.js +5 -5
  25. package/dist/node_modules/multer-cos/package.json +1 -1
  26. package/dist/node_modules/multer-s3/index.js +837 -837
  27. package/dist/node_modules/multer-s3/package.json +1 -1
  28. package/dist/node_modules/url-join/package.json +1 -1
  29. package/dist/server/actions/attachments.d.ts +0 -1
  30. package/dist/server/actions/attachments.js +21 -41
  31. package/dist/server/actions/storages.js +4 -1
  32. package/dist/server/collections/attachments.d.ts +2 -2
  33. package/dist/server/collections/attachments.js +12 -67
  34. package/dist/server/collections/storages.d.ts +2 -2
  35. package/dist/server/collections/storages.js +12 -64
  36. package/dist/server/index.d.ts +1 -0
  37. package/dist/server/index.js +3 -0
  38. package/dist/server/server.d.ts +19 -3
  39. package/dist/server/server.js +70 -53
  40. package/dist/server/storages/ali-oss.js +1 -1
  41. package/dist/server/storages/index.d.ts +17 -5
  42. package/dist/server/storages/index.js +41 -3
  43. package/dist/server/storages/local.d.ts +6 -0
  44. package/dist/server/storages/local.js +13 -2
  45. package/dist/server/utils.d.ts +1 -1
  46. package/dist/server/utils.js +8 -4
  47. package/package.json +6 -5
@@ -39,8 +39,10 @@ __export(storages_exports, {
39
39
  StorageType: () => StorageType
40
40
  });
41
41
  module.exports = __toCommonJS(storages_exports);
42
- var import_utils = require("@nocobase/utils");
42
+ var import_axios = __toESM(require("axios"));
43
+ var import_path = __toESM(require("path"));
43
44
  var import_url_join = __toESM(require("url-join"));
45
+ var import_utils = require("@nocobase/utils");
44
46
  var import_utils2 = require("../utils");
45
47
  class StorageType {
46
48
  constructor(storage) {
@@ -53,10 +55,28 @@ class StorageType {
53
55
  getFileKey(record) {
54
56
  return (0, import_utils2.getFileKey)(record);
55
57
  }
58
+ getFileData(file, meta = {}) {
59
+ const { [this.constructor.filenameKey || "filename"]: name } = file;
60
+ const filename = import_path.default.basename(name);
61
+ const extname = import_path.default.extname(filename);
62
+ const path = (this.storage.path || "").replace(/^\/|\/$/g, "");
63
+ const data = {
64
+ title: Buffer.from(file.originalname, "latin1").toString("utf8").replace(extname, ""),
65
+ filename,
66
+ extname,
67
+ // TODO(feature): 暂时两者相同,后面 storage.path 模版化以后,这里只是 file 实际的 path
68
+ path,
69
+ size: file.size,
70
+ mimetype: file.mimetype,
71
+ meta,
72
+ storageId: this.storage.id
73
+ };
74
+ return data;
75
+ }
56
76
  getFileURL(file, preview) {
57
77
  if (file.url && (0, import_utils.isURL)(file.url)) {
58
- if (preview) {
59
- return (0, import_utils2.encodeURL)(file.url) + (this.storage.options.thumbnailRule || "");
78
+ if (preview && this.storage.options.thumbnailRule) {
79
+ return (0, import_utils2.encodeURL)(file.url) + this.storage.options.thumbnailRule;
60
80
  }
61
81
  return (0, import_utils2.encodeURL)(file.url);
62
82
  }
@@ -68,6 +88,24 @@ class StorageType {
68
88
  ].filter(Boolean);
69
89
  return (0, import_url_join.default)(keys);
70
90
  }
91
+ async getFileStream(file) {
92
+ try {
93
+ const fileURL = await this.getFileURL(file);
94
+ const requestOptions = {
95
+ responseType: "stream",
96
+ validateStatus: (status) => status === 200,
97
+ timeout: 3e4
98
+ // 30 seconds timeout
99
+ };
100
+ const response = await import_axios.default.get(fileURL, requestOptions);
101
+ return {
102
+ stream: response.data,
103
+ contentType: response.headers["content-type"]
104
+ };
105
+ } catch (err) {
106
+ throw new Error(`fetch file failed: ${err}`);
107
+ }
108
+ }
71
109
  }
72
110
  // Annotate the CommonJS export names for ESM import in node:
73
111
  0 && (module.exports = {
@@ -6,7 +6,9 @@
6
6
  * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
+ /// <reference types="node" />
9
10
  import multer from 'multer';
11
+ import type { Readable } from 'stream';
10
12
  import { AttachmentModel, StorageType } from '.';
11
13
  export default class extends StorageType {
12
14
  static defaults(): {
@@ -25,4 +27,8 @@ export default class extends StorageType {
25
27
  make(): multer.StorageEngine;
26
28
  delete(records: AttachmentModel[]): Promise<[number, AttachmentModel[]]>;
27
29
  getFileURL(file: AttachmentModel, preview?: boolean): Promise<any>;
30
+ getFileStream(file: AttachmentModel): Promise<{
31
+ stream: Readable;
32
+ contentType?: string;
33
+ }>;
28
34
  }
@@ -40,8 +40,8 @@ __export(local_exports, {
40
40
  });
41
41
  module.exports = __toCommonJS(local_exports);
42
42
  var import_utils = require("@nocobase/utils");
43
+ var import_fs = __toESM(require("fs"));
43
44
  var import_promises = __toESM(require("fs/promises"));
44
- var import_mkdirp = __toESM(require("mkdirp"));
45
45
  var import_multer = __toESM(require("multer"));
46
46
  var import_path = __toESM(require("path"));
47
47
  var import_url_join = __toESM(require("url-join"));
@@ -73,7 +73,8 @@ class local_default extends import__.StorageType {
73
73
  return import_multer.default.diskStorage({
74
74
  destination: (req, file, cb) => {
75
75
  const destPath = import_path.default.join(getDocumentRoot(this.storage), this.storage.path || "");
76
- (0, import_mkdirp.default)(destPath, (err) => cb(err, destPath));
76
+ const mkdirp = require("mkdirp");
77
+ mkdirp(destPath, (err) => cb(err, destPath));
77
78
  },
78
79
  filename: import_utils2.getFilename
79
80
  });
@@ -108,4 +109,14 @@ class local_default extends import__.StorageType {
108
109
  }
109
110
  return (0, import_url_join.default)(process.env.APP_PUBLIC_PATH, url);
110
111
  }
112
+ async getFileStream(file) {
113
+ const filePath = import_path.default.join(process.cwd(), "storage", "uploads", file.path || "", file.filename);
114
+ if (await import_promises.default.stat(filePath)) {
115
+ return {
116
+ stream: import_fs.default.createReadStream(filePath),
117
+ contentType: file.mimetype
118
+ };
119
+ }
120
+ throw new Error(`File not found: ${filePath}`);
121
+ }
111
122
  }
@@ -10,4 +10,4 @@ export declare function getFilename(req: any, file: any, cb: any): void;
10
10
  export declare const cloudFilenameGetter: (storage: any) => (req: any, file: any, cb: any) => void;
11
11
  export declare function getFileKey(record: any): any;
12
12
  export declare function ensureUrlEncoded(value: any): any;
13
- export declare function encodeURL(url: any): string;
13
+ export declare function encodeURL(url: any): any;
@@ -60,7 +60,7 @@ const cloudFilenameGetter = (storage) => (req, file, cb) => {
60
60
  });
61
61
  };
62
62
  function getFileKey(record) {
63
- return (0, import_url_join.default)(record.path, record.filename).replace(/^\//, "");
63
+ return (0, import_url_join.default)(record.path || "", record.filename).replace(/^\//, "");
64
64
  }
65
65
  function ensureUrlEncoded(value) {
66
66
  try {
@@ -76,9 +76,13 @@ function encodePathKeepSlash(path2) {
76
76
  return path2.split("/").map((segment) => ensureUrlEncoded(segment)).join("/");
77
77
  }
78
78
  function encodeURL(url) {
79
- const parsedUrl = new URL(url);
80
- parsedUrl.pathname = encodePathKeepSlash(parsedUrl.pathname);
81
- return parsedUrl.toString();
79
+ try {
80
+ const parsedUrl = new URL(url);
81
+ parsedUrl.pathname = encodePathKeepSlash(parsedUrl.pathname);
82
+ return parsedUrl.toString();
83
+ } catch (error) {
84
+ return url;
85
+ }
82
86
  }
83
87
  // Annotate the CommonJS export names for ESM import in node:
84
88
  0 && (module.exports = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocobase/plugin-file-manager",
3
- "version": "1.7.0-beta.8",
3
+ "version": "1.7.0",
4
4
  "displayName": "File manager",
5
5
  "displayName.zh-CN": "文件管理器",
6
6
  "description": "Provides files storage services with files collection template and attachment field.",
@@ -15,15 +15,16 @@
15
15
  "@formily/core": "2.x",
16
16
  "@formily/react": "2.x",
17
17
  "@formily/shared": "2.x",
18
- "@koa/multer": "^3.0.0",
19
- "@types/koa-multer": "^1.0.1",
18
+ "@koa/multer": "^3.1.0",
19
+ "@types/koa-multer": "^1.0.4",
20
20
  "@types/multer": "^1.4.5",
21
21
  "antd": "5.x",
22
+ "axios": "^1.7.0",
22
23
  "cos-nodejs-sdk-v5": "^2.11.14",
23
24
  "koa-static": "^5.0.0",
24
25
  "mime-match": "^1.0.2",
25
26
  "mkdirp": "~0.5.4",
26
- "multer": "^1.4.2",
27
+ "multer": "^1.4.5-lts.2",
27
28
  "multer-aliyun-oss": "2.1.3",
28
29
  "multer-cos": "^1.0.3",
29
30
  "multer-s3": "^3.0.1",
@@ -44,5 +45,5 @@
44
45
  "Collections",
45
46
  "Collection fields"
46
47
  ],
47
- "gitHead": "9ad35ee90db98d95dfa660645d155f4f4e81b47c"
48
+ "gitHead": "767ae089e404a104d718962272289c0bec01803a"
48
49
  }