@nger/fk-upload 1.0.80 → 1.0.83
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/fk-v2.service.js +0 -1
- package/dist/main.js +0 -3
- package/dist/templates/check-upload.d.ts +10 -0
- package/dist/templates/check-upload.js +59 -0
- package/dist/templates/tasks/download-task.js +3 -3
- package/dist/templates/tasks/effect-task.js +3 -3
- package/dist/templates/tasks/task.service.d.ts +2 -1
- package/dist/templates/tasks/task.service.js +34 -0
- package/dist/templates/tasks/upload-task.js +4 -4
- package/package.json +1 -1
package/dist/fk-v2.service.js
CHANGED
package/dist/main.js
CHANGED
@@ -44,11 +44,8 @@ exports.AppModule = AppModule;
|
|
44
44
|
process.send('ready');
|
45
45
|
});
|
46
46
|
process.on('uncaughtException', (err) => {
|
47
|
-
console.log(err.message);
|
48
47
|
});
|
49
48
|
process.on('unhandledRejection', (reason, promisen) => {
|
50
49
|
promisen.catch((e) => {
|
51
|
-
console.log(e.message);
|
52
|
-
console.log(e.stack);
|
53
50
|
});
|
54
51
|
});
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { FkDownloadTaskEntity } from './../entities/fk-download-task.entity';
|
1
2
|
import { TaskEntity, TaskManager } from '@nger/rabbitmq';
|
2
3
|
import { Db } from '@nger/typeorm';
|
3
4
|
import { Injector } from '@nger/core';
|
@@ -19,4 +20,13 @@ export declare class CheckUploadController {
|
|
19
20
|
msg: string;
|
20
21
|
removes: string[];
|
21
22
|
}>;
|
23
|
+
checkWaitEffectTask(): Promise<{
|
24
|
+
list: FkDownloadTaskEntity[];
|
25
|
+
}>;
|
26
|
+
checkWaitDownloadTask(): Promise<{
|
27
|
+
list: FkDownloadTaskEntity[];
|
28
|
+
}>;
|
29
|
+
checkWaitUploadTask(): Promise<{
|
30
|
+
list: FkDownloadTaskEntity[];
|
31
|
+
}>;
|
22
32
|
}
|
@@ -10,6 +10,7 @@ const core_1 = require("@nger/core");
|
|
10
10
|
const http_1 = require("@nger/http");
|
11
11
|
const typeorm_2 = require("typeorm");
|
12
12
|
const fs_extra_1 = require("fs-extra");
|
13
|
+
const task_service_1 = require("./tasks/task.service");
|
13
14
|
let CheckUploadController = class CheckUploadController {
|
14
15
|
db;
|
15
16
|
manager;
|
@@ -59,6 +60,46 @@ let CheckUploadController = class CheckUploadController {
|
|
59
60
|
}));
|
60
61
|
return { msg: 'succes', removes };
|
61
62
|
}
|
63
|
+
async checkWaitEffectTask() {
|
64
|
+
const download = this.db.manager.getRepository(fk_download_task_entity_1.FkDownloadTaskEntity);
|
65
|
+
const list = await download.find({ where: { status: 2 } });
|
66
|
+
const task = this.injector.get(task_service_1.TaskService);
|
67
|
+
await Promise.all(list.map(async (item) => {
|
68
|
+
const download = await task.createEffectTask(item.filename, item.uploadUrl, item.topicId, item.path);
|
69
|
+
return this.manager.send(download);
|
70
|
+
}));
|
71
|
+
return { list };
|
72
|
+
}
|
73
|
+
async checkWaitDownloadTask() {
|
74
|
+
const download = this.db.manager.getRepository(fk_download_task_entity_1.FkDownloadTaskEntity);
|
75
|
+
const list = await download.find({ where: { status: 0 } });
|
76
|
+
const task = this.injector.get(task_service_1.TaskService);
|
77
|
+
await Promise.all(list.map(async (item) => {
|
78
|
+
const download = await task.createDownLoadTask(item.url, item.loginId, item.topicId);
|
79
|
+
return this.manager.send(download);
|
80
|
+
}));
|
81
|
+
return { list };
|
82
|
+
}
|
83
|
+
async checkWaitUploadTask() {
|
84
|
+
const download = this.db.manager.getRepository(fk_download_task_entity_1.FkDownloadTaskEntity);
|
85
|
+
const errors = await download.find({ where: { uploadUrl: (0, typeorm_2.Like)('https://site%') } });
|
86
|
+
await download.update(errors.map(err => err.filename), { status: 0 });
|
87
|
+
const list = await download.find({ where: { status: 1 } });
|
88
|
+
const task = this.injector.get(task_service_1.TaskService);
|
89
|
+
await Promise.all(list.map(async (item) => {
|
90
|
+
const upload = await task.createUploadTask({
|
91
|
+
filename: item.filename,
|
92
|
+
path: item.path,
|
93
|
+
url: item.url,
|
94
|
+
topicId: item.topicId,
|
95
|
+
loginId: item.loginId
|
96
|
+
}, item.totalSize, item.fileMd5, this.injector);
|
97
|
+
return this.manager.send(upload);
|
98
|
+
}));
|
99
|
+
return {
|
100
|
+
list
|
101
|
+
};
|
102
|
+
}
|
62
103
|
};
|
63
104
|
tslib_1.__decorate([
|
64
105
|
(0, http_1.Get)('reupload'),
|
@@ -84,6 +125,24 @@ tslib_1.__decorate([
|
|
84
125
|
tslib_1.__metadata("design:paramtypes", []),
|
85
126
|
tslib_1.__metadata("design:returntype", Promise)
|
86
127
|
], CheckUploadController.prototype, "checkSpace", null);
|
128
|
+
tslib_1.__decorate([
|
129
|
+
(0, http_1.Get)('checkWaitEffectTask'),
|
130
|
+
tslib_1.__metadata("design:type", Function),
|
131
|
+
tslib_1.__metadata("design:paramtypes", []),
|
132
|
+
tslib_1.__metadata("design:returntype", Promise)
|
133
|
+
], CheckUploadController.prototype, "checkWaitEffectTask", null);
|
134
|
+
tslib_1.__decorate([
|
135
|
+
(0, http_1.Get)('checkWaitDownloadTask'),
|
136
|
+
tslib_1.__metadata("design:type", Function),
|
137
|
+
tslib_1.__metadata("design:paramtypes", []),
|
138
|
+
tslib_1.__metadata("design:returntype", Promise)
|
139
|
+
], CheckUploadController.prototype, "checkWaitDownloadTask", null);
|
140
|
+
tslib_1.__decorate([
|
141
|
+
(0, http_1.Get)('checkWaitUploadTask'),
|
142
|
+
tslib_1.__metadata("design:type", Function),
|
143
|
+
tslib_1.__metadata("design:paramtypes", []),
|
144
|
+
tslib_1.__metadata("design:returntype", Promise)
|
145
|
+
], CheckUploadController.prototype, "checkWaitUploadTask", null);
|
87
146
|
CheckUploadController = tslib_1.__decorate([
|
88
147
|
(0, core_1.Controller)(`@nger/fk-upload`),
|
89
148
|
tslib_1.__metadata("design:paramtypes", [typeorm_1.Db, rabbitmq_1.TaskManager, core_1.Injector])
|
@@ -33,7 +33,7 @@ class DownloadTask extends rabbitmq_1.Task {
|
|
33
33
|
const fail = injector.get(rabbitmq_1.FAIL);
|
34
34
|
const download = await db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: task.filename } });
|
35
35
|
if (download.status !== 0) {
|
36
|
-
complete();
|
36
|
+
await complete();
|
37
37
|
this.downloadingCount -= 1;
|
38
38
|
return next && next();
|
39
39
|
}
|
@@ -72,7 +72,7 @@ class DownloadTask extends rabbitmq_1.Task {
|
|
72
72
|
console.log(`file download success ${task.filename}: ${fileMd5}`);
|
73
73
|
const uploadTask = await this.createUploadTask(task, total, fileMd5, injector);
|
74
74
|
await manager.send(uploadTask);
|
75
|
-
complete();
|
75
|
+
await complete();
|
76
76
|
this.downloadingCount -= 1;
|
77
77
|
});
|
78
78
|
req.on('response', async (resp) => {
|
@@ -82,7 +82,7 @@ class DownloadTask extends rabbitmq_1.Task {
|
|
82
82
|
if (total > 1024 * 1024 * 1024) {
|
83
83
|
console.log(`file is to large`);
|
84
84
|
req.destroy();
|
85
|
-
complete();
|
85
|
+
await complete();
|
86
86
|
this.downloadingCount -= 1;
|
87
87
|
}
|
88
88
|
});
|
@@ -15,7 +15,7 @@ class EffectTask extends rabbitmq_1.Task {
|
|
15
15
|
const task = injector.get(rabbitmq_1.DATA);
|
16
16
|
const complete = injector.get(rabbitmq_1.COMPLETE);
|
17
17
|
if (task.uploadUrl.startsWith('https://site')) {
|
18
|
-
complete();
|
18
|
+
await complete();
|
19
19
|
return next && next();
|
20
20
|
}
|
21
21
|
const fail = injector.get(rabbitmq_1.FAIL);
|
@@ -28,10 +28,10 @@ class EffectTask extends rabbitmq_1.Task {
|
|
28
28
|
}
|
29
29
|
catch (e) { }
|
30
30
|
await w7.manager.update(w7_1.W7ChatTopicEntity, task.topicId, { thirdUrl: task.uploadUrl }).then(() => complete()).catch(() => fail());
|
31
|
-
complete();
|
31
|
+
await complete();
|
32
32
|
}
|
33
33
|
else {
|
34
|
-
complete();
|
34
|
+
await complete();
|
35
35
|
}
|
36
36
|
if (next)
|
37
37
|
await next();
|
@@ -1,10 +1,11 @@
|
|
1
1
|
import { Injector } from "@nger/core";
|
2
|
-
import { IDownloadTask } from "./actions";
|
2
|
+
import { IDownloadTask, IUploadTask } from "./actions";
|
3
3
|
import { TaskEntity } from "@nger/rabbitmq";
|
4
4
|
export declare class TaskService {
|
5
5
|
private injector;
|
6
6
|
constructor(injector: Injector);
|
7
7
|
createEffectTask(filename: string, uploadUrl: string, topicId: number, path: string): Promise<TaskEntity<any>>;
|
8
8
|
createScheduleTask(name: string, rule: string): Promise<TaskEntity<any>>;
|
9
|
+
createUploadTask(download: IDownloadTask, total: number, md5: string, injector: Injector): Promise<TaskEntity<IUploadTask>>;
|
9
10
|
createDownLoadTask(url: string, loginId: number, topicId: number): Promise<TaskEntity<IDownloadTask>>;
|
10
11
|
}
|
@@ -2,6 +2,9 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.TaskService = void 0;
|
4
4
|
const tslib_1 = require("tslib");
|
5
|
+
const fk_service_1 = require("./fk.service");
|
6
|
+
const fk_download_task_entity_1 = require("./../../entities/fk-download-task.entity");
|
7
|
+
const typeorm_1 = require("@nger/typeorm");
|
5
8
|
const cids_1 = tslib_1.__importDefault(require("cids"));
|
6
9
|
const fs_extra_1 = require("fs-extra");
|
7
10
|
const multihashing_async_1 = tslib_1.__importDefault(require("multihashing-async"));
|
@@ -36,6 +39,37 @@ let TaskService = class TaskService {
|
|
36
39
|
task.data = schedule;
|
37
40
|
return task;
|
38
41
|
}
|
42
|
+
async createUploadTask(download, total, md5, injector) {
|
43
|
+
const db = injector.get(typeorm_1.Db);
|
44
|
+
await db.manager.update(fk_download_task_entity_1.FkDownloadTaskEntity, download.filename, { totalSize: total, fileMd5: md5, status: 1, size: total });
|
45
|
+
const fk = injector.get(fk_service_1.FkService);
|
46
|
+
const info = await fk.getUploadInfo(download.loginId, download.filename, md5, total);
|
47
|
+
if (info) {
|
48
|
+
const totalChunks = Math.ceil(total / info.splitSize) - 1;
|
49
|
+
const uploadTask = new rabbitmq_1.TaskEntity();
|
50
|
+
uploadTask.topic = actions_1.UPLOAD_ACTION;
|
51
|
+
const data = {
|
52
|
+
filename: download.filename,
|
53
|
+
path: download.path,
|
54
|
+
total: total,
|
55
|
+
splitSize: info.splitSize,
|
56
|
+
totalChunks,
|
57
|
+
uploadUrl: info.uploadUrl,
|
58
|
+
cookies: info.cookies,
|
59
|
+
topicId: download.topicId,
|
60
|
+
token: info.token,
|
61
|
+
aid: info.aid,
|
62
|
+
folderId: info.uploadGroupId,
|
63
|
+
fileMd5: md5,
|
64
|
+
start: info.uploadedSize,
|
65
|
+
loginId: download.loginId,
|
66
|
+
index: Math.ceil(info.uploadedSize / info.splitSize)
|
67
|
+
};
|
68
|
+
uploadTask.data = data;
|
69
|
+
return uploadTask;
|
70
|
+
}
|
71
|
+
throw new Error(`get upload info fail`);
|
72
|
+
}
|
39
73
|
async createDownLoadTask(url, loginId, topicId) {
|
40
74
|
const hash = await (0, multihashing_async_1.default)(Buffer.from(url), 'sha1', 16);
|
41
75
|
const cid = new cids_1.default(1, 'raw', hash, 'base64');
|
@@ -23,19 +23,19 @@ class UploadTask extends rabbitmq_1.Task {
|
|
23
23
|
const old = await db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: task.filename } });
|
24
24
|
// not exist
|
25
25
|
if (!old) {
|
26
|
-
complete();
|
26
|
+
await complete();
|
27
27
|
this.runingCount -= 1;
|
28
28
|
return next && next();
|
29
29
|
}
|
30
30
|
// > 1G give up
|
31
31
|
if (task.total >= 1024 * 1024 * 1024) {
|
32
|
-
complete();
|
32
|
+
await complete();
|
33
33
|
this.runingCount -= 1;
|
34
34
|
return next && next();
|
35
35
|
}
|
36
36
|
if (!(0, fs_1.existsSync)(task.path) || (old.fileMd5 && old.fileMd5.length > 0)) {
|
37
37
|
await db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { status: 0 });
|
38
|
-
complete();
|
38
|
+
await complete();
|
39
39
|
this.runingCount -= 1;
|
40
40
|
return next && next();
|
41
41
|
}
|
@@ -55,7 +55,7 @@ class UploadTask extends rabbitmq_1.Task {
|
|
55
55
|
});
|
56
56
|
}
|
57
57
|
else {
|
58
|
-
complete();
|
58
|
+
await complete();
|
59
59
|
}
|
60
60
|
if (next)
|
61
61
|
await next();
|