@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.
- package/dist/entities/fk-download-task.entity.d.ts +2 -0
- package/dist/entities/fk-download-task.entity.js +20 -2
- package/dist/entities/fk-login-account.entity.d.ts +1 -0
- package/dist/entities/fk-login-account.entity.js +10 -1
- package/dist/fk-upload.module.js +18 -12
- package/dist/fk.service.d.ts +1 -2
- package/dist/main.js +18 -1
- package/dist/mq-runner.d.ts +5 -0
- package/dist/mq-runner.js +21 -0
- package/dist/static/task-manage.d.ts +6 -0
- package/dist/static/task-manage.js +35 -0
- package/dist/templates/add-fk-login.d.ts +5 -1
- package/dist/templates/add-fk-login.js +35 -7
- package/dist/templates/add-task.d.ts +10 -0
- package/dist/templates/add-task.js +76 -0
- package/dist/templates/component.js +3 -0
- package/dist/templates/download-task.d.ts +5 -5
- package/dist/templates/download-task.js +11 -147
- package/dist/templates/error.d.ts +3 -0
- package/dist/templates/error.js +41 -0
- package/dist/templates/help.d.ts +0 -1
- package/dist/templates/help.js +0 -21
- package/dist/templates/setting.d.ts +10 -0
- package/dist/templates/setting.js +85 -0
- package/dist/templates/task-manage.d.ts +8 -1
- package/dist/templates/task-manage.js +54 -14
- package/dist/templates/task.service.d.ts +66 -0
- package/dist/templates/task.service.js +451 -0
- package/dist/templates/upload-task.d.ts +0 -1
- package/dist/templates/upload-task.js +0 -2
- package/dist/templates/upload.js +6 -3
- package/dist/templates/upload.service.d.ts +12 -0
- package/dist/templates/upload.service.js +50 -0
- package/docs.md +34 -0
- package/package.json +10 -1
- 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
|
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
|
-
|
24
|
+
upload;
|
25
|
+
constructor(db, upload) {
|
37
26
|
this.db = db;
|
27
|
+
this.upload = upload;
|
38
28
|
}
|
39
|
-
async createTask(url) {
|
40
|
-
|
41
|
-
|
42
|
-
|
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,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;
|
package/dist/templates/help.d.ts
CHANGED
package/dist/templates/help.js
CHANGED
@@ -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
|
-
|
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 '
|
31
|
+
return 'downloading';
|
26
32
|
case 1:
|
27
33
|
return 'uploading';
|
28
34
|
default:
|
29
|
-
return '
|
35
|
+
return 'finish';
|
30
36
|
}
|
31
37
|
}
|
32
38
|
let TaskManageController = class TaskManageController {
|
33
39
|
db;
|
34
|
-
|
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",
|
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",
|
59
|
-
react_1.default.createElement("td",
|
60
|
-
react_1.default.createElement("td",
|
61
|
-
react_1.default.createElement("td",
|
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:
|
64
|
-
|
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
|
+
}
|