@nger/fk-upload 1.0.201 → 1.0.204
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/{templates → controllers}/code.d.ts +0 -0
- package/dist/{templates → controllers}/code.js +2 -1
- package/dist/controllers/relogin.d.ts +8 -0
- package/dist/controllers/relogin.js +42 -0
- package/dist/{templates → controllers}/verify.d.ts +0 -0
- package/dist/{templates → controllers}/verify.js +0 -0
- package/dist/entities/check-task.d.ts +13 -0
- package/dist/entities/check-task.js +221 -0
- package/dist/entities/download-task.d.ts +23 -0
- package/dist/entities/download-task.js +445 -0
- package/dist/entities/effect-task.d.ts +12 -0
- package/dist/entities/effect-task.js +207 -0
- package/dist/entities/fk-account.d.ts +16 -0
- package/dist/entities/fk-account.js +295 -0
- package/dist/entities/fk-jiqun.d.ts +5 -0
- package/dist/entities/fk-jiqun.js +56 -0
- package/dist/entities/upload-task.d.ts +15 -0
- package/dist/entities/upload-task.js +333 -0
- package/dist/entities/w7-account.d.ts +11 -0
- package/dist/entities/w7-account.js +126 -0
- package/dist/entities/w7.d.ts +10 -0
- package/dist/entities/w7.js +107 -0
- package/dist/entities/w7_chat_topic.d.ts +9 -0
- package/dist/entities/w7_chat_topic.js +58 -0
- package/dist/entities/w7_uni_account.d.ts +4 -0
- package/dist/entities/w7_uni_account.js +23 -0
- package/dist/fk-upload.module.d.ts +5 -0
- package/dist/fk-upload.module.js +76 -43
- package/dist/main.d.ts +1 -0
- package/dist/main.js +18 -29
- package/dist/services/check.service.d.ts +6 -0
- package/dist/services/check.service.js +32 -0
- package/dist/services/client.service.d.ts +6 -0
- package/dist/services/client.service.js +29 -0
- package/dist/services/download.service.d.ts +15 -0
- package/dist/services/download.service.js +139 -0
- package/dist/services/effect.service.d.ts +7 -0
- package/dist/services/effect.service.js +34 -0
- package/dist/services/fk.service.d.ts +24 -0
- package/dist/services/fk.service.js +323 -0
- package/dist/services/login.service.d.ts +17 -0
- package/dist/services/login.service.js +95 -0
- package/dist/services/upload.service.d.ts +13 -0
- package/dist/services/upload.service.js +100 -0
- package/dist/tasks/actions.d.ts +28 -0
- package/dist/tasks/actions.js +12 -0
- package/dist/{templates/tasks/schedule-task.d.ts → tasks/check-task.d.ts} +3 -5
- package/dist/tasks/check-task.js +205 -0
- package/dist/tasks/download-continue-task.d.ts +9 -0
- package/dist/tasks/download-continue-task.js +127 -0
- package/dist/{templates/tasks → tasks}/download-task.d.ts +0 -1
- package/dist/tasks/download-task.js +128 -0
- package/dist/{templates/tasks → tasks}/effect-task.d.ts +1 -1
- package/dist/tasks/effect-task.js +111 -0
- package/dist/{templates/tasks → tasks}/providers.d.ts +0 -0
- package/dist/{templates/tasks → tasks}/providers.js +11 -5
- package/dist/tasks/upload-continue-task.d.ts +8 -0
- package/dist/tasks/upload-continue-task.js +114 -0
- package/dist/{templates/tasks → tasks}/upload-task.d.ts +0 -0
- package/dist/tasks/upload-task.js +114 -0
- package/package.json +18 -14
- package/pnpm-lock.yaml +36 -1435
- package/dist/electon.d.ts +0 -3
- package/dist/electon.js +0 -80
- package/dist/entities/fk-download-task.entity.d.ts +0 -18
- package/dist/entities/fk-download-task.entity.js +0 -142
- package/dist/entities/fk-login-cookie.entity.d.ts +0 -7
- package/dist/entities/fk-login-cookie.entity.js +0 -46
- package/dist/entities/fk-login.entity.d.ts +0 -12
- package/dist/entities/fk-login.entity.js +0 -80
- package/dist/entities/index.d.ts +0 -3
- package/dist/entities/index.js +0 -6
- package/dist/login.controller.d.ts +0 -14
- package/dist/login.controller.js +0 -197
- package/dist/mq-runner.d.ts +0 -5
- package/dist/mq-runner.js +0 -19
- package/dist/static/task-manage.d.ts +0 -6
- package/dist/static/task-manage.js +0 -34
- package/dist/templates/add-fk-login.d.ts +0 -12
- package/dist/templates/add-fk-login.js +0 -93
- package/dist/templates/add-task.d.ts +0 -13
- package/dist/templates/add-task.js +0 -78
- package/dist/templates/check-upload.d.ts +0 -38
- package/dist/templates/check-upload.js +0 -195
- package/dist/templates/component.d.ts +0 -10
- package/dist/templates/component.js +0 -39
- package/dist/templates/error.d.ts +0 -4
- package/dist/templates/error.js +0 -27
- package/dist/templates/help.d.ts +0 -7
- package/dist/templates/help.js +0 -52
- package/dist/templates/player.d.ts +0 -4
- package/dist/templates/player.js +0 -23
- package/dist/templates/setting.d.ts +0 -13
- package/dist/templates/setting.js +0 -65
- package/dist/templates/task-manage.d.ts +0 -21
- package/dist/templates/task-manage.js +0 -314
- package/dist/templates/tasks/actions.d.ts +0 -44
- package/dist/templates/tasks/actions.js +0 -9
- package/dist/templates/tasks/check-task.d.ts +0 -8
- package/dist/templates/tasks/check-task.js +0 -89
- package/dist/templates/tasks/download-task.js +0 -130
- package/dist/templates/tasks/effect-task.js +0 -76
- package/dist/templates/tasks/fk.service.d.ts +0 -28
- package/dist/templates/tasks/fk.service.js +0 -254
- package/dist/templates/tasks/schedule-task.js +0 -94
- package/dist/templates/tasks/task.service.d.ts +0 -11
- package/dist/templates/tasks/task.service.js +0 -114
- package/dist/templates/tasks/upload-task.js +0 -97
- package/dist/templates/tasks/yasuo-task.d.ts +0 -0
- package/dist/templates/tasks/yasuo-task.js +0 -0
- package/dist/templates/upload-task.d.ts +0 -9
- package/dist/templates/upload-task.js +0 -141
- package/dist/templates/upload.d.ts +0 -16
- package/dist/templates/upload.js +0 -232
- package/dist/urlSafeBase64Decode.d.ts +0 -3
- package/dist/urlSafeBase64Decode.js +0 -32
- package/electron/.env +0 -32
- package/electron/package.json +0 -31
- package/electron/pnpm-lock.yaml +0 -2878
- package/fk-upload-pc/.vscode/extensions.json +0 -3
- package/fk-upload-pc/README.md +0 -16
- package/fk-upload-pc/index.html +0 -13
- package/fk-upload-pc/package.json +0 -19
- package/fk-upload-pc/pnpm-lock.yaml +0 -489
- package/fk-upload-pc/public/favicon.ico +0 -0
- package/fk-upload-pc/tsconfig.json +0 -18
- package/fk-upload-pc/tsconfig.node.json +0 -8
- package/fk-upload-pc/vite.config.ts +0 -7
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TaskService = void 0;
|
|
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");
|
|
8
|
-
const cids_1 = tslib_1.__importDefault(require("cids"));
|
|
9
|
-
const fs_extra_1 = require("fs-extra");
|
|
10
|
-
const multihashing_async_1 = tslib_1.__importDefault(require("multihashing-async"));
|
|
11
|
-
const core_1 = require("@nger/core");
|
|
12
|
-
const path_1 = require("path");
|
|
13
|
-
const actions_1 = require("./actions");
|
|
14
|
-
const rabbitmq_1 = require("@nger/rabbitmq");
|
|
15
|
-
let TaskService = class TaskService {
|
|
16
|
-
injector;
|
|
17
|
-
constructor(injector) {
|
|
18
|
-
this.injector = injector;
|
|
19
|
-
}
|
|
20
|
-
async createEffectTask(filename, uploadUrl, topicId, path) {
|
|
21
|
-
const effect = {
|
|
22
|
-
filename,
|
|
23
|
-
uploadUrl,
|
|
24
|
-
topicId,
|
|
25
|
-
path
|
|
26
|
-
};
|
|
27
|
-
const task = new rabbitmq_1.TaskEntity();
|
|
28
|
-
task.topic = actions_1.EFFECT_ACTION;
|
|
29
|
-
task.data = effect;
|
|
30
|
-
return task;
|
|
31
|
-
}
|
|
32
|
-
async createScheduleTask(name, rule, id) {
|
|
33
|
-
const schedule = {
|
|
34
|
-
name,
|
|
35
|
-
rule
|
|
36
|
-
};
|
|
37
|
-
const task = new rabbitmq_1.TaskEntity();
|
|
38
|
-
if (id)
|
|
39
|
-
task.taskId = id;
|
|
40
|
-
task.topic = actions_1.SCHEDULE_ACTION;
|
|
41
|
-
task.data = schedule;
|
|
42
|
-
return task;
|
|
43
|
-
}
|
|
44
|
-
async createUploadTask(download, total, md5, injector) {
|
|
45
|
-
const db = injector.get(typeorm_1.Db);
|
|
46
|
-
await db.manager.update(fk_download_task_entity_1.FkDownloadTaskEntity, download.filename, { totalSize: total, fileMd5: md5, status: 1, size: total });
|
|
47
|
-
const fk = injector.get(fk_service_1.FkService);
|
|
48
|
-
const info = await fk.getUploadInfo(download.loginId, download.filename, md5, total);
|
|
49
|
-
if (info) {
|
|
50
|
-
const totalChunks = Math.ceil(total / info.splitSize) - 1;
|
|
51
|
-
const uploadTask = new rabbitmq_1.TaskEntity();
|
|
52
|
-
uploadTask.topic = actions_1.UPLOAD_ACTION;
|
|
53
|
-
const data = {
|
|
54
|
-
filename: download.filename,
|
|
55
|
-
path: download.path,
|
|
56
|
-
total: total,
|
|
57
|
-
splitSize: info.splitSize,
|
|
58
|
-
totalChunks,
|
|
59
|
-
uploadUrl: info.uploadUrl,
|
|
60
|
-
cookies: info.cookies,
|
|
61
|
-
topicId: download.topicId,
|
|
62
|
-
token: info.token,
|
|
63
|
-
aid: info.aid,
|
|
64
|
-
folderId: info.uploadGroupId,
|
|
65
|
-
fileMd5: md5,
|
|
66
|
-
start: info.uploadedSize,
|
|
67
|
-
loginId: download.loginId,
|
|
68
|
-
index: Math.ceil(info.uploadedSize / info.splitSize)
|
|
69
|
-
};
|
|
70
|
-
uploadTask.data = data;
|
|
71
|
-
return uploadTask;
|
|
72
|
-
}
|
|
73
|
-
throw new Error(`get upload info fail`);
|
|
74
|
-
}
|
|
75
|
-
async createDownLoadTask(url, loginId, topicId) {
|
|
76
|
-
const hash = await (0, multihashing_async_1.default)(Buffer.from(url), 'sha1', 16);
|
|
77
|
-
const cid = new cids_1.default(1, 'raw', hash, 'base64');
|
|
78
|
-
let filename = encodeURIComponent(cid.toString('base64'));
|
|
79
|
-
const _url = new URL(url);
|
|
80
|
-
const filePath = _url.pathname;
|
|
81
|
-
let ext = (0, path_1.extname)(filePath);
|
|
82
|
-
if (ext.length < 5) {
|
|
83
|
-
filename += ext === '.' ? '.mp4' : ext;
|
|
84
|
-
}
|
|
85
|
-
else if (filename.indexOf('.jpg')) {
|
|
86
|
-
filename += '.jpg';
|
|
87
|
-
}
|
|
88
|
-
else if (filename.indexOf('.png')) {
|
|
89
|
-
filename += '.png';
|
|
90
|
-
}
|
|
91
|
-
else if (filename.indexOf('.mp4')) {
|
|
92
|
-
filename += '.mp4';
|
|
93
|
-
}
|
|
94
|
-
const root = this.injector.get(core_1.APP_ROOT);
|
|
95
|
-
(0, fs_extra_1.ensureDirSync)((0, path_1.join)(root, 'attachments/fk-upload'));
|
|
96
|
-
const path = (0, path_1.join)('attachments/fk-upload', filename);
|
|
97
|
-
const download = {
|
|
98
|
-
filename: filename,
|
|
99
|
-
path: path,
|
|
100
|
-
url,
|
|
101
|
-
topicId,
|
|
102
|
-
loginId
|
|
103
|
-
};
|
|
104
|
-
const task = new rabbitmq_1.TaskEntity();
|
|
105
|
-
task.topic = actions_1.DOWNLOAD_ACTION;
|
|
106
|
-
task.data = download;
|
|
107
|
-
return task;
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
TaskService = tslib_1.__decorate([
|
|
111
|
-
(0, core_1.Injectable)(),
|
|
112
|
-
tslib_1.__metadata("design:paramtypes", [core_1.Injector])
|
|
113
|
-
], TaskService);
|
|
114
|
-
exports.TaskService = TaskService;
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UploadTask = void 0;
|
|
4
|
-
const rabbitmq_1 = require("@nger/rabbitmq");
|
|
5
|
-
const core_1 = require("@nger/core");
|
|
6
|
-
const actions_1 = require("./actions");
|
|
7
|
-
const fk_service_1 = require("./fk.service");
|
|
8
|
-
const task_service_1 = require("./task.service");
|
|
9
|
-
const typeorm_1 = require("@nger/typeorm");
|
|
10
|
-
const entities_1 = require("../../entities");
|
|
11
|
-
const fs_1 = require("fs");
|
|
12
|
-
const path_1 = require("path");
|
|
13
|
-
class UploadTask extends rabbitmq_1.Task {
|
|
14
|
-
constructor() {
|
|
15
|
-
super(actions_1.UPLOAD_ACTION);
|
|
16
|
-
}
|
|
17
|
-
getLocalSize(path) {
|
|
18
|
-
try {
|
|
19
|
-
const stat = (0, fs_1.statSync)(path);
|
|
20
|
-
return stat.size;
|
|
21
|
-
}
|
|
22
|
-
catch (e) {
|
|
23
|
-
return 0;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
errorCount = 0;
|
|
27
|
-
async handle(injector, next) {
|
|
28
|
-
const task = injector.get(rabbitmq_1.DATA);
|
|
29
|
-
const root = injector.get(core_1.APP_ROOT);
|
|
30
|
-
const filePath = (0, path_1.join)(root, task.path);
|
|
31
|
-
const complete = injector.get(rabbitmq_1.COMPLETE);
|
|
32
|
-
const fk = injector.get(fk_service_1.FkService);
|
|
33
|
-
const taskService = injector.get(task_service_1.TaskService);
|
|
34
|
-
const manager = injector.get(rabbitmq_1.TaskManager);
|
|
35
|
-
const db = injector.get(typeorm_1.Db);
|
|
36
|
-
const fail = injector.get(rabbitmq_1.FAIL);
|
|
37
|
-
// check file size
|
|
38
|
-
const old = await db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: task.filename } });
|
|
39
|
-
// not exist
|
|
40
|
-
if (!old) {
|
|
41
|
-
await complete();
|
|
42
|
-
return next && next();
|
|
43
|
-
}
|
|
44
|
-
if (!(0, fs_1.existsSync)(filePath)) {
|
|
45
|
-
setTimeout(() => {
|
|
46
|
-
fail();
|
|
47
|
-
}, 1000);
|
|
48
|
-
return next && next();
|
|
49
|
-
}
|
|
50
|
-
// > 1G give up
|
|
51
|
-
if (task.total >= 1024 * 1024 * 1024) {
|
|
52
|
-
await complete();
|
|
53
|
-
return next && next();
|
|
54
|
-
}
|
|
55
|
-
const cloudSize = await fk.getSize(old.url);
|
|
56
|
-
const localSize = fk.getLocalSize(filePath);
|
|
57
|
-
if (cloudSize != localSize) {
|
|
58
|
-
// not my task
|
|
59
|
-
await db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { status: 0 });
|
|
60
|
-
const download = await taskService.createDownLoadTask(old.url, old.loginId, old.topicId);
|
|
61
|
-
await manager.send(download);
|
|
62
|
-
await complete();
|
|
63
|
-
return next && next();
|
|
64
|
-
}
|
|
65
|
-
console.log(`receive upload task`, { filename: task.filename, status: old.status });
|
|
66
|
-
if (old.status == 1) {
|
|
67
|
-
// upload
|
|
68
|
-
await fk.startUploadFile(task).then(async (res) => {
|
|
69
|
-
// create effect task
|
|
70
|
-
console.log(`upload success`, res.filename);
|
|
71
|
-
await db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { status: 2, uploadUrl: task.uploadUrl, uploadSize: task.total, uploadStatus: 1 });
|
|
72
|
-
const effectTask = await taskService.createEffectTask(task.filename, task.uploadUrl, task.topicId, task.path);
|
|
73
|
-
await manager.send(effectTask);
|
|
74
|
-
await complete();
|
|
75
|
-
}).catch(async (e) => {
|
|
76
|
-
console.log(`upload error ${this.errorCount}`, e.message);
|
|
77
|
-
if (e.message === 'to big') {
|
|
78
|
-
await db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { isBigFile: true });
|
|
79
|
-
return complete();
|
|
80
|
-
}
|
|
81
|
-
if (this.errorCount > 10) {
|
|
82
|
-
this.errorCount = 0;
|
|
83
|
-
}
|
|
84
|
-
this.errorCount += 1;
|
|
85
|
-
fail();
|
|
86
|
-
return next && next();
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
// check
|
|
91
|
-
await complete();
|
|
92
|
-
}
|
|
93
|
-
if (next)
|
|
94
|
-
await next();
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
exports.UploadTask = UploadTask;
|
|
File without changes
|
|
File without changes
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UploadTaskController = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const core_1 = require("@nger/core");
|
|
6
|
-
const http_1 = require("@nger/http");
|
|
7
|
-
const typeorm_1 = require("@nger/typeorm");
|
|
8
|
-
const entities_1 = require("../entities");
|
|
9
|
-
const form_data_1 = tslib_1.__importDefault(require("form-data"));
|
|
10
|
-
const axios_1 = tslib_1.__importDefault(require("axios"));
|
|
11
|
-
const fs_1 = require("fs");
|
|
12
|
-
const path_1 = require("path");
|
|
13
|
-
let UploadTaskController = class UploadTaskController {
|
|
14
|
-
db;
|
|
15
|
-
getUploadUrl(token, forceDirect = true) {
|
|
16
|
-
if (forceDirect) {
|
|
17
|
-
return `https://${token.url}/${token.visitType}/${token.app}/upload?cmd=${token.cmd}&token=${token.token}`;
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
return `https://${token.url}/${token.visitType}/${token.app}/advance?cmd=${token.cmd}&token=${token.token}`;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
constructor(db) {
|
|
24
|
-
this.db = db;
|
|
25
|
-
}
|
|
26
|
-
async uploadTask(filename) {
|
|
27
|
-
const task = await this.db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename } });
|
|
28
|
-
if (task) {
|
|
29
|
-
if (task.status === 0) {
|
|
30
|
-
return {
|
|
31
|
-
msg: 'downloading'
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
if (task.status === 2) {
|
|
35
|
-
return {
|
|
36
|
-
msg: 'uploaded'
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
const loginEntity = await this.db.manager.findOne(entities_1.FkLoginEntity, { where: { fkLoginId: task.loginId } });
|
|
40
|
-
const cookies = await this.db.manager.find(entities_1.FkLoginCookieEntity, { where: { fkLoginId: task.loginId } });
|
|
41
|
-
const cookie = cookies.map(cookie => `${cookie.key}=${cookie.value}`).join(';');
|
|
42
|
-
// 00 take token
|
|
43
|
-
const url = `https://i.vip.webportal.top/`;
|
|
44
|
-
const iVipWebPortal = await axios_1.default.get(url, {
|
|
45
|
-
headers: {
|
|
46
|
-
Cookie: cookie
|
|
47
|
-
}
|
|
48
|
-
}).then(res => res.data);
|
|
49
|
-
const items = iVipWebPortal.match(/<meta id='_TOKEN' value='(.*?)'\/>/);
|
|
50
|
-
let token = ``;
|
|
51
|
-
if (items && items.length === 2) {
|
|
52
|
-
token = items[1];
|
|
53
|
-
}
|
|
54
|
-
if (token.length > 0) {
|
|
55
|
-
// 01
|
|
56
|
-
const url = `https://smr00.vip.webportal.top/cn/api/manage/advanceUpload/genAccessKey?_v=1651232099799&_TOKEN=${token}`;
|
|
57
|
-
const accessKey = await axios_1.default.get(url).then(res => res.data);
|
|
58
|
-
if (accessKey.success) {
|
|
59
|
-
const accessTokenString = decode(accessKey.accessKey);
|
|
60
|
-
if (accessTokenString) {
|
|
61
|
-
const accessToken = JSON.parse(accessTokenString);
|
|
62
|
-
const ext = (0, path_1.extname)(filename);
|
|
63
|
-
const uploadUrl = this.getUploadUrl(accessToken, ['jpeg', 'jpg', 'png', 'svg'].includes(ext));
|
|
64
|
-
const fileStream = (0, fs_1.createReadStream)(task.path, {});
|
|
65
|
-
let length = 0;
|
|
66
|
-
let size = 0;
|
|
67
|
-
let index = 0;
|
|
68
|
-
fileStream.on('data', (chunk) => {
|
|
69
|
-
const totalChunks = (task.totalSize - length) / size;
|
|
70
|
-
length += chunk.length;
|
|
71
|
-
size = chunk.length;
|
|
72
|
-
index += 1;
|
|
73
|
-
const complete = length >= task.totalSize;
|
|
74
|
-
const data = new form_data_1.default();
|
|
75
|
-
data.append('ctrl', fileStream);
|
|
76
|
-
data.append('isFreeVer', 'false');
|
|
77
|
-
data.append('aid', loginEntity.aid);
|
|
78
|
-
data.append('folderId', loginEntity.uploadGroupId);
|
|
79
|
-
data.append('fileName', task.filename);
|
|
80
|
-
// chunk
|
|
81
|
-
data.append(`totalSize`, task.totalSize);
|
|
82
|
-
data.append(`fileMd5`, task.fileMd5);
|
|
83
|
-
data.append('index', index);
|
|
84
|
-
data.append('chunkSize', chunk.length);
|
|
85
|
-
data.append('totalChunks', totalChunks);
|
|
86
|
-
data.append(`complete`, complete);
|
|
87
|
-
const bssInfo = {
|
|
88
|
-
fromSite: true, siteId: 0, groupId: 0, fileSizeLimit: 1024
|
|
89
|
-
};
|
|
90
|
-
data.append('bssInfo', JSON.stringify(bssInfo));
|
|
91
|
-
const headers = data.getHeaders();
|
|
92
|
-
axios_1.default.post(uploadUrl, data, {
|
|
93
|
-
headers: {
|
|
94
|
-
...headers,
|
|
95
|
-
Cookie: cookie
|
|
96
|
-
},
|
|
97
|
-
onUploadProgress: (upload) => {
|
|
98
|
-
debugger;
|
|
99
|
-
}
|
|
100
|
-
}).then(res => res.data);
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return { msg: `error` };
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
tslib_1.__decorate([
|
|
110
|
-
(0, http_1.Get)('upload-task'),
|
|
111
|
-
tslib_1.__param(0, (0, http_1.Query)('filename')),
|
|
112
|
-
tslib_1.__metadata("design:type", Function),
|
|
113
|
-
tslib_1.__metadata("design:paramtypes", [String]),
|
|
114
|
-
tslib_1.__metadata("design:returntype", Promise)
|
|
115
|
-
], UploadTaskController.prototype, "uploadTask", null);
|
|
116
|
-
UploadTaskController = tslib_1.__decorate([
|
|
117
|
-
(0, core_1.Controller)(`@nger/fk-upload`),
|
|
118
|
-
tslib_1.__metadata("design:paramtypes", [typeorm_1.Db])
|
|
119
|
-
], UploadTaskController);
|
|
120
|
-
exports.UploadTaskController = UploadTaskController;
|
|
121
|
-
function decode(base64Str) {
|
|
122
|
-
if (!base64Str)
|
|
123
|
-
return;
|
|
124
|
-
const t = base64Str.replace(/_/g, "/").replace(/-/g, "+");
|
|
125
|
-
const f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|
126
|
-
let l = 0;
|
|
127
|
-
let p = 0;
|
|
128
|
-
let h = [];
|
|
129
|
-
do {
|
|
130
|
-
const o = f.indexOf(t.charAt(l++));
|
|
131
|
-
const u = f.indexOf(t.charAt(l++));
|
|
132
|
-
const a = f.indexOf(t.charAt(l++));
|
|
133
|
-
const c = f.indexOf(t.charAt(l++));
|
|
134
|
-
const s = o << 18 | u << 12 | a << 6 | c;
|
|
135
|
-
const e = s >> 16 & 255;
|
|
136
|
-
const r = s >> 8 & 255;
|
|
137
|
-
const n = 255 & s;
|
|
138
|
-
h[p++] = 64 === a ? String.fromCharCode(e) : 64 === c ? String.fromCharCode(e, r) : String.fromCharCode(e, r, n);
|
|
139
|
-
} while (l < t.length);
|
|
140
|
-
return h.join('');
|
|
141
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { Db } from '@nger/typeorm';
|
|
3
|
-
import { Context } from 'koa';
|
|
4
|
-
export declare class UploadController {
|
|
5
|
-
private db;
|
|
6
|
-
constructor(db: Db);
|
|
7
|
-
upload(): JSX.Element;
|
|
8
|
-
postUpload(file: any, loginId: string, ctx: Context): Promise<any>;
|
|
9
|
-
preview(src: string): JSX.Element;
|
|
10
|
-
downloadFile(cloudUrl: string): Promise<{
|
|
11
|
-
path: string;
|
|
12
|
-
filename: string;
|
|
13
|
-
}>;
|
|
14
|
-
uploadCloud(loginId: string, cloudUrl: string, ctx: Context): Promise<any>;
|
|
15
|
-
getUploadUrl(token: any): string;
|
|
16
|
-
}
|
package/dist/templates/upload.js
DELETED
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UploadController = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const core_1 = require("@nger/core");
|
|
6
|
-
const http_1 = require("@nger/http");
|
|
7
|
-
const form_data_1 = tslib_1.__importDefault(require("form-data"));
|
|
8
|
-
const axios_1 = tslib_1.__importDefault(require("axios"));
|
|
9
|
-
const typeorm_1 = require("@nger/typeorm");
|
|
10
|
-
const entities_1 = require("../entities");
|
|
11
|
-
const fs_1 = require("fs");
|
|
12
|
-
const path_1 = require("path");
|
|
13
|
-
const url_1 = require("url");
|
|
14
|
-
const fs_extra_1 = require("fs-extra");
|
|
15
|
-
const request_1 = tslib_1.__importDefault(require("request"));
|
|
16
|
-
const component_1 = require("./component");
|
|
17
|
-
const react_1 = tslib_1.__importDefault(require("react"));
|
|
18
|
-
let UploadController = class UploadController {
|
|
19
|
-
db;
|
|
20
|
-
constructor(db) {
|
|
21
|
-
this.db = db;
|
|
22
|
-
}
|
|
23
|
-
upload() {
|
|
24
|
-
return react_1.default.createElement(component_1.Nav, { active: -1 },
|
|
25
|
-
react_1.default.createElement("form", { action: "", method: "post", encType: 'multipart/form-data' },
|
|
26
|
-
react_1.default.createElement("div", null,
|
|
27
|
-
react_1.default.createElement("input", { className: 'form-control', type: "file", name: "file" })),
|
|
28
|
-
react_1.default.createElement("div", { style: { marginTop: "20px" } },
|
|
29
|
-
react_1.default.createElement("button", { className: "btn btn-primary", type: "submit" }, "\u63D0\u4EA4"))));
|
|
30
|
-
}
|
|
31
|
-
async postUpload(file, loginId, ctx) {
|
|
32
|
-
const loginEntity = await this.db.manager.findOne(entities_1.FkLoginEntity, { where: { fkLoginId: Number(loginId) } });
|
|
33
|
-
const cookies = await this.db.manager.find(entities_1.FkLoginCookieEntity, { where: { fkLoginId: Number(loginId) } });
|
|
34
|
-
const cookie = cookies.map(cookie => `${cookie.key}=${cookie.value}`).join(';');
|
|
35
|
-
// 00 take token
|
|
36
|
-
const url = `https://i.vip.webportal.top/`;
|
|
37
|
-
const iVipWebPortal = await axios_1.default.get(url, {
|
|
38
|
-
headers: {
|
|
39
|
-
Cookie: cookie
|
|
40
|
-
}
|
|
41
|
-
}).then(res => res.data);
|
|
42
|
-
const items = iVipWebPortal.match(/<meta id='_TOKEN' value='(.*?)'\/>/);
|
|
43
|
-
let token = ``;
|
|
44
|
-
if (items && items.length === 2) {
|
|
45
|
-
token = items[1];
|
|
46
|
-
}
|
|
47
|
-
if (token.length > 0) {
|
|
48
|
-
// 01
|
|
49
|
-
const url = `https://smr00.vip.webportal.top/cn/api/manage/advanceUpload/genAccessKey?_v=1651232099799&_TOKEN=${token}`;
|
|
50
|
-
const accessKey = await axios_1.default.get(url).then(res => res.data);
|
|
51
|
-
if (accessKey.success) {
|
|
52
|
-
const accessTokenString = decode(accessKey.accessKey);
|
|
53
|
-
if (accessTokenString) {
|
|
54
|
-
const accessToken = JSON.parse(accessTokenString);
|
|
55
|
-
const uploadUrl = this.getUploadUrl(accessToken);
|
|
56
|
-
const data = new form_data_1.default();
|
|
57
|
-
const fileStream = (0, fs_1.createReadStream)(file.path);
|
|
58
|
-
data.append('ctrl', fileStream);
|
|
59
|
-
data.append('isFreeVer', 'false');
|
|
60
|
-
data.append('aid', loginEntity.aid);
|
|
61
|
-
data.append('folderId', loginEntity.uploadGroupId);
|
|
62
|
-
data.append('fileName', file.name);
|
|
63
|
-
const bssInfo = {
|
|
64
|
-
fromSite: true, siteId: 0, groupId: 0, fileSizeLimit: 1024
|
|
65
|
-
};
|
|
66
|
-
data.append('bssInfo', JSON.stringify(bssInfo));
|
|
67
|
-
const headers = data.getHeaders();
|
|
68
|
-
const res = await axios_1.default.post(uploadUrl, data, {
|
|
69
|
-
headers: {
|
|
70
|
-
...headers,
|
|
71
|
-
Cookie: cookie
|
|
72
|
-
}
|
|
73
|
-
}).then(res => res.data);
|
|
74
|
-
if (res.data) {
|
|
75
|
-
const data = res.data;
|
|
76
|
-
const src = data.downUrl;
|
|
77
|
-
ctx.redirect('/@nger/fk-upload/preview?src=https://' + src);
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
if (res.msg) {
|
|
81
|
-
return res.msg;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return `error`;
|
|
87
|
-
}
|
|
88
|
-
preview(src) {
|
|
89
|
-
return react_1.default.createElement(component_1.Nav, { active: -1 },
|
|
90
|
-
react_1.default.createElement("div", { className: "card", style: { width: '300px', marginTop: '10px' } },
|
|
91
|
-
react_1.default.createElement("img", { src: src, style: { height: '300px' }, className: "card-img-top" }),
|
|
92
|
-
react_1.default.createElement("div", { className: "card-body" },
|
|
93
|
-
react_1.default.createElement("div", { className: "card-title" },
|
|
94
|
-
react_1.default.createElement("p", null, src)))));
|
|
95
|
-
}
|
|
96
|
-
downloadFile(cloudUrl) {
|
|
97
|
-
return new Promise((resolve, reject) => {
|
|
98
|
-
const url = new url_1.URL(cloudUrl);
|
|
99
|
-
const list = url.pathname.split('/');
|
|
100
|
-
const filename = list.pop();
|
|
101
|
-
const req = request_1.default.get(cloudUrl);
|
|
102
|
-
(0, fs_extra_1.ensureDirSync)((0, path_1.join)(__dirname, 'dist'));
|
|
103
|
-
const file = (0, path_1.join)(__dirname, 'dist', filename);
|
|
104
|
-
const writeStream = (0, fs_1.createWriteStream)(file);
|
|
105
|
-
req.pipe(writeStream);
|
|
106
|
-
req.on('end', () => {
|
|
107
|
-
resolve({
|
|
108
|
-
path: file,
|
|
109
|
-
filename
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
async uploadCloud(loginId, cloudUrl, ctx) {
|
|
115
|
-
const loginEntity = await this.db.manager.findOne(entities_1.FkLoginEntity, { where: { fkLoginId: Number(loginId) } });
|
|
116
|
-
const cookies = await this.db.manager.find(entities_1.FkLoginCookieEntity, { where: { fkLoginId: Number(loginId) } });
|
|
117
|
-
const cookie = cookies.map(cookie => `${cookie.key}=${cookie.value}`).join(';');
|
|
118
|
-
// 00 take token
|
|
119
|
-
const url = `https://i.vip.webportal.top/`;
|
|
120
|
-
const iVipWebPortal = await axios_1.default.get(url, {
|
|
121
|
-
headers: {
|
|
122
|
-
Cookie: cookie
|
|
123
|
-
}
|
|
124
|
-
}).then(res => res.data);
|
|
125
|
-
const items = iVipWebPortal.match(/<meta id='_TOKEN' value='(.*?)'\/>/);
|
|
126
|
-
let token = ``;
|
|
127
|
-
if (items && items.length === 2) {
|
|
128
|
-
token = items[1];
|
|
129
|
-
}
|
|
130
|
-
if (token.length > 0) {
|
|
131
|
-
// 01
|
|
132
|
-
const url = `https://smr00.vip.webportal.top/cn/api/manage/advanceUpload/genAccessKey?_v=1651232099799&_TOKEN=${token}`;
|
|
133
|
-
const accessKey = await axios_1.default.get(url).then(res => res.data);
|
|
134
|
-
if (accessKey.success) {
|
|
135
|
-
const accessTokenString = decode(accessKey.accessKey);
|
|
136
|
-
if (accessTokenString) {
|
|
137
|
-
const accessToken = JSON.parse(accessTokenString);
|
|
138
|
-
const uploadUrl = this.getUploadUrl(accessToken);
|
|
139
|
-
const data = new form_data_1.default();
|
|
140
|
-
const file = await this.downloadFile(cloudUrl);
|
|
141
|
-
const fileStream = (0, fs_1.createReadStream)(file.path);
|
|
142
|
-
data.append('ctrl', fileStream);
|
|
143
|
-
data.append('isFreeVer', 'false');
|
|
144
|
-
data.append('aid', loginEntity.aid);
|
|
145
|
-
data.append('folderId', loginEntity.uploadGroupId);
|
|
146
|
-
data.append('fileName', file.filename);
|
|
147
|
-
const bssInfo = {
|
|
148
|
-
fromSite: true, siteId: 0, groupId: 0, fileSizeLimit: 1024
|
|
149
|
-
};
|
|
150
|
-
data.append('bssInfo', JSON.stringify(bssInfo));
|
|
151
|
-
const headers = data.getHeaders();
|
|
152
|
-
const res = await axios_1.default.post(uploadUrl, data, {
|
|
153
|
-
headers: {
|
|
154
|
-
...headers,
|
|
155
|
-
Cookie: cookie
|
|
156
|
-
}
|
|
157
|
-
}).then(res => res.data);
|
|
158
|
-
if (res.data) {
|
|
159
|
-
const data = res.data;
|
|
160
|
-
const src = data.downUrl;
|
|
161
|
-
ctx.redirect('/@nger/fk-upload/preview?src=https://' + src);
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
if (res.msg) {
|
|
165
|
-
return res.msg;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return `error`;
|
|
171
|
-
}
|
|
172
|
-
getUploadUrl(token) {
|
|
173
|
-
return `https://${token.url}/${token.visitType}/${token.app}/upload?cmd=${token.cmd}&token=${token.token}`;
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
tslib_1.__decorate([
|
|
177
|
-
(0, http_1.Get)('upload'),
|
|
178
|
-
tslib_1.__metadata("design:type", Function),
|
|
179
|
-
tslib_1.__metadata("design:paramtypes", []),
|
|
180
|
-
tslib_1.__metadata("design:returntype", void 0)
|
|
181
|
-
], UploadController.prototype, "upload", null);
|
|
182
|
-
tslib_1.__decorate([
|
|
183
|
-
(0, http_1.Post)('upload'),
|
|
184
|
-
tslib_1.__param(0, (0, http_1.File)('file')),
|
|
185
|
-
tslib_1.__param(1, (0, http_1.Query)('loginId')),
|
|
186
|
-
tslib_1.__param(2, (0, core_1.Inject)(http_1.CONTEXT)),
|
|
187
|
-
tslib_1.__metadata("design:type", Function),
|
|
188
|
-
tslib_1.__metadata("design:paramtypes", [Object, String, Object]),
|
|
189
|
-
tslib_1.__metadata("design:returntype", Promise)
|
|
190
|
-
], UploadController.prototype, "postUpload", null);
|
|
191
|
-
tslib_1.__decorate([
|
|
192
|
-
(0, http_1.Get)('preview'),
|
|
193
|
-
tslib_1.__param(0, (0, http_1.Query)(`src`)),
|
|
194
|
-
tslib_1.__metadata("design:type", Function),
|
|
195
|
-
tslib_1.__metadata("design:paramtypes", [String]),
|
|
196
|
-
tslib_1.__metadata("design:returntype", void 0)
|
|
197
|
-
], UploadController.prototype, "preview", null);
|
|
198
|
-
tslib_1.__decorate([
|
|
199
|
-
(0, http_1.Get)('upload_cloud'),
|
|
200
|
-
tslib_1.__param(0, (0, http_1.Query)('loginId')),
|
|
201
|
-
tslib_1.__param(1, (0, http_1.Query)('cloudUrl')),
|
|
202
|
-
tslib_1.__param(2, (0, core_1.Inject)(http_1.CONTEXT)),
|
|
203
|
-
tslib_1.__metadata("design:type", Function),
|
|
204
|
-
tslib_1.__metadata("design:paramtypes", [String, String, Object]),
|
|
205
|
-
tslib_1.__metadata("design:returntype", Promise)
|
|
206
|
-
], UploadController.prototype, "uploadCloud", null);
|
|
207
|
-
UploadController = tslib_1.__decorate([
|
|
208
|
-
(0, core_1.Controller)('@nger/fk-upload'),
|
|
209
|
-
tslib_1.__metadata("design:paramtypes", [typeorm_1.Db])
|
|
210
|
-
], UploadController);
|
|
211
|
-
exports.UploadController = UploadController;
|
|
212
|
-
function decode(base64Str) {
|
|
213
|
-
if (!base64Str)
|
|
214
|
-
return;
|
|
215
|
-
const t = base64Str.replace(/_/g, "/").replace(/-/g, "+");
|
|
216
|
-
const f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|
217
|
-
let l = 0;
|
|
218
|
-
let p = 0;
|
|
219
|
-
let h = [];
|
|
220
|
-
do {
|
|
221
|
-
const o = f.indexOf(t.charAt(l++));
|
|
222
|
-
const u = f.indexOf(t.charAt(l++));
|
|
223
|
-
const a = f.indexOf(t.charAt(l++));
|
|
224
|
-
const c = f.indexOf(t.charAt(l++));
|
|
225
|
-
const s = o << 18 | u << 12 | a << 6 | c;
|
|
226
|
-
const e = s >> 16 & 255;
|
|
227
|
-
const r = s >> 8 & 255;
|
|
228
|
-
const n = 255 & s;
|
|
229
|
-
h[p++] = 64 === a ? String.fromCharCode(e) : 64 === c ? String.fromCharCode(e, r) : String.fromCharCode(e, r, n);
|
|
230
|
-
} while (l < t.length);
|
|
231
|
-
return h.join('');
|
|
232
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UrlSafeBase64 = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const core_1 = require("@nger/core");
|
|
6
|
-
let UrlSafeBase64 = class UrlSafeBase64 {
|
|
7
|
-
decode(base64Str) {
|
|
8
|
-
if (!base64Str)
|
|
9
|
-
return;
|
|
10
|
-
const t = base64Str.replace(/_/g, "/").replace(/-/g, "+");
|
|
11
|
-
const f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|
12
|
-
let l = 0;
|
|
13
|
-
let p = 0;
|
|
14
|
-
let h = [];
|
|
15
|
-
do {
|
|
16
|
-
const o = f.indexOf(t.charAt(l++));
|
|
17
|
-
const u = f.indexOf(t.charAt(l++));
|
|
18
|
-
const a = f.indexOf(t.charAt(l++));
|
|
19
|
-
const c = f.indexOf(t.charAt(l++));
|
|
20
|
-
const s = o << 18 | u << 12 | a << 6 | c;
|
|
21
|
-
const e = s >> 16 & 255;
|
|
22
|
-
const r = s >> 8 & 255;
|
|
23
|
-
const n = 255 & s;
|
|
24
|
-
h[p++] = 64 === a ? String.fromCharCode(e) : 64 === c ? String.fromCharCode(e, r) : String.fromCharCode(e, r, n);
|
|
25
|
-
} while (l < t.length);
|
|
26
|
-
return h.join('');
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
UrlSafeBase64 = tslib_1.__decorate([
|
|
30
|
-
(0, core_1.Injectable)()
|
|
31
|
-
], UrlSafeBase64);
|
|
32
|
-
exports.UrlSafeBase64 = UrlSafeBase64;
|