@nger/fk-upload 1.0.6 → 1.0.9

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 (36) hide show
  1. package/dist/entities/fk-download-task.entity.d.ts +2 -0
  2. package/dist/entities/fk-download-task.entity.js +20 -2
  3. package/dist/entities/fk-login-account.entity.d.ts +1 -0
  4. package/dist/entities/fk-login-account.entity.js +10 -1
  5. package/dist/fk-upload.module.js +18 -12
  6. package/dist/fk.service.d.ts +1 -2
  7. package/dist/main.js +18 -1
  8. package/dist/mq-runner.d.ts +5 -0
  9. package/dist/mq-runner.js +21 -0
  10. package/dist/static/task-manage.d.ts +6 -0
  11. package/dist/static/task-manage.js +35 -0
  12. package/dist/templates/add-fk-login.d.ts +5 -1
  13. package/dist/templates/add-fk-login.js +35 -7
  14. package/dist/templates/add-task.d.ts +10 -0
  15. package/dist/templates/add-task.js +76 -0
  16. package/dist/templates/component.js +3 -0
  17. package/dist/templates/download-task.d.ts +5 -5
  18. package/dist/templates/download-task.js +11 -147
  19. package/dist/templates/error.d.ts +3 -0
  20. package/dist/templates/error.js +41 -0
  21. package/dist/templates/help.d.ts +0 -1
  22. package/dist/templates/help.js +0 -21
  23. package/dist/templates/setting.d.ts +10 -0
  24. package/dist/templates/setting.js +85 -0
  25. package/dist/templates/task-manage.d.ts +8 -1
  26. package/dist/templates/task-manage.js +54 -14
  27. package/dist/templates/task.service.d.ts +66 -0
  28. package/dist/templates/task.service.js +451 -0
  29. package/dist/templates/upload-task.d.ts +0 -1
  30. package/dist/templates/upload-task.js +0 -2
  31. package/dist/templates/upload.js +6 -3
  32. package/dist/templates/upload.service.d.ts +12 -0
  33. package/dist/templates/upload.service.js +50 -0
  34. package/docs.md +34 -0
  35. package/package.json +10 -1
  36. package/pnpm-lock.yaml +127 -0
@@ -11,173 +11,37 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  return function (target, key) { decorator(target, key, paramIndex); }
13
13
  };
14
- var __importDefault = (this && this.__importDefault) || function (mod) {
15
- return (mod && mod.__esModule) ? mod : { "default": mod };
16
- };
17
14
  Object.defineProperty(exports, "__esModule", { value: true });
18
15
  exports.DownloadTaskController = exports.CREATE_TASK_DOWNLOADING = void 0;
19
16
  const core_1 = require("@nger/core");
20
17
  const http_1 = require("@nger/http");
21
18
  const typeorm_1 = require("@nger/typeorm");
22
- const entities_1 = require("../entities");
23
- const request_1 = require("request");
24
- const path_1 = require("path");
25
- const cids_1 = __importDefault(require("cids"));
26
- const multihashing_async_1 = __importDefault(require("multihashing-async"));
27
- const url_1 = require("url");
28
- const rxjs_1 = require("rxjs");
29
- const ws_1 = require("@nger/ws");
30
- const fs_1 = require("fs");
31
- const md5_file_1 = __importDefault(require("md5-file"));
19
+ const upload_service_1 = require("./upload.service");
32
20
  // md5-file
33
21
  exports.CREATE_TASK_DOWNLOADING = `@nger/fk-upload/create-task/downloading`;
34
22
  let DownloadTaskController = class DownloadTaskController {
35
23
  db;
36
- constructor(db) {
24
+ upload;
25
+ constructor(db, upload) {
37
26
  this.db = db;
27
+ this.upload = upload;
38
28
  }
39
- async createTask(url) {
40
- const observable = await this.createUrl(url);
41
- observable.listen.pipe((0, rxjs_1.throttleTime)(1000), (0, rxjs_1.switchMap)(async (res) => {
42
- const exist = await this.db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: observable.filename } });
43
- if (exist) {
44
- await this.db.manager.update(entities_1.FkDownloadTaskEntity, exist.filename, { size: res.size });
45
- }
46
- else {
47
- await this.db.manager.save(entities_1.FkDownloadTaskEntity, res);
48
- }
49
- return res;
50
- })).subscribe({
51
- next: () => { },
52
- complete: async () => {
53
- const exist = await this.db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: observable.filename } });
54
- const md5 = await (0, md5_file_1.default)(exist.path);
55
- await this.db.manager.update(entities_1.FkDownloadTaskEntity, observable.filename, { status: 1, fileMd5: md5 });
56
- }
57
- });
58
- return `success`;
59
- }
60
- async createUrl(url) {
61
- const hash = await (0, multihashing_async_1.default)(Buffer.from(url), 'sha1', 16);
62
- const cid = new cids_1.default(1, 'raw', hash, 'base64');
63
- const _url = new url_1.URL(url);
64
- const pathname = _url.pathname;
65
- const ext = (0, path_1.extname)(pathname);
66
- const filename = cid.toString('base64') + ext;
67
- let item = await this.db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename } });
68
- if (item) {
69
- let task = item;
70
- if (task.status) {
71
- return {
72
- listen: (0, rxjs_1.of)(task),
73
- filename
74
- };
75
- }
76
- const observable = new rxjs_1.Observable((sub) => {
77
- // go on
78
- const writeStream = (0, fs_1.createWriteStream)(task.path, { start: task.size });
79
- const req = (0, request_1.get)(url, {
80
- headers: {
81
- 'Content-Type': 'application/octet-stream'
82
- }
83
- });
84
- let length = 0;
85
- req.on('data', (buf) => {
86
- length += buf.length;
87
- if (length >= task.size) {
88
- task.size = length;
89
- writeStream.write(buf, (err) => {
90
- if (err)
91
- sub.error(err);
92
- });
93
- sub.next(task);
94
- }
95
- });
96
- req.on('end', () => {
97
- sub.complete();
98
- writeStream.end();
99
- });
100
- });
101
- return { listen: observable, filename };
102
- }
103
- ;
104
- const observable = new rxjs_1.Observable((sub) => {
105
- let task = new entities_1.FkDownloadTaskEntity();
106
- task.url = url;
107
- const req = (0, request_1.get)(url);
108
- const path = (0, path_1.join)(__dirname, 'dist', encodeURIComponent(filename));
109
- const writeStream = (0, fs_1.createWriteStream)(path);
110
- task.path = path;
111
- let total = 0;
112
- let length = 0;
113
- task.filename = filename;
114
- task.uploadSize = 0;
115
- req.on('data', (buf) => {
116
- length += buf.length;
117
- task.size = length;
118
- writeStream.write(buf, (err) => {
119
- if (err)
120
- sub.error(err);
121
- });
122
- sub.next(task);
123
- });
124
- req.on('end', () => {
125
- sub.complete();
126
- writeStream.end();
127
- });
128
- req.on('response', (resp) => {
129
- const headers = resp.headers;
130
- total = Number(Reflect.get(headers, 'content-length'));
131
- task.totalSize = total;
132
- task.size = 0;
133
- task.status = 0;
134
- sub.next(task);
135
- });
136
- });
137
- return { listen: observable, filename };
138
- }
139
- async createTaskWs(url, ctx) {
140
- const observable = await this.createUrl(url);
141
- return observable.listen.pipe((0, rxjs_1.throttleTime)(1000), (0, rxjs_1.switchMap)(async (res) => {
142
- const exist = await this.db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: observable.filename } });
143
- if (exist) {
144
- await this.db.manager.update(entities_1.FkDownloadTaskEntity, exist.filename, { size: res.size });
145
- }
146
- else {
147
- await this.db.manager.save(entities_1.FkDownloadTaskEntity, res);
148
- }
149
- ctx.send({
150
- action: exports.CREATE_TASK_DOWNLOADING,
151
- data: res
152
- });
153
- return res;
154
- })).subscribe({
155
- next: () => { },
156
- complete: async () => {
157
- const exist = await this.db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: observable.filename } });
158
- const md5 = await (0, md5_file_1.default)(exist.path);
159
- await this.db.manager.update(entities_1.FkDownloadTaskEntity, observable.filename, { status: 1, fileMd5: md5 });
160
- }
161
- });
29
+ async createTask(url, ctx) {
30
+ this.upload.createDownLoadTask(url);
31
+ ctx.redirect('/@nger/fk-upload/help');
32
+ return;
162
33
  }
163
34
  };
164
35
  __decorate([
165
36
  (0, http_1.Get)('create-task'),
166
37
  __param(0, (0, http_1.Query)('url')),
38
+ __param(1, (0, core_1.Inject)(http_1.CONTEXT)),
167
39
  __metadata("design:type", Function),
168
- __metadata("design:paramtypes", [String]),
40
+ __metadata("design:paramtypes", [String, Object]),
169
41
  __metadata("design:returntype", Promise)
170
42
  ], DownloadTaskController.prototype, "createTask", null);
171
- __decorate([
172
- (0, ws_1.On)(`create-task`),
173
- __param(0, (0, http_1.Body)('url')),
174
- __param(1, (0, core_1.Inject)(ws_1.WsPluginContext)),
175
- __metadata("design:type", Function),
176
- __metadata("design:paramtypes", [String, ws_1.WsPluginContext]),
177
- __metadata("design:returntype", Promise)
178
- ], DownloadTaskController.prototype, "createTaskWs", null);
179
43
  DownloadTaskController = __decorate([
180
44
  (0, core_1.Controller)('@nger/fk-upload'),
181
- __metadata("design:paramtypes", [typeorm_1.Db])
45
+ __metadata("design:paramtypes", [typeorm_1.Db, upload_service_1.UploadService])
182
46
  ], DownloadTaskController);
183
47
  exports.DownloadTaskController = DownloadTaskController;
@@ -0,0 +1,3 @@
1
+ export declare class ErrorController {
2
+ error(msg: string): JSX.Element;
3
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.ErrorController = void 0;
19
+ const core_1 = require("@nger/core");
20
+ const http_1 = require("@nger/http");
21
+ const component_1 = require("./component");
22
+ const react_1 = __importDefault(require("react"));
23
+ let ErrorController = class ErrorController {
24
+ error(msg) {
25
+ return react_1.default.createElement(component_1.Nav, { active: -1 },
26
+ react_1.default.createElement("div", { className: "card" },
27
+ react_1.default.createElement("div", { className: "card-body" },
28
+ react_1.default.createElement("div", { className: "alert alert-danger", role: "alert" }, msg))));
29
+ }
30
+ };
31
+ __decorate([
32
+ (0, http_1.Get)('error'),
33
+ __param(0, (0, http_1.Query)('msg')),
34
+ __metadata("design:type", Function),
35
+ __metadata("design:paramtypes", [String]),
36
+ __metadata("design:returntype", void 0)
37
+ ], ErrorController.prototype, "error", null);
38
+ ErrorController = __decorate([
39
+ (0, core_1.Controller)('@nger/fk-upload')
40
+ ], ErrorController);
41
+ exports.ErrorController = ErrorController;
@@ -2,6 +2,5 @@ import { Db } from '@nger/typeorm';
2
2
  export declare class HelpController {
3
3
  private db;
4
4
  constructor(db: Db);
5
- addTask(): JSX.Element;
6
5
  help(): Promise<JSX.Element>;
7
6
  }
@@ -24,21 +24,6 @@ let HelpController = class HelpController {
24
24
  constructor(db) {
25
25
  this.db = db;
26
26
  }
27
- addTask() {
28
- return react_1.default.createElement(component_1.Nav, { active: 3 },
29
- react_1.default.createElement("div", { className: "card" },
30
- react_1.default.createElement("div", { className: "card-body" },
31
- react_1.default.createElement("form", { action: "" },
32
- react_1.default.createElement("div", { className: "form-group" },
33
- react_1.default.createElement("label", { htmlFor: "url" }, "url"),
34
- react_1.default.createElement("input", { type: "text", className: 'form-control', id: "url" })),
35
- react_1.default.createElement("div", { className: "form-group" },
36
- react_1.default.createElement("label", { htmlFor: "w7Username" }, "w7 account"),
37
- react_1.default.createElement("input", { type: "text", className: 'form-control', id: "w7Username" })),
38
- react_1.default.createElement("div", { className: "form-group" },
39
- react_1.default.createElement("button", { type: "submit", className: "btn btn-primary" }, "submit"),
40
- react_1.default.createElement("button", { type: "reset", className: "btn" }, "reset"))))));
41
- }
42
27
  async help() {
43
28
  const list = await this.db.manager.find(fk_login_entity_1.FkLoginEntity, { where: {} });
44
29
  return react_1.default.createElement(component_1.Nav, { active: 0 },
@@ -69,12 +54,6 @@ let HelpController = class HelpController {
69
54
  }))))));
70
55
  }
71
56
  };
72
- __decorate([
73
- (0, http_1.Get)('add-task'),
74
- __metadata("design:type", Function),
75
- __metadata("design:paramtypes", []),
76
- __metadata("design:returntype", void 0)
77
- ], HelpController.prototype, "addTask", null);
78
57
  __decorate([
79
58
  (0, http_1.Get)('help'),
80
59
  __metadata("design:type", Function),
@@ -0,0 +1,10 @@
1
+ import { TaskService } from './task.service';
2
+ import { Client } from '@nger/redis';
3
+ import { Context } from 'koa';
4
+ export declare class SettingController {
5
+ private task;
6
+ private redis;
7
+ constructor(task: TaskService, redis: Client);
8
+ saveSetting(body: any, ctx: Context): void;
9
+ setting(): Promise<JSX.Element>;
10
+ }
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.SettingController = void 0;
19
+ const core_1 = require("@nger/core");
20
+ const http_1 = require("@nger/http");
21
+ const react_1 = __importDefault(require("react"));
22
+ const component_1 = require("./component");
23
+ const task_service_1 = require("./task.service");
24
+ const redis_1 = require("@nger/redis");
25
+ let SettingController = class SettingController {
26
+ task;
27
+ redis;
28
+ constructor(task, redis) {
29
+ this.task = task;
30
+ this.redis = redis;
31
+ }
32
+ saveSetting(body, ctx) {
33
+ const task = {
34
+ name: body.name,
35
+ rule: body.rule
36
+ };
37
+ this.task.addScheduleTask(task);
38
+ this.redis.set(`setting`, JSON.stringify(task));
39
+ ctx.redirect(`/@nger/fk-upload/setting`);
40
+ return;
41
+ }
42
+ async setting() {
43
+ const setting = await new Promise((resolve, reject) => {
44
+ this.redis.get(`setting`, (err, reply) => {
45
+ if (err)
46
+ return reject(err);
47
+ if (reply)
48
+ resolve(JSON.parse(reply));
49
+ resolve({});
50
+ });
51
+ });
52
+ return react_1.default.createElement(component_1.Nav, { active: 4 },
53
+ react_1.default.createElement("div", { className: "card" },
54
+ react_1.default.createElement("div", { className: "card-body" },
55
+ react_1.default.createElement("form", { action: "/@nger/fk-upload/setting", method: 'post', encType: 'application/x-www-form-urlencoded' },
56
+ react_1.default.createElement("div", { className: "form-group" },
57
+ react_1.default.createElement("label", { htmlFor: "name" }, "name"),
58
+ react_1.default.createElement("input", { type: "text", className: 'form-control', onChange: e => { }, value: setting.name, id: "name", name: "name" })),
59
+ react_1.default.createElement("div", { className: "form-group" },
60
+ react_1.default.createElement("label", { htmlFor: "rule" }, "rule"),
61
+ react_1.default.createElement("input", { type: "text", className: 'form-control', onChange: e => { }, value: setting.rule, id: "rule", name: "rule" })),
62
+ react_1.default.createElement("div", { className: "form-group" },
63
+ react_1.default.createElement("button", { type: "submit", className: 'btn btn-primary' }, "save"),
64
+ react_1.default.createElement("button", { type: "reset", className: 'btn' }, "reset"))))));
65
+ }
66
+ };
67
+ __decorate([
68
+ (0, http_1.Post)('setting'),
69
+ __param(0, (0, http_1.Body)()),
70
+ __param(1, (0, core_1.Inject)(http_1.CONTEXT)),
71
+ __metadata("design:type", Function),
72
+ __metadata("design:paramtypes", [Object, Object]),
73
+ __metadata("design:returntype", void 0)
74
+ ], SettingController.prototype, "saveSetting", null);
75
+ __decorate([
76
+ (0, http_1.Get)(`setting`),
77
+ __metadata("design:type", Function),
78
+ __metadata("design:paramtypes", []),
79
+ __metadata("design:returntype", Promise)
80
+ ], SettingController.prototype, "setting", null);
81
+ SettingController = __decorate([
82
+ (0, core_1.Controller)(`@nger/fk-upload`),
83
+ __metadata("design:paramtypes", [task_service_1.TaskService, redis_1.Client])
84
+ ], SettingController);
85
+ exports.SettingController = SettingController;
@@ -1,6 +1,13 @@
1
+ import { Config } from '@nger/core';
1
2
  import { Db } from '@nger/typeorm';
3
+ import { UploadService } from './upload.service';
4
+ import { Context } from 'koa';
2
5
  export declare class TaskManageController {
3
6
  private db;
4
- constructor(db: Db);
7
+ private config;
8
+ private upload;
9
+ constructor(db: Db, config: Config, upload: UploadService);
10
+ taskContinue(filename: string, ctx: Context): void;
5
11
  taskManage(): Promise<JSX.Element>;
12
+ staticTaskManage(ctx: Context): string;
6
13
  }
@@ -8,6 +8,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
11
14
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
15
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
16
  };
@@ -19,31 +22,48 @@ const typeorm_1 = require("@nger/typeorm");
19
22
  const react_1 = __importDefault(require("react"));
20
23
  const entities_1 = require("../entities");
21
24
  const component_1 = require("./component");
25
+ const fs_extra_1 = require("fs-extra");
26
+ const path_1 = require("path");
27
+ const upload_service_1 = require("./upload.service");
22
28
  function getStatusTitle(status) {
23
29
  switch (status) {
24
30
  case 0:
25
- return 'downling';
31
+ return 'downloading';
26
32
  case 1:
27
33
  return 'uploading';
28
34
  default:
29
- return 'unknow';
35
+ return 'finish';
30
36
  }
31
37
  }
32
38
  let TaskManageController = class TaskManageController {
33
39
  db;
34
- constructor(db) {
40
+ config;
41
+ upload;
42
+ constructor(db, config, upload) {
35
43
  this.db = db;
44
+ this.config = config;
45
+ this.upload = upload;
46
+ }
47
+ taskContinue(filename, ctx) {
48
+ if (filename)
49
+ this.upload.continueTask(decodeURIComponent(filename));
50
+ ctx.redirect(`/@nger/fk-upload/task-manage`);
51
+ return;
36
52
  }
37
53
  async taskManage() {
38
54
  const tasks = await this.db.manager.find(entities_1.FkDownloadTaskEntity, { where: {}, order: { loginId: "DESC" } });
39
55
  return react_1.default.createElement(component_1.Nav, { active: 2 },
56
+ react_1.default.createElement("script", { dangerouslySetInnerHTML: {
57
+ __html: `
58
+ window.WS_PORT = ${this.config.get(`WS_PORT`)};
59
+ `
60
+ } }),
40
61
  react_1.default.createElement("div", { className: "card" },
41
62
  react_1.default.createElement("div", { className: "card-body" },
42
63
  react_1.default.createElement("table", { className: 'table' },
43
64
  react_1.default.createElement("thead", null,
44
65
  react_1.default.createElement("tr", null,
45
- react_1.default.createElement("td", null, "filename"),
46
- react_1.default.createElement("td", { width: '240px' }, "url"),
66
+ react_1.default.createElement("td", { width: '180px' }, "filename"),
47
67
  react_1.default.createElement("td", null, "status"),
48
68
  react_1.default.createElement("td", null, "total size"),
49
69
  react_1.default.createElement("td", null, "download size"),
@@ -51,28 +71,48 @@ let TaskManageController = class TaskManageController {
51
71
  react_1.default.createElement("td", { width: '240px' }, "upload url"),
52
72
  react_1.default.createElement("td", null))),
53
73
  react_1.default.createElement("tbody", null, tasks.map((task, key) => {
74
+ const _continue = `/@nger/fk-upload/task-continue?filename=${encodeURIComponent(task.filename)}`;
54
75
  return react_1.default.createElement("tr", { key: key },
55
76
  react_1.default.createElement("td", null, task.filename),
56
- react_1.default.createElement("td", null, task.url),
57
77
  react_1.default.createElement("td", null, getStatusTitle(task.status)),
58
- react_1.default.createElement("td", null, task.totalSize),
59
- react_1.default.createElement("td", null, task.size),
60
- react_1.default.createElement("td", null, task.uploadSize),
61
- react_1.default.createElement("td", null, task.uploadUrl),
78
+ react_1.default.createElement("td", { id: task.filename + '-total' }, task.totalSize),
79
+ react_1.default.createElement("td", { id: task.filename + '-size' }, task.size),
80
+ react_1.default.createElement("td", { id: task.filename + '-upload-size' }, task.uploadSize),
81
+ react_1.default.createElement("td", { id: task.filename + '-upload-url' }, task.uploadUrl),
62
82
  react_1.default.createElement("td", null,
63
- react_1.default.createElement("a", { href: "", className: 'btn' }, "download"),
64
- react_1.default.createElement("a", { href: "", className: 'btn' }, "upload")));
65
- }))))));
83
+ react_1.default.createElement("a", { href: _continue, className: 'btn' }, "continue")));
84
+ }))))),
85
+ react_1.default.createElement("script", { src: "/@nger/fk-upload/static/task-manage.js?t=" + new Date().getTime() }));
86
+ }
87
+ staticTaskManage(ctx) {
88
+ ctx.type = 'js';
89
+ const content = (0, fs_extra_1.readFileSync)((0, path_1.join)(__dirname, '../static/task-manage.js')).toString('utf-8');
90
+ return content;
66
91
  }
67
92
  };
93
+ __decorate([
94
+ (0, http_1.Get)('task-continue'),
95
+ __param(0, (0, http_1.Query)('filename')),
96
+ __param(1, (0, core_1.Inject)(http_1.CONTEXT)),
97
+ __metadata("design:type", Function),
98
+ __metadata("design:paramtypes", [String, Object]),
99
+ __metadata("design:returntype", void 0)
100
+ ], TaskManageController.prototype, "taskContinue", null);
68
101
  __decorate([
69
102
  (0, http_1.Get)('task-manage'),
70
103
  __metadata("design:type", Function),
71
104
  __metadata("design:paramtypes", []),
72
105
  __metadata("design:returntype", Promise)
73
106
  ], TaskManageController.prototype, "taskManage", null);
107
+ __decorate([
108
+ (0, http_1.Get)('static/task-manage.js'),
109
+ __param(0, (0, core_1.Inject)(http_1.CONTEXT)),
110
+ __metadata("design:type", Function),
111
+ __metadata("design:paramtypes", [Object]),
112
+ __metadata("design:returntype", void 0)
113
+ ], TaskManageController.prototype, "staticTaskManage", null);
74
114
  TaskManageController = __decorate([
75
115
  (0, core_1.Controller)(`@nger/fk-upload`),
76
- __metadata("design:paramtypes", [typeorm_1.Db])
116
+ __metadata("design:paramtypes", [typeorm_1.Db, core_1.Config, upload_service_1.UploadService])
77
117
  ], TaskManageController);
78
118
  exports.TaskManageController = TaskManageController;
@@ -0,0 +1,66 @@
1
+ import { Injector } from '@nger/core';
2
+ import { RabbitMqService } from '@nger/rabbitmq';
3
+ import { Client } from '@nger/redis';
4
+ import { Db } from '@nger/typeorm';
5
+ import { Observable } from 'rxjs';
6
+ import { WsService } from '@nger/ws';
7
+ export interface DownloadTask {
8
+ filename: string;
9
+ path: string;
10
+ size: number;
11
+ url: string;
12
+ totalSize: number;
13
+ }
14
+ export interface UploadTask {
15
+ filename: string;
16
+ path: string;
17
+ uploadUrl: string;
18
+ start: number;
19
+ end: number;
20
+ total: number;
21
+ cookies: string;
22
+ aid: number;
23
+ folderId: number;
24
+ fileMd5: string;
25
+ index: number;
26
+ splitSize: number;
27
+ totalChunks: number;
28
+ complete: boolean;
29
+ topicId: number;
30
+ }
31
+ import { ScheduleService } from '@nger/schedule';
32
+ import { W7DataSource } from '@nger/w7';
33
+ export interface EffectTask {
34
+ filename: string;
35
+ uploadUrl: string;
36
+ topicId: number;
37
+ }
38
+ export interface ScheduleTask {
39
+ name: string;
40
+ rule: string;
41
+ }
42
+ export declare class TaskService {
43
+ private rabbit;
44
+ private redis;
45
+ private db;
46
+ private ws;
47
+ private schedule;
48
+ private w7;
49
+ private injector;
50
+ constructor(rabbit: RabbitMqService, redis: Client, db: Db, ws: WsService, schedule: ScheduleService, w7: W7DataSource, injector: Injector);
51
+ addDownloadTask(task: DownloadTask): Promise<void>;
52
+ addUploadTask(task: UploadTask): Promise<void>;
53
+ beginUploadTask(filename: string): Promise<void>;
54
+ addEffectTask(task: EffectTask): Promise<void>;
55
+ addScheduleTask(task: ScheduleTask): Promise<void>;
56
+ createDownLoadTask(url: string, fkLoginId: number, topicId: number): Promise<void>;
57
+ receiveScheduleTask(): Promise<void>;
58
+ receiveEffectTask(): Promise<void>;
59
+ receiveUploadTask(): Promise<void>;
60
+ receiveDownloadTask(): Promise<void>;
61
+ private getUploadInfourl;
62
+ private encodeURIComponent;
63
+ private getUploadUrl;
64
+ startUploadTask(filename: string): Promise<void>;
65
+ download(task: DownloadTask): Observable<DownloadTask>;
66
+ }