cos-mcp 1.0.0
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/README.md +87 -0
- package/dist/index.js +110 -0
- package/dist/index.js.map +1 -0
- package/dist/server.js +339 -0
- package/dist/server.js.map +1 -0
- package/dist/services/ci/ai.service.js +185 -0
- package/dist/services/ci/ai.service.js.map +1 -0
- package/dist/services/ci/doc.service.js +175 -0
- package/dist/services/ci/doc.service.js.map +1 -0
- package/dist/services/ci/mateInsight.service.js +101 -0
- package/dist/services/ci/mateInsight.service.js.map +1 -0
- package/dist/services/ci/media.service.js +163 -0
- package/dist/services/ci/media.service.js.map +1 -0
- package/dist/services/ci/pic.service.js +99 -0
- package/dist/services/ci/pic.service.js.map +1 -0
- package/dist/services/cos/cos.service.js +139 -0
- package/dist/services/cos/cos.service.js.map +1 -0
- package/dist/services/utils.js +31 -0
- package/dist/services/utils.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { generateCode } from "../utils.js";
|
|
2
|
+
export class CIAIService {
|
|
3
|
+
bucket;
|
|
4
|
+
region;
|
|
5
|
+
cos;
|
|
6
|
+
constructor(bucket, region, cos) {
|
|
7
|
+
this.bucket = bucket;
|
|
8
|
+
this.region = region;
|
|
9
|
+
this.cos = cos;
|
|
10
|
+
}
|
|
11
|
+
// 图片处理-图片超分-云上处理
|
|
12
|
+
async aiSuperResolution(objectKey) {
|
|
13
|
+
try {
|
|
14
|
+
const result = await new Promise((resolve, reject) => {
|
|
15
|
+
const fileName = objectKey.split("/").pop(); // 提取文件名和后缀
|
|
16
|
+
this.cos.request({
|
|
17
|
+
Bucket: this.bucket, // 存储桶,必须字段
|
|
18
|
+
Region: this.region, // 存储桶所在地域,必须字段 如 ap-beijing
|
|
19
|
+
Key: objectKey, // 对象文件名,例如:folder/document.jpg。
|
|
20
|
+
Method: "POST", // 固定值
|
|
21
|
+
Action: "image_process", // 固定值
|
|
22
|
+
Headers: {
|
|
23
|
+
"Pic-Operations": JSON.stringify({
|
|
24
|
+
rules: [
|
|
25
|
+
{
|
|
26
|
+
fileid: `${Date.now()}-${generateCode(6)}-${fileName}`,
|
|
27
|
+
rule: "ci-process=AISuperResolution",
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
}),
|
|
31
|
+
},
|
|
32
|
+
}, function (error, data) {
|
|
33
|
+
if (error) {
|
|
34
|
+
// 处理请求失败
|
|
35
|
+
reject(error);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// 处理请求成功
|
|
39
|
+
resolve(data);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
isSuccess: true,
|
|
45
|
+
message: "图片超分成功",
|
|
46
|
+
data: result,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
return {
|
|
51
|
+
isSuccess: false,
|
|
52
|
+
message: "图片超分失败",
|
|
53
|
+
data: error,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// 图片处理-图片质量评分
|
|
58
|
+
async assessQuality(objectKey) {
|
|
59
|
+
try {
|
|
60
|
+
const result = await this.cos.request({
|
|
61
|
+
Bucket: this.bucket,
|
|
62
|
+
Region: this.region,
|
|
63
|
+
Method: "GET",
|
|
64
|
+
Key: objectKey,
|
|
65
|
+
Query: {
|
|
66
|
+
"ci-process": "AssessQuality",
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
isSuccess: true,
|
|
71
|
+
message: "图片处理成功",
|
|
72
|
+
data: result,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
return {
|
|
77
|
+
isSuccess: false,
|
|
78
|
+
message: "图片处理失败",
|
|
79
|
+
data: error,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// 图片处理-抠图-云上处理
|
|
84
|
+
async aiPicMatting(objectKey, width, height) {
|
|
85
|
+
try {
|
|
86
|
+
const result = await new Promise((resolve, reject) => {
|
|
87
|
+
const fileName = objectKey.split("/").pop(); // 提取文件名和后缀
|
|
88
|
+
this.cos.request({
|
|
89
|
+
Bucket: this.bucket, // 存储桶,必须字段
|
|
90
|
+
Region: this.region, // 存储桶所在地域,必须字段 如 ap-beijing
|
|
91
|
+
Key: objectKey, // 对象文件名,例如:folder/document.jpg。
|
|
92
|
+
Method: "POST", // 固定值
|
|
93
|
+
Action: "image_process", // 固定值
|
|
94
|
+
Headers: {
|
|
95
|
+
"Pic-Operations": JSON.stringify({
|
|
96
|
+
rules: [
|
|
97
|
+
{
|
|
98
|
+
fileid: `${Date.now()}-${generateCode(6)}-${fileName}`,
|
|
99
|
+
rule: "ci-process=AIImageCrop&width=" + width + "&height=" + height,
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
}),
|
|
103
|
+
},
|
|
104
|
+
}, function (error, data) {
|
|
105
|
+
if (error) {
|
|
106
|
+
// 处理请求失败
|
|
107
|
+
reject(error);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// 处理请求成功
|
|
111
|
+
resolve(data);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
// const localPath = "结果.png"; // 填写要写入的本地文件路径
|
|
116
|
+
// if (result.Body) {
|
|
117
|
+
// fs.writeFileSync(localPath, result.Body); // 将图片内容保存本地路径
|
|
118
|
+
// } else {
|
|
119
|
+
// throw new Error("Result body is undefined");
|
|
120
|
+
// }
|
|
121
|
+
// if (!result.Body) {
|
|
122
|
+
// throw new Error("Result body is undefined");
|
|
123
|
+
// }
|
|
124
|
+
// const base64Image = `data:image/jpeg;base64,${typeof result.Body === "string" ? Buffer.from(result.Body).toString("base64") : result.Body.toString("base64")}`;
|
|
125
|
+
return {
|
|
126
|
+
isSuccess: true,
|
|
127
|
+
message: "图片处理成功",
|
|
128
|
+
data: result,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
return {
|
|
133
|
+
isSuccess: false,
|
|
134
|
+
message: "图片处理失败",
|
|
135
|
+
data: error,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// 二维码识别-下载时识别
|
|
140
|
+
async aiQrcode(objectKey) {
|
|
141
|
+
try {
|
|
142
|
+
const result = await new Promise((resolve, reject) => {
|
|
143
|
+
const config = {
|
|
144
|
+
// 需要替换成您自己的存储桶信息
|
|
145
|
+
Bucket: this.bucket, // 存储桶,必须,
|
|
146
|
+
Region: this.region, // 存储桶所在地域,必须字段,
|
|
147
|
+
};
|
|
148
|
+
const key = objectKey;
|
|
149
|
+
const host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key;
|
|
150
|
+
const url = 'https://' + host;
|
|
151
|
+
this.cos.request({
|
|
152
|
+
Method: 'GET',
|
|
153
|
+
Key: key,
|
|
154
|
+
Url: url,
|
|
155
|
+
Query: {
|
|
156
|
+
'ci-process': 'QRcode', // 数据万象处理能力,二维码识别固定为 QRcode,
|
|
157
|
+
'cover': 0
|
|
158
|
+
},
|
|
159
|
+
}, function (error, data) {
|
|
160
|
+
if (error) {
|
|
161
|
+
// 处理请求失败
|
|
162
|
+
reject(error);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
// 处理请求成功
|
|
166
|
+
resolve(data);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
return {
|
|
171
|
+
isSuccess: true,
|
|
172
|
+
message: "二维码识别成功",
|
|
173
|
+
data: result,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
return {
|
|
178
|
+
isSuccess: false,
|
|
179
|
+
message: "二维码识别失败",
|
|
180
|
+
data: error,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=ai.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.service.js","sourceRoot":"","sources":["../../../src/services/ci/ai.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import COS from "cos-nodejs-sdk-v5";
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { generateCode } from "../utils.js";
|
|
4
|
+
export const GetSnapshotParamsSchema = z.object({
|
|
5
|
+
objectKey: z.string(),
|
|
6
|
+
time: z.number().optional()
|
|
7
|
+
});
|
|
8
|
+
export class CIDocService {
|
|
9
|
+
bucket;
|
|
10
|
+
region;
|
|
11
|
+
cos;
|
|
12
|
+
constructor(bucket, region, cos) {
|
|
13
|
+
this.bucket = bucket;
|
|
14
|
+
this.region = region;
|
|
15
|
+
this.cos = cos;
|
|
16
|
+
}
|
|
17
|
+
async createDocToPdfJobs(objectKey) {
|
|
18
|
+
try {
|
|
19
|
+
var host = this.bucket + '.ci.' + this.region + '.myqcloud.com/doc_jobs';
|
|
20
|
+
var url = 'https://' + host;
|
|
21
|
+
const lastDotIndex = objectKey.lastIndexOf('.');
|
|
22
|
+
const base = (lastDotIndex === -1)
|
|
23
|
+
? objectKey
|
|
24
|
+
: objectKey.substring(0, lastDotIndex);
|
|
25
|
+
const now = new Date();
|
|
26
|
+
const formattedDate = [
|
|
27
|
+
now.getFullYear(),
|
|
28
|
+
String(now.getMonth() + 1).padStart(2, '0'), // 月份补零
|
|
29
|
+
String(now.getDate()).padStart(2, '0') // 日期补零
|
|
30
|
+
].join('');
|
|
31
|
+
const outPutObject = `${formattedDate}_\${SheetID}/${base}_pdf_${generateCode(6)}.pdf`;
|
|
32
|
+
var body = COS.util.json2xml({
|
|
33
|
+
Request: {
|
|
34
|
+
Tag: 'DocProcess',
|
|
35
|
+
Input: {
|
|
36
|
+
Object: objectKey, // 存在cos里的路径
|
|
37
|
+
},
|
|
38
|
+
Operation: {
|
|
39
|
+
DocProcess: {
|
|
40
|
+
TgtType: 'pdf'
|
|
41
|
+
},
|
|
42
|
+
Output: {
|
|
43
|
+
Bucket: this.bucket,
|
|
44
|
+
Region: this.region,
|
|
45
|
+
Object: outPutObject, // 转码后存到cos的路径
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
const createResult = await new Promise((resolve, reject) => {
|
|
51
|
+
this.cos.request({
|
|
52
|
+
Key: 'doc_jobs',
|
|
53
|
+
Method: "POST", // 固定值
|
|
54
|
+
Url: url,
|
|
55
|
+
Body: body,
|
|
56
|
+
ContentType: 'application/xml',
|
|
57
|
+
}, (error, data) => error ? reject(error) : resolve(data));
|
|
58
|
+
});
|
|
59
|
+
try {
|
|
60
|
+
const jobsDetail = createResult.Response.JobsDetail;
|
|
61
|
+
const initialCode = jobsDetail.Code;
|
|
62
|
+
const initialState = jobsDetail.State;
|
|
63
|
+
if (initialCode == 'Failed') {
|
|
64
|
+
return { isSuccess: false, message: '文档转pdf失败', data: createResult };
|
|
65
|
+
}
|
|
66
|
+
if (initialState == 'Success') {
|
|
67
|
+
return {
|
|
68
|
+
isSuccess: true,
|
|
69
|
+
message: "文档转pdf成功",
|
|
70
|
+
data: createResult,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const jobId = jobsDetail.JobId;
|
|
75
|
+
// 开始轮询
|
|
76
|
+
let pollResult;
|
|
77
|
+
let lastError = null;
|
|
78
|
+
const maxAttempts = 10;
|
|
79
|
+
const interval = 2000;
|
|
80
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
81
|
+
// 首次立即执行,后续等待间隔
|
|
82
|
+
if (attempt > 0)
|
|
83
|
+
await new Promise(r => setTimeout(r, interval));
|
|
84
|
+
try {
|
|
85
|
+
// 查询任务状态
|
|
86
|
+
const { data: getResult } = await this.describeDocProcessJob(jobId);
|
|
87
|
+
const describeJobsDetail = getResult.Response.JobsDetail;
|
|
88
|
+
const describeJobCode = describeJobsDetail.Code;
|
|
89
|
+
const describeJobState = describeJobsDetail.State;
|
|
90
|
+
// 处理终态
|
|
91
|
+
if (describeJobCode === 'Success' && describeJobState == 'Success') {
|
|
92
|
+
pollResult = getResult;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
else if (describeJobCode === 'Failed') {
|
|
96
|
+
return {
|
|
97
|
+
isSuccess: false,
|
|
98
|
+
message: '文档转换失败',
|
|
99
|
+
data: getResult
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
lastError = err; // 记录错误继续重试
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (!pollResult) {
|
|
108
|
+
return {
|
|
109
|
+
isSuccess: false,
|
|
110
|
+
message: `轮询超时(${maxAttempts}次未完成)`,
|
|
111
|
+
data: createResult
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
isSuccess: true,
|
|
116
|
+
message: "文档转码成功",
|
|
117
|
+
data: pollResult
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
return {
|
|
123
|
+
isSuccess: false,
|
|
124
|
+
message: "文档转pdf失败",
|
|
125
|
+
data: error,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
return {
|
|
131
|
+
isSuccess: false,
|
|
132
|
+
message: "文档转pdf失败",
|
|
133
|
+
data: error,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async describeDocProcessJob(jobId) {
|
|
138
|
+
try {
|
|
139
|
+
let host = this.bucket + '.ci.' + this.region + '.myqcloud.com';
|
|
140
|
+
let url = 'https://' + host + '/doc_jobs/' + jobId;
|
|
141
|
+
const result = await new Promise((resolve, reject) => {
|
|
142
|
+
this.cos.request({
|
|
143
|
+
Bucket: this.bucket, // Bucket 格式:test-1250000000
|
|
144
|
+
Region: this.region,
|
|
145
|
+
Method: 'GET',
|
|
146
|
+
Key: 'doc_jobs/' + jobId,
|
|
147
|
+
Url: url,
|
|
148
|
+
}, function (error, data) {
|
|
149
|
+
if (error) {
|
|
150
|
+
// 处理请求失败
|
|
151
|
+
reject(error);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// 处理请求成功
|
|
155
|
+
resolve(data);
|
|
156
|
+
//获取返回的jobid, 去调查询任务接口, 返回具体信息
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
return {
|
|
161
|
+
isSuccess: true,
|
|
162
|
+
message: "文档转pdf成功",
|
|
163
|
+
data: result,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
return {
|
|
168
|
+
isSuccess: false,
|
|
169
|
+
message: "文档转pdf失败",
|
|
170
|
+
data: error,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=doc.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc.service.js","sourceRoot":"","sources":["../../../src/services/ci/doc.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const ImageSearchPicParamsSchema = z.object({
|
|
3
|
+
uri: z.string()
|
|
4
|
+
});
|
|
5
|
+
export const ImageSearchTextParamsSchema = z.object({
|
|
6
|
+
text: z.string()
|
|
7
|
+
});
|
|
8
|
+
export class CIMateInsightService {
|
|
9
|
+
bucket;
|
|
10
|
+
region;
|
|
11
|
+
cos;
|
|
12
|
+
datasetName;
|
|
13
|
+
constructor(bucket, region, datasetName, cos) {
|
|
14
|
+
this.bucket = bucket;
|
|
15
|
+
this.region = region;
|
|
16
|
+
this.datasetName = datasetName;
|
|
17
|
+
this.cos = cos;
|
|
18
|
+
}
|
|
19
|
+
async imageSearchPic(params) {
|
|
20
|
+
// 验证并解析参数
|
|
21
|
+
const validParams = ImageSearchPicParamsSchema.parse(params);
|
|
22
|
+
const { uri } = validParams;
|
|
23
|
+
try {
|
|
24
|
+
const key = 'datasetquery/imagesearch'; // 固定值
|
|
25
|
+
const appid = this.bucket.split('-').pop();
|
|
26
|
+
const host = `${appid}.ci.${this.region}.myqcloud.com`;
|
|
27
|
+
const url = `https://${host}/${key}`;
|
|
28
|
+
const body = JSON.stringify({
|
|
29
|
+
DatasetName: this.datasetName,
|
|
30
|
+
Mode: 'pic',
|
|
31
|
+
URI: uri
|
|
32
|
+
});
|
|
33
|
+
const result = await this.cos.request({
|
|
34
|
+
Method: 'POST', // 固定值,必须
|
|
35
|
+
Key: key, // 必须
|
|
36
|
+
Url: url, // 请求的url,必须
|
|
37
|
+
Body: body, // 请求体参数,必须
|
|
38
|
+
Headers: {
|
|
39
|
+
// 设置请求体为 json,固定值,必须
|
|
40
|
+
'Content-Type': 'application/json',
|
|
41
|
+
// 设置响应体为json,固定值,必须
|
|
42
|
+
Accept: 'application/json',
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
success: true,
|
|
47
|
+
message: '图像检索成功',
|
|
48
|
+
// data: result.Body.toString()
|
|
49
|
+
data: result
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
return {
|
|
54
|
+
isSuccess: false,
|
|
55
|
+
message: '图像检索失败',
|
|
56
|
+
data: error,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async imageSearchText(params) {
|
|
61
|
+
// 验证并解析参数
|
|
62
|
+
const validParams = ImageSearchTextParamsSchema.parse(params);
|
|
63
|
+
const { text } = validParams;
|
|
64
|
+
try {
|
|
65
|
+
const key = 'datasetquery/imagesearch'; // 固定值
|
|
66
|
+
const appid = this.bucket.split('-').pop();
|
|
67
|
+
const host = `${appid}.ci.${this.region}.myqcloud.com`;
|
|
68
|
+
const url = `https://${host}/${key}`;
|
|
69
|
+
const body = JSON.stringify({
|
|
70
|
+
DatasetName: this.datasetName,
|
|
71
|
+
Mode: 'text',
|
|
72
|
+
Text: text
|
|
73
|
+
});
|
|
74
|
+
const result = await this.cos.request({
|
|
75
|
+
Method: 'POST', // 固定值,必须
|
|
76
|
+
Key: key, // 必须
|
|
77
|
+
Url: url, // 请求的url,必须
|
|
78
|
+
Body: body, // 请求体参数,必须
|
|
79
|
+
Headers: {
|
|
80
|
+
// 设置请求体为 json,固定值,必须
|
|
81
|
+
'Content-Type': 'application/json',
|
|
82
|
+
// 设置响应体为json,固定值,必须
|
|
83
|
+
Accept: 'application/json',
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
return {
|
|
87
|
+
isSuccess: true,
|
|
88
|
+
message: '图像检索成功',
|
|
89
|
+
data: result
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
return {
|
|
94
|
+
isSuccess: false,
|
|
95
|
+
message: '请求异常: ${error.message}',
|
|
96
|
+
data: error,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=mateInsight.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mateInsight.service.js","sourceRoot":"","sources":["../../../src/services/ci/mateInsight.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import COS from "cos-nodejs-sdk-v5";
|
|
2
|
+
export class CIMediaService {
|
|
3
|
+
bucket;
|
|
4
|
+
region;
|
|
5
|
+
cos;
|
|
6
|
+
constructor(bucket, region, cos) {
|
|
7
|
+
this.bucket = bucket;
|
|
8
|
+
this.region = region;
|
|
9
|
+
this.cos = cos;
|
|
10
|
+
}
|
|
11
|
+
async createMediaSmartCoverJob(objectKey) {
|
|
12
|
+
try {
|
|
13
|
+
var host = this.bucket + '.ci.' + this.region + '.myqcloud.com/jobs';
|
|
14
|
+
var url = 'https://' + host;
|
|
15
|
+
const lastDotIndex = objectKey.lastIndexOf('.');
|
|
16
|
+
const base = (lastDotIndex === -1)
|
|
17
|
+
? objectKey
|
|
18
|
+
: objectKey.substring(0, lastDotIndex);
|
|
19
|
+
const outPutObject = `${base}_\${jobid}_\${number}`;
|
|
20
|
+
var body = COS.util.json2xml({
|
|
21
|
+
Request: {
|
|
22
|
+
Tag: 'SmartCover',
|
|
23
|
+
Input: {
|
|
24
|
+
Object: objectKey, // 存在cos里的路径
|
|
25
|
+
},
|
|
26
|
+
Operation: {
|
|
27
|
+
Output: {
|
|
28
|
+
Bucket: this.bucket,
|
|
29
|
+
Region: this.region,
|
|
30
|
+
Object: outPutObject, // 转码后存到cos的路径
|
|
31
|
+
},
|
|
32
|
+
SmartCover: {
|
|
33
|
+
Count: 1,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
const createResult = await new Promise((resolve, reject) => {
|
|
39
|
+
this.cos.request({
|
|
40
|
+
Key: 'jobs',
|
|
41
|
+
Method: "POST", // 固定值
|
|
42
|
+
Url: url,
|
|
43
|
+
Body: body,
|
|
44
|
+
ContentType: 'application/xml',
|
|
45
|
+
}, (error, data) => error ? reject(error) : resolve(data));
|
|
46
|
+
});
|
|
47
|
+
try {
|
|
48
|
+
const jobsDetail = createResult.Response.JobsDetail;
|
|
49
|
+
const initialCode = jobsDetail.Code;
|
|
50
|
+
const initialState = jobsDetail.State;
|
|
51
|
+
if (initialCode == 'Failed') {
|
|
52
|
+
return { isSuccess: false, message: '智能封面任务失败', data: createResult };
|
|
53
|
+
}
|
|
54
|
+
if (initialState == 'Success') {
|
|
55
|
+
return {
|
|
56
|
+
isSuccess: true,
|
|
57
|
+
message: "智能封面任务成功",
|
|
58
|
+
data: createResult,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const jobId = jobsDetail.JobId;
|
|
63
|
+
// 开始轮询
|
|
64
|
+
let pollResult;
|
|
65
|
+
let lastError = null;
|
|
66
|
+
const maxAttempts = 10;
|
|
67
|
+
const interval = 4000;
|
|
68
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
69
|
+
// 首次立即执行,后续等待间隔
|
|
70
|
+
if (attempt > 0)
|
|
71
|
+
await new Promise(r => setTimeout(r, interval));
|
|
72
|
+
try {
|
|
73
|
+
// 查询任务状态
|
|
74
|
+
const { data: getResult } = await this.describeMediaJob(jobId);
|
|
75
|
+
const describeJobsDetail = getResult.Response.JobsDetail;
|
|
76
|
+
const describeJobCode = describeJobsDetail.Code;
|
|
77
|
+
const describeJobState = describeJobsDetail.State;
|
|
78
|
+
// 处理终态
|
|
79
|
+
if (describeJobCode === 'Success' && describeJobState == 'Success') {
|
|
80
|
+
pollResult = getResult;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
else if (describeJobCode === 'Failed') {
|
|
84
|
+
return {
|
|
85
|
+
isSuccess: false,
|
|
86
|
+
message: '智能封面任务失败',
|
|
87
|
+
data: getResult
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
lastError = err; // 记录错误继续重试
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (!pollResult) {
|
|
96
|
+
return {
|
|
97
|
+
isSuccess: false,
|
|
98
|
+
message: `轮询超时(${maxAttempts}次未完成)`,
|
|
99
|
+
data: createResult
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
isSuccess: true,
|
|
104
|
+
message: "智能封面任务成功",
|
|
105
|
+
data: pollResult
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
return {
|
|
111
|
+
isSuccess: false,
|
|
112
|
+
message: "智能封面任务失败",
|
|
113
|
+
data: error,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
return {
|
|
119
|
+
isSuccess: false,
|
|
120
|
+
message: "智能封面任务失败",
|
|
121
|
+
data: error,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async describeMediaJob(jobId) {
|
|
126
|
+
try {
|
|
127
|
+
let host = this.bucket + '.ci.' + this.region + '.myqcloud.com';
|
|
128
|
+
let url = 'https://' + host + '/doc_jobs/' + jobId;
|
|
129
|
+
const result = await new Promise((resolve, reject) => {
|
|
130
|
+
this.cos.request({
|
|
131
|
+
Bucket: this.bucket, // Bucket 格式:test-1250000000
|
|
132
|
+
Region: this.region,
|
|
133
|
+
Method: 'GET',
|
|
134
|
+
Key: 'doc_jobs/' + jobId,
|
|
135
|
+
Url: url,
|
|
136
|
+
}, function (error, data) {
|
|
137
|
+
if (error) {
|
|
138
|
+
// 处理请求失败
|
|
139
|
+
reject(error);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// 处理请求成功
|
|
143
|
+
resolve(data);
|
|
144
|
+
//获取返回的jobid, 去调查询任务接口, 返回具体信息
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
return {
|
|
149
|
+
isSuccess: true,
|
|
150
|
+
message: "智能封面任务查询成功",
|
|
151
|
+
data: result,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
return {
|
|
156
|
+
isSuccess: false,
|
|
157
|
+
message: "智能封面任务查询失败",
|
|
158
|
+
data: error,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=media.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.service.js","sourceRoot":"","sources":["../../../src/services/ci/media.service.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,mBAAmB,CAAC;AAKpC,MAAM,OAAO,cAAc;IACvB,MAAM,CAAS;IACf,MAAM,CAAS;IACf,GAAG,CAAM;IACT,YAAY,MAAc,EAAE,MAAc,EAAE,GAAQ;QAChD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IAGD,KAAK,CAAC,wBAAwB,CAAC,SAAiB;QAC9C,IAAI,CAAC;YACH,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC;YACrE,IAAI,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC;YAE5B,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC;gBAChC,CAAC,CAAC,SAAS;gBACb,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;YAEvC,MAAM,YAAY,GAAG,GAAG,IAAI,uBAAuB,CAAC;YACpD,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC3B,OAAO,EAAE;oBACP,GAAG,EAAE,YAAY;oBACjB,KAAK,EAAE;wBACL,MAAM,EAAE,SAAS,EAAE,YAAY;qBAChC;oBAED,SAAS,EAAE;wBACT,MAAM,EAAE;4BACN,MAAM,EAAE,IAAI,CAAC,MAAM;4BACnB,MAAM,EAAE,IAAI,CAAC,MAAM;4BACnB,MAAM,EAAE,YAAY,EAAE,cAAc;yBACrC;wBACD,UAAU,EAAE;4BACV,KAAK,EAAE,CAAC;yBACT;qBACF;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACzD,IAAI,CAAC,GAAG,CAAC,OAAO,CACd;oBACE,GAAG,EAAE,MAAM;oBACX,MAAM,EAAE,MAAM,EAAE,MAAM;oBACtB,GAAG,EAAE,GAAG;oBACR,IAAI,EAAE,IAAI;oBACV,WAAW,EAAE,iBAAiB;iBAC/B,EACD,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CACvD,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,IAAI,CAAC;gBACH,MAAM,UAAU,GAAI,YAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAC7D,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;gBACpC,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC;gBAEtC,IAAI,WAAW,IAAI,QAAQ,EAAE,CAAC;oBAC5B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBACvE,CAAC;gBACD,IAAG,YAAY,IAAI,SAAS,EAAC,CAAC;oBAC5B,OAAO;wBACL,SAAS,EAAE,IAAI;wBACf,OAAO,EAAE,UAAU;wBACnB,IAAI,EAAE,YAAY;qBACnB,CAAC;gBACJ,CAAC;qBAAI,CAAC;oBACJ,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;oBAE/B,OAAO;oBACP,IAAI,UAAe,CAAC;oBACpB,IAAI,SAAS,GAAiB,IAAI,CAAC;oBACnC,MAAM,WAAW,GAAG,EAAE,CAAC;oBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC;oBAGtB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;wBACvD,gBAAgB;wBAChB,IAAI,OAAO,GAAG,CAAC;4BAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;wBAEjE,IAAI,CAAC;4BACH,SAAS;4BACT,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;4BAE/D,MAAM,kBAAkB,GAAI,SAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC;4BAGlE,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC;4BAChD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,KAAK,CAAC;4BAGlD,OAAO;4BACP,IAAI,eAAe,KAAK,SAAS,IAAI,gBAAgB,IAAI,SAAS,EAAE,CAAC;gCACnE,UAAU,GAAG,SAAS,CAAC;gCACvB,MAAM;4BACR,CAAC;iCAAM,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;gCACxC,OAAO;oCACL,SAAS,EAAE,KAAK;oCAChB,OAAO,EAAE,UAAU;oCACnB,IAAI,EAAE,SAAS;iCAChB,CAAC;4BACN,CAAC;wBACL,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACX,SAAS,GAAG,GAAY,CAAC,CAAC,WAAW;wBACzC,CAAC;oBACH,CAAC;oBAED,IAAI,CAAC,UAAU,EAAE,CAAC;wBAChB,OAAO;4BACL,SAAS,EAAE,KAAK;4BAChB,OAAO,EAAE,QAAQ,WAAW,OAAO;4BACnC,IAAI,EAAE,YAAY;yBACnB,CAAC;oBACJ,CAAC;oBAED,OAAO;wBACL,SAAS,EAAE,IAAI;wBACf,OAAO,EAAE,UAAU;wBACnB,IAAI,EAAE,UAAU;qBACjB,CAAC;gBACA,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,UAAU;oBACnB,IAAI,EAAE,KAAK;iBACZ,CAAC;YACJ,CAAC;QAGH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,UAAU;gBACnB,IAAI,EAAE,KAAK;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAa;QAClC,IAAI,CAAC;YACH,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC;YAChE,IAAI,GAAG,GAAG,UAAU,GAAG,IAAI,GAAG,YAAY,GAAG,KAAK,CAAC;YACnD,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnD,IAAI,CAAC,GAAG,CAAC,OAAO,CACd;oBACE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,4BAA4B;oBACjD,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,KAAK;oBACb,GAAG,EAAE,WAAW,GAAG,KAAK;oBACxB,GAAG,EAAE,GAAG;iBACT,EACD,UAAU,KAAK,EAAE,IAAI;oBACnB,IAAI,KAAK,EAAE,CAAC;wBACV,SAAS;wBACT,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC;yBAAM,CAAC;wBACN,SAAS;wBACT,OAAO,CAAC,IAAI,CAAC,CAAC;wBACd,8BAA8B;oBAChC,CAAC;gBACH,CAAC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,YAAY;gBACrB,IAAI,EAAE,MAAM;aACb,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,YAAY;gBACrB,IAAI,EAAE,KAAK;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;CAEJ"}
|