doomistorage 1.0.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.
@@ -0,0 +1,26 @@
1
+ /// <reference types="node" />
2
+ import { FileConfig, FileResult } from "./declare";
3
+ import { FileBase } from "./file";
4
+ export declare class CosFile extends FileBase {
5
+ private bucket;
6
+ private cos;
7
+ private region;
8
+ constructor(config: any);
9
+ /**
10
+ *
11
+ * @param data
12
+ * @param fileName
13
+ * @param saveOption
14
+ * @param userInfo
15
+ */
16
+ saveString2File(data: string | Buffer, fileName: string, saveOption: FileConfig, userInfo?: any): Promise<FileResult>;
17
+ /**
18
+ *
19
+ * @param file
20
+ * @param fileName
21
+ * @param saveOption
22
+ * @param userInfo
23
+ * @returns
24
+ */
25
+ saveFileStream(file: any, fileName: any, saveOption: any, userInfo: any): Promise<FileResult>;
26
+ }
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CosFile = void 0;
16
+ const file_1 = require("./file");
17
+ const cos_nodejs_sdk_v5_1 = __importDefault(require("cos-nodejs-sdk-v5"));
18
+ class CosFile extends file_1.FileBase {
19
+ constructor(config) {
20
+ super();
21
+ this.cos = new cos_nodejs_sdk_v5_1.default({
22
+ SecretId: config.SecretId,
23
+ SecretKey: config.SecretKey
24
+ });
25
+ this.bucket = config.bucket;
26
+ this.region = config.region;
27
+ }
28
+ /**
29
+ *
30
+ * @param data
31
+ * @param fileName
32
+ * @param saveOption
33
+ * @param userInfo
34
+ */
35
+ saveString2File(data, fileName, saveOption, userInfo = {}) {
36
+ if (!data)
37
+ data = '';
38
+ let destinationFileName = this.getSaveFileName(saveOption, fileName, userInfo);
39
+ const streamBuffer = data instanceof Buffer ? data : Buffer.from(data, "utf-8");
40
+ const fileParam = {
41
+ Bucket: this.bucket,
42
+ Region: this.region,
43
+ Key: destinationFileName,
44
+ Body: streamBuffer,
45
+ ContentLength: streamBuffer.byteLength
46
+ };
47
+ return new Promise((success) => {
48
+ this.cos.putObject(fileParam, (err) => {
49
+ return success({ successed: err == null, filePath: destinationFileName });
50
+ });
51
+ });
52
+ }
53
+ /**
54
+ *
55
+ * @param file
56
+ * @param fileName
57
+ * @param saveOption
58
+ * @param userInfo
59
+ * @returns
60
+ */
61
+ saveFileStream(file, fileName, saveOption, userInfo) {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ const destinationFileName = this.getSaveFileName(saveOption, fileName, userInfo);
64
+ return new Promise((resolve) => {
65
+ if (saveOption.reRead) {
66
+ let dataArr = [], //存储读取的结果集合
67
+ len = 0;
68
+ file.on('data', (chunk) => {
69
+ dataArr.push(chunk);
70
+ len += chunk.length;
71
+ });
72
+ file.on('end', () => {
73
+ const fileParam = {
74
+ Bucket: this.bucket,
75
+ Region: this.region,
76
+ Key: destinationFileName,
77
+ Body: Buffer.concat(dataArr, len),
78
+ ContentLength: len // file.byteCount || saveOption.contentLength
79
+ };
80
+ this.cos.putObject(fileParam, (err) => {
81
+ return resolve({ successed: err == null, filePath: destinationFileName });
82
+ });
83
+ });
84
+ }
85
+ else {
86
+ const fileParam = {
87
+ Bucket: this.bucket,
88
+ Region: this.region,
89
+ // ContentDisposition: "form-data; name=\"file\"; filename=\"" + encodeURIComponent(destinationFileName) + "\"",
90
+ Key: destinationFileName,
91
+ Body: file,
92
+ ContentLength: file.byteCount || file.length
93
+ };
94
+ this.cos.putObject(fileParam, function (err) {
95
+ return resolve({ successed: err == null, filePath: destinationFileName });
96
+ });
97
+ }
98
+ });
99
+ });
100
+ }
101
+ }
102
+ exports.CosFile = CosFile;
@@ -0,0 +1,16 @@
1
+ export interface FileConfig {
2
+ 'subFolder': string;
3
+ 'saveDir': string;
4
+ 'fileName': string;
5
+ 'reRead'?: boolean;
6
+ 'basefolder'?: string;
7
+ }
8
+ /**
9
+ * 文件的API
10
+ */
11
+ export interface FileResult {
12
+ 'successed': boolean;
13
+ 'error'?: string;
14
+ 'errcode'?: number;
15
+ 'filePath'?: string;
16
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/file.d.ts ADDED
@@ -0,0 +1,47 @@
1
+ /// <reference types="node" />
2
+ import { FileConfig, FileResult } from './declare';
3
+ export declare abstract class FileBase {
4
+ /**
5
+ * 根据DoomiSoft框架生成的唯一文件名,用户上传后的文件存储后名称,防止重复
6
+ * @param {*} saveOption
7
+ * @param {*} fileName
8
+ * @param {*} userInfo
9
+ */
10
+ getSaveFileName(saveOption: FileConfig, fileName: string, userInfo?: any): string;
11
+ /**
12
+ * 获取文件需要保存的目录
13
+ * @param {*} saveOption
14
+ * @param {*} userInfo
15
+ */
16
+ getSaveFolder(saveOption: FileConfig, userInfo?: any): string;
17
+ /**
18
+ * 获取上传的文件仅包含文件名
19
+ * @param {*} saveOption
20
+ * @param {*} fileName
21
+ * @param {*} userInfo
22
+ */
23
+ getSaveOnlyFileName(saveOption: FileConfig, fileName: string, userInfo?: any): string;
24
+ /**
25
+ * 保存文件流
26
+ * @param fileName
27
+ * @param file
28
+ * @param saveOption
29
+ * @param userInfo
30
+ */
31
+ abstract saveFileStream(file: any, fileName: string, saveOption: FileConfig, userInfo: any): Promise<FileResult>;
32
+ /**
33
+ * 直接保存字符
34
+ * @param data
35
+ * @param fileName
36
+ * @param saveOption
37
+ * @param userInfo
38
+ */
39
+ abstract saveString2File(data: string | Buffer, fileName: string, saveOption: FileConfig, userInfo: any): Promise<FileResult>;
40
+ /**
41
+ * 创建多级目录
42
+ * @param dirpath
43
+ * @param mode
44
+ * @returns
45
+ */
46
+ mkdirsSync(dirpath: string, mode?: any): boolean;
47
+ }
package/dist/file.js ADDED
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FileBase = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const moment_1 = __importDefault(require("moment"));
10
+ const node_uuid_1 = require("node-uuid");
11
+ class FileBase {
12
+ /**
13
+ * 根据DoomiSoft框架生成的唯一文件名,用户上传后的文件存储后名称,防止重复
14
+ * @param {*} saveOption
15
+ * @param {*} fileName
16
+ * @param {*} userInfo
17
+ */
18
+ getSaveFileName(saveOption, fileName, userInfo = {}) {
19
+ let saveFolder = this.getSaveFolder(saveOption, userInfo);
20
+ console.log('getSaveFileName', fileName);
21
+ let _fileName = this.getSaveOnlyFileName(saveOption, fileName, userInfo);
22
+ return path_1.default.join(saveFolder, _fileName);
23
+ }
24
+ /**
25
+ * 获取文件需要保存的目录
26
+ * @param {*} saveOption
27
+ * @param {*} userInfo
28
+ */
29
+ getSaveFolder(saveOption, userInfo = {}) {
30
+ var _a;
31
+ let subFolder = '';
32
+ ///分目录存储
33
+ switch ((saveOption.subFolder || '').toLowerCase()) {
34
+ ///按日建造一个目录
35
+ case 'onebydate':
36
+ subFolder = (0, moment_1.default)().format('YYYYMMDD');
37
+ break;
38
+ ///按日建造多级目录
39
+ case 'mutilbydate':
40
+ subFolder = (0, moment_1.default)().year() + path_1.default.sep + (0, moment_1.default)().month() + path_1.default.sep + (0, moment_1.default)().day();
41
+ break;
42
+ ///用自己的id(当前登录的id)建造目录
43
+ case 'identity':
44
+ subFolder = (_a = userInfo.id) !== null && _a !== void 0 ? _a : (0, node_uuid_1.v4)();
45
+ break;
46
+ }
47
+ let saveFolder = path_1.default.join(saveOption.saveDir, subFolder + '');
48
+ if (userInfo && userInfo.subfolder)
49
+ saveFolder = path_1.default.join(saveFolder, userInfo.subfolder);
50
+ ///如果包含当前调用用户的信息,则替换整个路径中的@@关键字
51
+ if (userInfo) {
52
+ const matched = saveFolder.match(/@.*?@/g);
53
+ if (matched && matched.length > 0)
54
+ matched.forEach(ele => {
55
+ const matchValue = ele.substring(1, ele.length - 1);
56
+ if (matchValue.indexOf(' ') >= 0 || matchValue.indexOf(':') >= 0 || matchValue.indexOf('=') >= 0)
57
+ return;
58
+ let keyName = ele.substring(1, ele.length - 1);
59
+ const keyValue = userInfo[keyName] || '';
60
+ saveFolder = saveFolder.replace(ele, keyValue);
61
+ });
62
+ }
63
+ return saveFolder;
64
+ }
65
+ /**
66
+ * 获取上传的文件仅包含文件名
67
+ * @param {*} saveOption
68
+ * @param {*} fileName
69
+ * @param {*} userInfo
70
+ */
71
+ getSaveOnlyFileName(saveOption, fileName, userInfo = {}) {
72
+ var _a;
73
+ let _fileName = '';
74
+ switch ((saveOption.fileName || 'keep').toLowerCase()) {
75
+ ///保持和原有文件一致的文件名
76
+ case "keep":
77
+ _fileName = fileName;
78
+ break;
79
+ ///随机命名,但后缀必须一致
80
+ case "random":
81
+ _fileName = (0, node_uuid_1.v4)() + path_1.default.extname(fileName);
82
+ break;
83
+ ///使用当前账号的id命名
84
+ case "identity":
85
+ _fileName = ((_a = userInfo.id) !== null && _a !== void 0 ? _a : (0, node_uuid_1.v4)()) + path_1.default.extname(fileName);
86
+ break;
87
+ }
88
+ return _fileName;
89
+ }
90
+ /**
91
+ * 创建多级目录
92
+ * @param dirpath
93
+ * @param mode
94
+ * @returns
95
+ */
96
+ mkdirsSync(dirpath, mode = null) {
97
+ if (!fs_1.default.existsSync(dirpath)) {
98
+ let pathtmp = '', splitPath = dirpath.split(path_1.default.sep);
99
+ for (const dirname of splitPath) {
100
+ if (dirname.length == 0) {
101
+ pathtmp = path_1.default.sep;
102
+ continue;
103
+ }
104
+ if (pathtmp)
105
+ pathtmp = path_1.default.join(pathtmp, dirname);
106
+ else
107
+ pathtmp = dirname;
108
+ if (!fs_1.default.existsSync(pathtmp)) {
109
+ fs_1.default.mkdirSync(pathtmp, mode);
110
+ }
111
+ }
112
+ }
113
+ return true;
114
+ }
115
+ }
116
+ exports.FileBase = FileBase;
@@ -0,0 +1,74 @@
1
+ import { FileConfig, FileResult } from "./declare";
2
+ import { FileBase } from "./file";
3
+ /**
4
+ * 文件处理器类型
5
+ */
6
+ export declare const FileProviderEnum: {
7
+ readonly LOCAL: "local";
8
+ readonly TENCENTCOS: "tencentcos";
9
+ };
10
+ export type FileProviderEnum = typeof FileProviderEnum[keyof typeof FileProviderEnum];
11
+ /**
12
+ * 获取到文件处理的对象
13
+ * @param destination
14
+ * @returns
15
+ */
16
+ export declare function FileHelper(provider: FileProviderEnum, apiOption?: any): FileUtility;
17
+ /**
18
+ * 文件帮助工具
19
+ */
20
+ declare class FileUtility {
21
+ private fileHandler;
22
+ constructor(handler: FileBase);
23
+ /**
24
+ * 读取文件并保存至目标路径
25
+ * @param file 文件对象
26
+ * @param provider : 文件处理的实例名
27
+ * @param fileName :最终需要保存的文件名称
28
+ * @param saveOption :
29
+ * @param userInfo
30
+ * @returns
31
+ */
32
+ SaveFileStream(fileName: string, file: any, saveOption: FileConfig, userInfo?: any): Promise<FileResult>;
33
+ /**
34
+ * 保存字符流到对应的存储设备
35
+ * @param bufferData
36
+ * @param fileName
37
+ * @param saveOption
38
+ * @param userInfo
39
+ * @returns
40
+ */
41
+ SaveString2File(bufferData: any, fileName: string, saveOption: FileConfig, userInfo?: any): Promise<FileResult>;
42
+ /**
43
+ * 下载文件并且保存
44
+ * @param saveDestination
45
+ * @param fileUrl
46
+ * @param savesetting
47
+ * @param userinfo
48
+ * @param allowWebPFormat
49
+ * @returns
50
+ */
51
+ DownloadFile(fileUrl: string, savefileName: string, savesetting: FileConfig, userInfo?: any, allowWebPFormat?: boolean): Promise<FileResult>;
52
+ /**
53
+ * 预测生成文件保存后的文件路径
54
+ * @param saveOption
55
+ * @param fileName
56
+ * @param userInfo
57
+ */
58
+ getSaveFileName(saveOption: FileConfig, fileName: string, userInfo?: any): string;
59
+ /**
60
+ * 预测生成文件保存后的文件路径
61
+ * @param saveOption
62
+ * @param fileName
63
+ * @param userInfo
64
+ */
65
+ getSaveFolder(saveOption: FileConfig, userInfo?: any): string;
66
+ /**
67
+ * 预测生成文件保存后的文件名称
68
+ * @param saveOption
69
+ * @param fileName
70
+ * @param userInfo
71
+ */
72
+ getSaveOnlyFileName(saveOption: FileConfig, fileName: string, userInfo?: any): string;
73
+ }
74
+ export {};
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.FileHelper = exports.FileProviderEnum = void 0;
16
+ const cosfile_1 = require("./cosfile");
17
+ const localfile_1 = require("./localfile");
18
+ const axios_1 = __importDefault(require("axios"));
19
+ const path_1 = __importDefault(require("path"));
20
+ /**
21
+ * 文件处理器类型
22
+ */
23
+ exports.FileProviderEnum = {
24
+ LOCAL: 'local',
25
+ TENCENTCOS: 'tencentcos',
26
+ };
27
+ /**
28
+ * 获取到文件处理的对象
29
+ * @param destination
30
+ * @returns
31
+ */
32
+ function FileHelper(provider, apiOption) {
33
+ let filehandler;
34
+ switch (provider) {
35
+ case exports.FileProviderEnum.LOCAL:
36
+ filehandler = new localfile_1.LocalFile();
37
+ break;
38
+ case exports.FileProviderEnum.TENCENTCOS:
39
+ filehandler = new cosfile_1.CosFile(apiOption);
40
+ break;
41
+ default: filehandler = new localfile_1.LocalFile();
42
+ }
43
+ return new FileUtility(filehandler);
44
+ }
45
+ exports.FileHelper = FileHelper;
46
+ /**
47
+ * 文件帮助工具
48
+ */
49
+ class FileUtility {
50
+ constructor(handler) {
51
+ this.fileHandler = handler;
52
+ }
53
+ /**
54
+ * 读取文件并保存至目标路径
55
+ * @param file 文件对象
56
+ * @param provider : 文件处理的实例名
57
+ * @param fileName :最终需要保存的文件名称
58
+ * @param saveOption :
59
+ * @param userInfo
60
+ * @returns
61
+ */
62
+ SaveFileStream(fileName, file, saveOption, userInfo = {}) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ return yield this.fileHandler.saveFileStream(file, fileName, saveOption, userInfo);
65
+ });
66
+ }
67
+ /**
68
+ * 保存字符流到对应的存储设备
69
+ * @param bufferData
70
+ * @param fileName
71
+ * @param saveOption
72
+ * @param userInfo
73
+ * @returns
74
+ */
75
+ SaveString2File(bufferData, fileName, saveOption, userInfo = {}) {
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ return yield this.fileHandler.saveString2File(bufferData, fileName, saveOption, userInfo);
78
+ });
79
+ }
80
+ /**
81
+ * 下载文件并且保存
82
+ * @param saveDestination
83
+ * @param fileUrl
84
+ * @param savesetting
85
+ * @param userinfo
86
+ * @param allowWebPFormat
87
+ * @returns
88
+ */
89
+ DownloadFile(fileUrl, savefileName, savesetting, userInfo = {}, allowWebPFormat = false) {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ if (!allowWebPFormat && fileUrl.indexOf('&tp=webp') >= 0)
92
+ fileUrl = fileUrl.replace('&tp=webp', '');
93
+ let fileName = savefileName ? savefileName : path_1.default.basename(fileUrl);
94
+ try {
95
+ const downloadResult = yield axios_1.default.get(fileUrl, { responseType: 'arraybuffer' });
96
+ if (downloadResult.data) {
97
+ return this.SaveString2File(downloadResult.data, fileName, savesetting, userInfo);
98
+ }
99
+ return { successed: false, error: '下载文件中没有任何内容' };
100
+ }
101
+ catch (error) {
102
+ return { successed: false, error: error };
103
+ }
104
+ });
105
+ }
106
+ /**
107
+ * 预测生成文件保存后的文件路径
108
+ * @param saveOption
109
+ * @param fileName
110
+ * @param userInfo
111
+ */
112
+ getSaveFileName(saveOption, fileName, userInfo = {}) {
113
+ return this.fileHandler.getSaveFileName(saveOption, fileName, userInfo);
114
+ }
115
+ /**
116
+ * 预测生成文件保存后的文件路径
117
+ * @param saveOption
118
+ * @param fileName
119
+ * @param userInfo
120
+ */
121
+ getSaveFolder(saveOption, userInfo = {}) {
122
+ return this.fileHandler.getSaveFolder(saveOption, userInfo);
123
+ }
124
+ /**
125
+ * 预测生成文件保存后的文件名称
126
+ * @param saveOption
127
+ * @param fileName
128
+ * @param userInfo
129
+ */
130
+ getSaveOnlyFileName(saveOption, fileName, userInfo = {}) {
131
+ return this.fileHandler.getSaveOnlyFileName(saveOption, fileName, userInfo);
132
+ }
133
+ }
@@ -0,0 +1,2 @@
1
+ export * from './filehelper';
2
+ export * from './uploader';
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./filehelper"), exports);
18
+ __exportStar(require("./uploader"), exports);
@@ -0,0 +1,22 @@
1
+ /// <reference types="node" />
2
+ import { FileBase } from "./file";
3
+ import { FileConfig, FileResult } from "./declare";
4
+ export declare class LocalFile extends FileBase {
5
+ /**
6
+ * 直接保存字符串
7
+ * @param data
8
+ * @param fileName
9
+ * @param saveOption
10
+ * @param userInfo
11
+ */
12
+ saveString2File(data: string | Buffer, fileName: string, saveOption: FileConfig, userInfo?: any): Promise<FileResult>;
13
+ /**
14
+ * 读取文件对象并保存至本地存储
15
+ * @param file
16
+ * @param fileName
17
+ * @param saveOption
18
+ * @param userInfo
19
+ * @returns
20
+ */
21
+ saveFileStream(file: any, fileName: any, saveOption: FileConfig, userInfo: any): Promise<FileResult>;
22
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.LocalFile = void 0;
16
+ const file_1 = require("./file");
17
+ const fs_1 = __importDefault(require("fs"));
18
+ const path_1 = __importDefault(require("path"));
19
+ class LocalFile extends file_1.FileBase {
20
+ /**
21
+ * 直接保存字符串
22
+ * @param data
23
+ * @param fileName
24
+ * @param saveOption
25
+ * @param userInfo
26
+ */
27
+ saveString2File(data, fileName, saveOption, userInfo = {}) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ let baseFileName = this.getSaveFileName(saveOption, fileName, userInfo);
30
+ if (!baseFileName)
31
+ return { successed: false };
32
+ let fullFileName = path_1.default.resolve(saveOption.basefolder || '', baseFileName);
33
+ let _saveDir = path_1.default.dirname(fullFileName);
34
+ ///创建本地文件夹
35
+ if (!this.mkdirsSync(_saveDir))
36
+ return { successed: false };
37
+ return new Promise(resolve => {
38
+ fs_1.default.writeFile(fullFileName, data, (error) => {
39
+ return resolve({ successed: error == null, filePath: fullFileName });
40
+ });
41
+ });
42
+ });
43
+ }
44
+ /**
45
+ * 读取文件对象并保存至本地存储
46
+ * @param file
47
+ * @param fileName
48
+ * @param saveOption
49
+ * @param userInfo
50
+ * @returns
51
+ */
52
+ saveFileStream(file, fileName, saveOption, userInfo) {
53
+ return __awaiter(this, void 0, void 0, function* () {
54
+ let baseFileName = this.getSaveFileName(saveOption, fileName, userInfo);
55
+ if (!baseFileName)
56
+ return { successed: false };
57
+ let fullFileName = path_1.default.resolve(saveOption.basefolder || '', baseFileName);
58
+ let _saveDir = path_1.default.dirname(fullFileName);
59
+ ///创建本地文件夹
60
+ if (!this.mkdirsSync(_saveDir))
61
+ return { successed: false };
62
+ file.pipe(fs_1.default.createWriteStream(fullFileName));
63
+ return { successed: true, filePath: fullFileName };
64
+ });
65
+ }
66
+ }
67
+ exports.LocalFile = LocalFile;
@@ -0,0 +1,2 @@
1
+ import multer from 'multer';
2
+ export declare function getFileUploader(uploadConfig: any): multer.Multer;