@nger/fk-upload 1.0.201 → 1.0.204
Sign up to get free protection for your applications and to get access to all the features.
- 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;
|