diff --git a/CHANGELOG.md b/CHANGELOG.md index 374c9e5..88254fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,8 @@ fix: 处理uploadFiles里的Key 去掉开头的/ ## [v1.4.19](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.18...v1.4.19) - 2023-08-03 feat -- 提供base64方法 + +- 提供base64方法 - 优化d.ts ### Merged @@ -34,8 +35,9 @@ feat ## [v1.4.18](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.17...v1.4.18) - 2023-06-01 feat -- 支持postBucketInventory -- 优化d.ts + +- 支持postBucketInventory +- 优化d.ts ### Commits @@ -63,7 +65,8 @@ feat ## [v1.4.17](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.16...v1.4.17) - 2023-05-04 fix -- 避开Windows Defender报毒 + +- 避开Windows Defender报毒 ### Merged @@ -81,7 +84,8 @@ fix ## [v1.4.16](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.15...v1.4.16) - 2023-03-07 feat -- 修改webpack globalObject指向this + +- 修改webpack globalObject指向this ### Commits @@ -97,7 +101,8 @@ feat ## [v1.4.15](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.14...v1.4.15) - 2022-12-27 fix -- 更新可以签入签名的headers + +- 更新可以签入签名的headers ### Merged @@ -112,7 +117,8 @@ fix ## [v1.4.14](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.13...v1.4.14) - 2022-11-29 fix -- 增加容错 + +- 增加容错 ### Merged @@ -126,7 +132,8 @@ fix ## [v1.4.13](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.12...v1.4.13) - 2022-11-22 feat -- 升级beacon sdk版本到4.5.14 + +- 升级beacon sdk版本到4.5.14 ### Commits @@ -136,7 +143,8 @@ feat ## [v1.4.12](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.11...v1.4.12) - 2022-11-21 feat -- getObjectAcl支持传VersionId + +- getObjectAcl支持传VersionId ### Merged @@ -146,7 +154,8 @@ feat ## [v1.4.11](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.10...v1.4.11) - 2022-11-09 fix -- 升级依赖包@xmldom/xmldom版本 + +- 升级依赖包@xmldom/xmldom版本 ### Commits @@ -156,7 +165,8 @@ fix ## [v1.4.10](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.9...v1.4.10) - 2022-10-22 fix -- getObjectUrl暂时只支持回调写法 + +- getObjectUrl暂时只支持回调写法 ### Merged @@ -168,10 +178,10 @@ fix ## [v1.4.9](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.8...v1.4.9) - 2022-10-20 -- 修复getSourceParams使用不当部分 +- 修复getSourceParams使用不当部分 - protocol兼容不带冒号的http、https -- 合法域名校验支持cos内网、cn域名 -- d.ts补充 +- 合法域名校验支持cos内网、cn域名 +- d.ts补充 ### Merged @@ -181,7 +191,8 @@ fix ## [v1.4.8](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.6...v1.4.8) - 2022-09-06 fix -- 修复已知问题 + +- 修复已知问题 ### Commits @@ -236,7 +247,8 @@ fix ## [v1.4.1](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.4.0...v1.4.1) - 2022-08-18 fix -- 修复引入sdk在dev模式下启动报错问题 + +- 修复引入sdk在dev模式下启动报错问题 ### Merged @@ -249,8 +261,9 @@ fix ## [v1.4.0](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.3.10...v1.4.0) - 2022-08-17 feat -- 升级webpack版本 -- 增加beacon上报 + +- 升级webpack版本 +- 增加beacon上报 ### Merged @@ -264,6 +277,7 @@ feat ## [v1.3.10](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.3.9...v1.3.10) - 2022-08-01 fix + - isNode环境判断新增webWorker场景 ### Merged @@ -279,6 +293,7 @@ fix ## [v1.3.9](https://github.com/tencentyun/cos-js-sdk-v5/compare/v1.3.8...v1.3.9) - 2022-06-23 feat + - putBucketCors支持ResponseVary - 补充d.ts @@ -790,7 +805,7 @@ fix:修复getBucketReferer已知错误 - 修复 clearQueue Bug [`a8e6f08`](https://github.com/tencentyun/cos-js-sdk-v5/commit/a8e6f0809113fa7b844acbaa0cb8e4f61df9354d) - fix authorization error [`7e8a406`](https://github.com/tencentyun/cos-js-sdk-v5/commit/7e8a4069fbd485bbe4b92bb0a26b2b80dacc2f65) -- 修改复制参数、任务增加 _custom 字段 [`00d04fc`](https://github.com/tencentyun/cos-js-sdk-v5/commit/00d04fc0f8d40b56968327d0b93862a2f26b92c8) +- 修改复制参数、任务增加 \_custom 字段 [`00d04fc`](https://github.com/tencentyun/cos-js-sdk-v5/commit/00d04fc0f8d40b56968327d0b93862a2f26b92c8) - getObjectUrl add Expires [`fe74e2d`](https://github.com/tencentyun/cos-js-sdk-v5/commit/fe74e2df5191d075483d9abb8a18c9426924f28f) ## [v0.5.13](https://github.com/tencentyun/cos-js-sdk-v5/compare/v0.5.12...v0.5.13) - 2019-04-08 @@ -1173,7 +1188,7 @@ fix:修复getBucketReferer已知错误 - 修改签名计算 [`cfff58f`](https://github.com/tencentyun/cos-js-sdk-v5/commit/cfff58fc2cc2cda803efde418a7655f7b84b8f38) - 修改 region [`9979420`](https://github.com/tencentyun/cos-js-sdk-v5/commit/9979420c283e0c9756edff21d0e06665d9bfa165) - 修复报错,修改签名参数 [`ccf9017`](https://github.com/tencentyun/cos-js-sdk-v5/commit/ccf901731b3b8d8bd0e6a23871f7098c36115009) -- CORS AllowHeader 例子改成 * [`0a4d5af`](https://github.com/tencentyun/cos-js-sdk-v5/commit/0a4d5afe97bf3aa297651cac9896eb974be9e76a) +- CORS AllowHeader 例子改成 \* [`0a4d5af`](https://github.com/tencentyun/cos-js-sdk-v5/commit/0a4d5afe97bf3aa297651cac9896eb974be9e76a) - 修改 Readme [`75cb126`](https://github.com/tencentyun/cos-js-sdk-v5/commit/75cb126d3a3d148df16df86bec1b49b35ffe473f) - 修改队列处理 [`d8f856e`](https://github.com/tencentyun/cos-js-sdk-v5/commit/d8f856eb698bde8b3c1e20be62b16c62392800fc) - 如掉 async 模块引用 [`7f16e51`](https://github.com/tencentyun/cos-js-sdk-v5/commit/7f16e5112d05160b86026efc3d19c5692ed44e76) @@ -1226,7 +1241,7 @@ fix:修复getBucketReferer已知错误 - add task demo [`20a67b0`](https://github.com/tencentyun/cos-js-sdk-v5/commit/20a67b0bd2a4655ab915f5ba86ff0558764f28e3) - remove data=data||{}; [`1c149d3`](https://github.com/tencentyun/cos-js-sdk-v5/commit/1c149d38b5a1e0ad2bfb7cda089e24204c6dc39c) - modify readme [`f1d6c16`](https://github.com/tencentyun/cos-js-sdk-v5/commit/f1d6c16f19e7b3f096fbb407dca05a714dfdff33) -- fix !'()* url encode error [`04e4df8`](https://github.com/tencentyun/cos-js-sdk-v5/commit/04e4df8f0a74d474c972980405b132a57b4abca7) +- fix !'()\* url encode error [`04e4df8`](https://github.com/tencentyun/cos-js-sdk-v5/commit/04e4df8f0a74d474c972980405b132a57b4abca7) - fix https error [`3dada36`](https://github.com/tencentyun/cos-js-sdk-v5/commit/3dada36eab9ce1fda060d00a8cef4d65ef9caf08) - fix onProgress error [`2248622`](https://github.com/tencentyun/cos-js-sdk-v5/commit/22486225ceece9ed0b8c639d34b30ecd6beff166) - can cancel paused [`46e9e87`](https://github.com/tencentyun/cos-js-sdk-v5/commit/46e9e877092ac0d11afe8bca292f134d92b34031) diff --git a/demo/CIDemos/ai.js b/demo/CIDemos/ai.js new file mode 100644 index 0000000..36cf908 --- /dev/null +++ b/demo/CIDemos/ai.js @@ -0,0 +1,1567 @@ +/** + * AI内容识别demo集合 +*/ + +// 开通AI内容识别 +export const CreateAIProcessBucket = { + name: '开通AI内容识别', + fn: function CreateAIProcessBucket() { + const key = 'ai_bucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 关闭AI内容识别 +export const closeAIBucket = { + name: '关闭AI内容识别', + fn: function closeAIBucket() { + const key = 'ai_bucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'DELETE', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 查询开通AI内容识别的桶 +export const DescribeAIProcessBuckets = { + name: '查询开通AI内容识别的桶', + fn: function DescribeAIProcessBuckets() { + const key = 'ai_bucket'; // 固定值 + const host = `ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 地域信息,例如 ap-shanghai、ap-beijing,若查询多个地域以“,”分隔字符串,详情请参见 地域与域名;是否必传:是 + // regions: '', + // 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索;是否必传:是 + // bucketNames: '', + // 存储桶名称前缀,前缀搜索;是否必传:是 + // bucketName: '', + // 第几页;是否必传:是 + // pageNumber: 1, + // 每页个数,大于0且小于等于100的整数;是否必传:是 + // pageSize: 10, + }, + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 查询AI内容识别队列 +export const DescribeAiProcessQueues = { + name: '查询AI内容识别队列', + fn: function DescribeAiProcessQueues() { + const key = 'ai_queue'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 队列 ID,以“,”符号分割字符串;是否必传:否 + // queueIds: '', + // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 + state: 'Active', + // 第几页,默认值1;是否必传:否 + // pageNumber: 0, + // 每页个数,默认值10;是否必传:否 + // pageSize: 0, + }, + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新AI内容识别队列 +export const UpdateAiProcessQueue = { + name: '更新AI内容识别队列', + fn: function UpdateAiProcessQueue() { + const queueId = 'xxx'; // 队列id + const key = `ai_queue/${queueId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 队列名称,仅支持中文、英文、数字、_、-和*,长度不超过 128;是否必传:是 + Name: 'my_queue', + // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:是 + State: 'Active', + // 回调配置;是否必传:是 + NotifyConfig: { + // 回调开关OffOn;是否必传:否 + State: 'On', + // 回调事件TaskFinish:任务完成WorkflowFinish:工作流完成;是否必传:否 + Event: 'TaskFinish', + // 回调格式XMLJSON;是否必传:否 + // ResultFormat: '', + // 回调类型UrlTDMQ;是否必传:否 + Type: 'Url', + // 回调地址,不能为内网地址。;是否必传:否 + Url: 'http://example.com', + // TDMQ 使用模式Topic:主题订阅Queue: 队列服务;是否必传:否 + // MqMode: '', + // TDMQ 所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:否 + // MqRegion: '', + // TDMQ 主题名称;是否必传:否 + // MqName: '', + }, + }, + }); + + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 识别图片标签 +export const getImageLabel = { + name: '识别图片标签', + fn: function getImageLabel() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 与detect-url二选一传递 + Query: { + // 固定值detect-label;是否必传:是 + 'ci-process': 'detect-label', + // 本次调用支持的识别场景,可选值如下:web,针对网络图片优化;camera,针对手机摄像头拍摄图片优化;album,针对手机相册、网盘产品优化;news,针对新闻、资讯、广电等行业优化;如果不传此参数,则默认为camera。支持多场景(scenes)一起检测,以,分隔。例如,使用 scenes=web,camera 即对一张图片使用两个模型同时检测,输出两套识别结果。;是否必传:否 + // scenes: '', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 二维码识别(云上图片识别) +export const recognitionQRcode = { + name: '二维码识别(云上图片识别)', + fn: function recognitionQRcode() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/二维码.png', // 必须 + Query: { + // 万象处理能力,二维码识别固定为 QRcode;是否必传:是 + 'ci-process': 'QRcode', + // 二维码覆盖功能,将对识别出的二维码覆盖上马赛克。取值为0或1。0表示不开启二维码覆盖,1表示开启二维码覆盖,默认值0;是否必传:否 + cover: 0, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 二维码识别(上传时识别) +export const identifyQrcode_put = { + name: '二维码识别(上传时识别)', + fn: function identifyQrcode_put() { + util.selectLocalFile(function (files) { + const file = files && files[0]; + if (!file) return; + cos.putObject( + { + Bucket: config.Bucket, // Bucket 格式:test-1250000000 + Region: config.Region, + Key: '1/上传二维码.png', + Body: file, + Headers: { + // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 + 'Pic-Operations': '{"is_pic_info": 1, "rules": [{"fileid":"test.jpg","rule":" QRcode/cover/0"}]}', + }, + onProgress: function (progressData) { + console.log('onProgress', JSON.stringify(progressData)); + }, + }, + function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }, + ); + }); + } +}; + +// 二维码识别(下载时识别) +export const identifyQrcode_get = { + name: '二维码识别(下载时识别)', + fn: function identifyQrcode_get() { + const key = '1/二维码图片.png'; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: key, + Query: { + 'ci-process': 'QRcode', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 二维码生成 +export const createCRcode = { + name: '二维码生成', + fn: function createCRcode() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Query: { + 'ci-process': 'qrcode-generate', // 必须,对象存储处理能力,二维码生成参数为 qrcode-generate + 'qrcode-content': '二维码文案', // 必须,可识别的二维码文本信息 + // mode: 0, // 非必须,生成的二维码类型,可选值:0或1。0为二维码,1为条形码,默认值为0 + width: 200, //必须,指定生成的二维码或条形码的宽度,高度会进行等比压缩 + }, + }, function (err, data) { + if (!err) { + // 获得二维码base64 + const imgBase64 = data.Response.ResultImage; + // 比如可拼接前缀直接展示在img里 + // document.querySelector('#img').src = 'data:image/jpg;base64,' + imgBase64; + } + }); + } +}; + +// 图片文字识别 +export const cOSOCR = { + name: '图片文字识别', + fn: function cOSOCR() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/0.jpg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,图片文字识别固定为OCR;是否必传:是 + 'ci-process': 'OCR', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + // ocr的识别类型,有效值为general,accurate,efficient,fast,handwriting。general表示通用印刷体识别;accurate表示印刷体高精度版;efficient表示印刷体精简版;fast表示印刷体高速版;handwriting表示手写体识别。默认值为general。;是否必传:否 + type: 'general', + // type值为general时有效,表示识别语言类型。支持自动识别语言类型,同时支持自选语言种类,默认中英文混合(zh),各种语言均支持与英文混合的文字识别。可选值:zh:中英混合zh_rare:支持英文、数字、中文生僻字、繁体字,特殊符号等auto:自动mix:混合语种jap:日语kor:韩语spa:西班牙语fre:法语ger:德语por:葡萄牙语vie:越语may:马来语rus:俄语ita:意大利语hol:荷兰语swe:瑞典语fin:芬兰语dan:丹麦语nor:挪威语hun:匈牙利语tha:泰语hi:印地语ara:阿拉伯语;是否必传:否 + 'language-type': 'zh', + // type值为general,fast时有效,表示是否开启PDF识别,有效值为true和false,默认值为false,开启后可同时支持图片和PDF的识别。;是否必传:否 + ispdf: false, + // type值为general,fast时有效,表示需要识别的PDF页面的对应页码,仅支持PDF单页识别,当上传文件为PDF且ispdf参数值为true时有效,默认值为1。;是否必传:否 + // 'pdf-pagenumber': 0, + // type值为general,accurate时有效,表示识别后是否需要返回单字信息,有效值为true和false,默认为false;是否必传:否 + isword: false, + // type值为handwriting时有效,表示是否开启单字的四点定位坐标输出,有效值为true和false,默认值为false。;是否必传:否 + 'enable-word-polygon': false, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 车辆识别 +export const aIDetectCar = { + name: '车辆识别', + fn: function aIDetectCar() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/car.png', // 对象文件名,必须,例如:folder/document.jpg + Query: { + // 数据万象处理能力,车辆识别固定为 DetectCar;是否必传:是 + 'ci-process': 'DetectCar', + }, + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 宠物识别 +export const aIDetectPet = { + name: '宠物识别', + fn: function aIDetectPet() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 对象文件名,必须,例如:folder/document.jpg须 + Query: { + // 数据万象处理能力,宠物识别固定为 detect-pet;是否必传:是 + 'ci-process': 'detect-pet', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 创建视频目标检测模板 +export const postVideoTargetTemplete = { + name: '创建视频目标检测模板', + fn: function postVideoTargetTemplete() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:VideoTargetRec;是否必传:是 + Tag: 'VideoTargetRec', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_videoTargetRec', + // 视频目标检测 参数;是否必传:是 + VideoTargetRec: { + // 是否开启人体检测,取值 true/false;是否必传:否 + Body: 'true', + // 是否开启宠物检测,取值 true/false;是否必传:否 + Pet: 'true', + // 是否开启车辆检测,取值 true/false;是否必传:否 + Car: 'false', + }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新视频目标检测模板 +export const updateVideoTargetTemplete = { + name: '更新视频目标检测模板', + fn: function updateVideoTargetTemplete() { + const templateId = 'xxxxxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:VideoTargetRec;是否必传:是 + Tag: 'VideoTargetRec', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_videoTargetRec2', + // 视频目标检测 参数;是否必传:是 + VideoTargetRec: { + // 是否开启人体检测,取值 true/false;是否必传:否 + Body: 'false', + // 是否开启宠物检测,取值 true/false;是否必传:否 + Pet: 'false', + // 是否开启车辆检测,取值 true/false;是否必传:否 + Car: 'true', + }, + }, + }); + + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交一个视频目标检测任务 +export const postVideoTargetRec = { + name: '提交一个视频目标检测任务', + fn: function postVideoTargetRec() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:VideoTargetRec;是否必传:是 + Tag: 'VideoTargetRec', + // 操作规则;是否必传:是 + Operation: { + // 视频目标检测模板 ID;与VideoTargetRec二选一传递 + TemplateId: 'xxxx', + // 视频目标检测参数, 同创建视频目标检测模板接口中的 Request.VideoTargetRec;与TemplateId二选一传递 + // VideoTargetRec: { + // 是否开启人体检测,取值 true/false;是否必传:否 + // Body: '', + // 是否开启宠物检测,取值 true/false;是否必传:否 + // Pet: '', + // 是否开启车辆检测,取值 true/false;是否必传:否 + // Car: '', + // }, + // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 待操作的媒体信息;是否必传:是 + Input: { + // 媒体文件名;是否必传:否 + Object: 'ci/test.mp4', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情请参见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交词性分析任务 +export const postWordsGeneralize = { + name: '提交词性分析任务', + fn: function postWordsGeneralize() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:WordsGeneralize;是否必传:是 + Tag: 'WordsGeneralize', + // 待操作的对象信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'ci/test.txt', + }, + // 操作规则;是否必传:是 + Operation: { + // 指定分词参数;是否必传:是 + WordsGeneralize: { + // ner 方式,支持 NerBasic 和 DL,默认值 DL;是否必传:否 + NerMethod: 'DL', + // 分词粒度,支持 SegBasic 和 MIX,默认值 MIX;是否必传:否 + SegMethod: 'MIX', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 活体人脸核身 +export const LivenessRecognition = { + name: '活体人脸核身', + fn: function LivenessRecognition() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/tf.mp4', // 必须 + Query: { + // 数据万象处理能力,人脸核身固定为 LivenessRecognition;是否必传:是 + 'ci-process': 'LivenessRecognition', + // 身份证号;是否必传:是 + IdCard: '610321199411040019', + // 姓名。中文请使用 UTF-8编码;是否必传:是 + Name: '田丰', + // 活体检测类型,取值:LIP/ACTION/SILENTLIP 为数字模式,ACTION 为动作模式,SILENT 为静默模式,三种模式选择一种传入;是否必传:是 + LivenessType: 'SILENT', + // 数字模式传参:数字验证码(1234),需先调用接口获取数字验证码动作模式传参:传动作顺序(2,1 or 1,2),需先调用接口获取动作顺序静默模式传参:空;是否必传:否 + ValidateData: '', + // 需要返回多张最佳截图,取值范围1 - 10,不设置默认返回一张最佳截图;是否必传:否 + BestFrameNum: 1, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 获取动作顺序 +export const GetActionSequence = { + name: '获取动作顺序', + fn: function GetActionSequence() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Query: { + // 数据万象处理能力,获取动作顺序固定为 GetActionSequence;是否必传:是 + 'ci-process': 'GetActionSequence', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 获取数字验证码 +export const GetLiveCode = { + name: '获取数字验证码', + fn: function GetLiveCode() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Query: { + // 数据万象处理能力,获取数字验证码固定为 GetLiveCode;是否必传:是 + 'ci-process': 'GetLiveCode', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 卡证识别 +export const aILicenseRec = { + name: '卡证识别', + fn: function aILicenseRec() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/card.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,卡证识别固定为AILicenseRec;是否必传:是 + 'ci-process': 'AILicenseRec', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + 'detect-url': '', + // 卡证识别类型,有效值为IDCard,DriverLicense。
IDCard表示身份证;DriverLicense表示驾驶证,默认:DriverLicense;是否必传:是 + CardType: 'IDCard', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 开通以图搜图 +export const CreateImageSearchBucket = { + name: '开通以图搜图', + fn: function CreateImageSearchBucket() { + const key = 'CreateImageSearchBucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 图库容量限制;是否必传:是 + MaxCapacity: 1000, + // 图库访问限制,默认10;是否必传:否 + MaxQps: 10, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 商品抠图 +export const goodsMatting = { + name: '商品抠图', + fn: function goodsMatting() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/goods.jpeg', // 与detect-url二选一传递 + Query: { + // ;是否必传:是 + 'ci-process': 'GoodsMatting', + // ;是否必传:否 + // 'detect-url': '', + }, + RawBody: true, + DataType: 'blob', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 添加图库图片 +export const AddImage = { + name: '添加图库图片', + fn: function AddImage() { + const body = COS.util.json2xml({ + Request: { + // 物品 ID,最多支持64个字符。若 EntityId 已存在,则对其追加图片;是否必传:是 + EntityId: '123456', + // 用户自定义的内容,最多支持4096个字符,查询时原样带回;是否必传:否 + CustomContent: '小商品', + // 图片自定义标签,最多不超过10个,json 字符串,格式为 key:value (例 key1>=1 key1>='aa' )对;是否必传:否 + // Tags: '', + }, + }); + + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', // 固定值,必须 + Key: 'ci/goods.jpeg', // 必须 + Query: { + // 固定值:ImageSearch;是否必传:是 + 'ci-process': 'ImageSearch', + // 固定值:AddImage;是否必传:是 + action: 'AddImage', + }, + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 删除图库图片 +export const DeleteImage = { + name: '删除图库图片', + fn: function DeleteImage() { + const body = COS.util.json2xml({ + Request: { + // 物品 ID;是否必传:是 + EntityId: '', + }, + }); + + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 检索图片 +export const SearchImage = { + name: '检索图片', + fn: function SearchImage() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/goods.jpeg', // 必须 + Query: { + 'ci-process': 'ImageSearch', + action: 'SearchImage', + // 出参 Score 中,只有超过 MatchThreshold 值的结果才会返回。默认为0;是否必传:否 + MatchThreshold: 0, + // 起始序号,默认值为0;是否必传:否 + Offset: 0, + // 返回数量,默认值为10,最大值为100;是否必传:否 + Limit: 0, + // 针对入库时提交的 Tags 信息进行条件过滤。支持>、>=、<、<=、=、!=,多个条件之间支持 AND 和 OR 进行连接;是否必传:否 + Filter: '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交内容翻译任务 +export const postTranslation = { + name: '提交内容翻译任务', + fn: function postTranslation() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Translation;是否必传:是 + Tag: 'Translation', + // 待操作的对象信息;是否必传:是 + Input: { + // 源文档文件名单文件(docx/xlsx/html/markdown/txt):不超过800万字符有页数的(pdf/pptx):不超过300页文本文件(txt):不超过10MB二进制文件(pdf/docx/pptx/xlsx):不超过60MB图片文件(jpg/jpeg/png/webp):不超过10MB;是否必传:是 + Object: 'ci/test.txt', + // 文档语言类型zh:简体中文zh-hk:繁体中文zh-tw:繁体中文zh-tr:繁体中文en:英语ar:阿拉伯语de:德语es:西班牙语fr:法语id:印尼语it:意大利语ja:日语pt:葡萄牙语ru:俄语ko:韩语km:高棉语lo:老挝语;是否必传:是 + Lang: 'zh-hk', + // 文档类型pdfdocxpptxxlsxtxtxmlhtml:只能翻译 HTML 里的文本节点,需要通过 JS 动态加载的不进行翻译markdownjpgjpegpngwebp;是否必传:是 + Type: 'txt', + // 原始文档类型仅在 Type=pdf/jpg/jpeg/png/webp 时使用,当值为pdf时,仅支持 docx、pptx当值为jpg/jpeg/png/webp时,仅支持txt;是否必传:否 + // BasicType: '', + }, + // 操作规则;是否必传:是 + Operation: { + // 翻译参数;是否必传:是 + Translation: { + // 目标语言类型源语言类型为 zh/zh-hk/zh-tw/zh-tr 时支持:en、ar、de、es、fr、id、it、ja、it、ru、ko、km、lo、pt源语言类型为 en 时支持:zh、zh-hk、zh-tw、zh-tr、ar、de、es、fr、id、it、ja、it、ru、ko、km、lo、pt其他类型时支持:zh、zh-hk、zh-tw、zh-tr、en;是否必传:是 + Lang: 'en', + // 文档类型,源文件类型与目标文件类型映射关系如下:docx:docxpptx:pptxxlsx:xlsxtxt:txtxml:xmlhtml:htmlmarkdown:markdownpdf:pdf、docxpng:txtjpg:txtjpeg:txtwebp:txt;是否必传:是 + Type: 'txt', + }, + // 结果输出地址,当NoNeedOutput为true时非必选;是否必传:否 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'ci/trans_test.txt', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + // 仅输出结果,不生成结果文件。取值:true/false。该参数原文档类型为图片时有效。默认值 false;是否必传:否 + // NoNeedOutput: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 人脸检测 +export const aIDetectFace = { + name: '人脸检测', + fn: function aIDetectFace() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/1.jpg', // 必须 + Query: { + // 数据万象处理能力,人脸特效固定为 DetectFace。;是否必传:是 + 'ci-process': 'DetectFace', + // 最多处理的人脸数目。默认值为1(仅检测图片中面积最大的那张人脸),最大���为120。此参数用于控制处理待检测图片中的人脸个数,值越小,处理速度越快。;是否必传:否 + 'max-face-num': 1, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 人脸美颜 +export const FaceBeautify = { + name: '人脸美颜', + fn: function aIFaceEffect() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/tom.jpeg', // 对象文件名,例如:folder/document.jpg,与detect-url二选一传递 + Query: { + // 万象处理能力,人脸特效固定为face-effect;是否必传:是 + 'ci-process': 'face-effect', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg。;是否必传:否 + // 'detect-url': '', + // 人脸特效类型,人脸美颜:face-beautify;人脸性别转换:face-gender-transformation;人脸年龄变化:face-age-transformation;人像分割:face-segmentation;是否必传:是 + type: 'face-beautify', + // type为face-beautify时生效,美白程度,取值范围[0,100]。0不美白,100代表最高程度。默认值30;是否必传:否 + whitening: 50, + // type为face-beautify时生效,磨皮程度,取值范围[0,100]。0不磨皮,100代表最高程度。默认值10;是否必传:否 + smoothing: 50, + // type为face-beautify时生效,瘦脸程度,取值范围[0,100]。0不瘦脸,100代表最高程度。默认值70;是否必传:否 + faceLifting: 50, + // type为face-beautify时生效,大眼程度,取值范围[0,100]。0不大眼,100代表最高程度。默认值70;是否必传:否 + eyeEnlarging: 50, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 人脸性别转换 +export const FaceGenderTransformation = { + name: '人脸性别转换', + fn: function FaceGenderTransformation() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/tom.jpeg', // 对象文件名,例如:folder/document.jpg,与detect-url二选一传递 + Query: { + // 万象处理能力,人脸特效固定为face-effect;是否必传:是 + 'ci-process': 'face-effect', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg。;是否必传:否 + // 'detect-url': '', + // 人脸特效类型,人脸美颜:face-beautify;人脸性别转换:face-gender-transformation;人脸年龄变化:face-age-transformation;人像分割:face-segmentation;是否必传:是 + type: 'face-gender-transformation', + // type为face-gender-transformation时生效,选择转换方向,0:男变女,1:女变男。无默认值,为必选项。限制:仅对图片中面积最大的人脸进行转换。;是否必传:否 + gender: 0, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 人脸年龄变化 +export const FaceAgeTransformation = { + name: '人脸年龄变化', + fn: function FaceAgeTransformation() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/tom.jpeg', // 对象文件名,例如:folder/document.jpg,与detect-url二选一传递 + Query: { + // 万象处理能力,人脸特效固定为face-effect;是否必传:是 + 'ci-process': 'face-effect', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg。;是否必传:否 + // 'detect-url': '', + // 人脸特效类型,人脸美颜:face-beautify;人脸性别转换:face-gender-transformation;人脸年龄变化:face-age-transformation;人像分割:face-segmentation;是否必传:是 + type: 'face-age-transformation', + // type 为 face-age-transformation 时生效,变化到的人脸年龄,范围为[10,80],无默认值。注意:仅对图片中面积最大的人脸进行转换 + age: 40, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 人像分割 +export const FaceSegmentation = { + name: '人像分割', + fn: function FaceSegmentation() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/tom.jpeg', // 对象文件名,例如:folder/document.jpg,与detect-url二选一传递 + Query: { + // 万象处理能力,人脸特效固定为face-effect;是否必传:是 + 'ci-process': 'face-effect', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg。;是否必传:否 + // 'detect-url': '', + // 人脸特效类型,人脸美颜:face-beautify;人脸性别转换:face-gender-transformation;人脸年龄变化:face-age-transformation;人像分割:face-segmentation;是否必传:是 + type: 'face-segmentation', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 人体识别 +export const aIBodyRecognition = { + name: '人体识别', + fn: function aIBodyRecognition() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,人体识别固定为AIBodyRecognition;是否必传:是 + 'ci-process': 'AIBodyRecognition', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 身份证识别 +export const IDCardOCR = { + name: '身份证识别', + fn: function IDCardOCR() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/card.jpeg', // 必须 + Query: { + // 数据万象处理能力,身份证识别固定为 IDCardOCR;是否必传:是 + 'ci-process': 'IDCardOCR', + // FRONT:身份证有照片的一面(人像面)BACK:身份证有国徽的一面(国徽面)该参数如果不填,将为您自动判断身份证正反面;是否必传:否 + CardSide: 'FRONT', + // 以下可选字段均为 bool 类型,默认 false:CropIdCard,身份证照片裁剪(去掉证件外多余的边缘、自动矫正拍摄角度)CropPortrait,人像照片裁剪(自动抠取身份证头像区域)CopyWarn,复印件告警BorderCheckWarn,边框和框内遮挡告警ReshootWarn,翻拍告警DetectPsWarn,PS 检测告警TempIdWarn,临时身份证告警InvalidDateWarn,身份证有效日期不合法告警Quality,图片质量分数(评价图片的模糊程度)MultiCardDetect,是否开启多卡证检测参数设置方式参考:Config = {"CropIdCard":true,"CropPortrait":true};是否必传:否 + // Config: {}, + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 实时文字翻译 +export const autoTranslationBlock = { + name: '实时文字翻译', + fn: function autoTranslationBlock() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Query: { + // 数据万象处理能力,文本块翻译固定为 AutoTranslationBlock。;是否必传:是 + 'ci-process': 'AutoTranslationBlock', + // 待翻译的文本;是否必传:是 + InputText: '我是张三', + // 输入语言,如 "zh";是否必传:是 + SourceLang: 'zh', + // 输出语言,如 "en";是否必传:是 + TargetLang: 'en', + // 文本所属业务领域,如: "ecommerce", //缺省值为 general;是否必传:否 + // TextDomain: '', + // 文本类型,如: "title", //缺省值为 sentence;是否必传:否 + // TextStyle: '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交一个视频人像抠图任务 +export const postSegmentVideoBody = { + name: '提交一个视频人像抠图任务', + fn: function postSegmentVideoBody() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:SegmentVideoBody;是否必传:是 + Tag: 'SegmentVideoBody', + // 待操作的对象信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'ci/tf.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 视频人像抠图配置;是否必传:否 + SegmentVideoBody: { + // 抠图模式 Mask:输出alpha通道结果Foreground:输出前景视频Combination:输出抠图后的前景与自定义背景合成后的视频默认值:Mask;是否必传:否 + Mode: 'Mask', + // 抠图类型HumanSeg:人像抠图GreenScreenSeg:绿幕抠图SolidColorSeg:纯色背景抠图默认值:HumanSeg;是否必传:否 + // SegmentType: '', + // mode为 Foreground 时参数生效,背景颜色为红色,取值范围 [0, 255], 默认值为 0;是否必传:否 + // BackgroundRed: '', + // mode为 Foreground 时参数生效,背景颜色为绿色,取值范围 [0, 255],默认值为 0;是否必传:否 + // BackgroundGreen: '', + // mode为 Foreground 时参数生效,背景颜色为蓝色,取值范围 [0, 255],默认值为 0;是否必传:否 + // BackgroundBlue: '', + // 传入背景文件。mode为 Combination 时,此参数必填,背景文件需与源文件在同存储桶下;是否必传:否 + // BackgroundLogoUrl: '', + // 调整抠图的边缘位置,取值范围为[0, 255],默认值为 0;是否必传:否 + // BinaryThreshold: '', + // 纯色背景抠图的背景色(红), 当 SegmentType 为 SolidColorSeg 生效,取值范围为 [0, 255],默认值为 0;是否必传:否 + // RemoveRed: '', + // 纯色背景抠图的背景色(绿), 当 SegmentType 为 SolidColorSeg 生效,取值范围为 [0, 255],默认值为 0;是否必传:否 + // RemoveGreen: '', + // 纯色背景抠图的背景色(蓝), 当 SegmentType 为 SolidColorSeg 生效,取���范围为 [0, 255],默认值为 0;是否必传:否 + // RemoveBlue: '', + }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'ci/ss.mp4', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 图片上色 +export const aIImageColoring = { + name: '图片上色', + fn: function aIImageColoring() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/1.jpg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,图片上色参固定为AIImageColoring。;是否必传:是 + 'ci-process': 'AIImageColoring', + // 待上色图片url,需要进行urlencode,与ObjectKey二选其一,如果同时存在,则默认以ObjectKey为准;是否必传:否 + // 'detect-url': '', + }, + RawBody: true, + DataType: 'blob', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图片质量评分 +export const assessQuality = { + name: '图片质量评分', + fn: function assessQuality() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 必须 + Query: { + // 数据万象处理能力,图像质量检测固定为 AssessQuality。;是否必传:是 + 'ci-process': 'AssessQuality', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 图像超分 +export const aISuperResolution = { + name: '图像超分', + fn: function aISuperResolution() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/test.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,只能裁剪参固定为AISuperResolution。;是否必传:否 + 'ci-process': 'AISuperResolution', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey,detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg。;是否必传:否 + // 'detect-url': '', + }, + RawBody: true, + DataType: 'blob' + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图像修复 +export const imageRepair = { + name: '图像修复', + fn: function imageRepair() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/card.jpeg', // 必须 + Query: { + // 固定值:ImageRepair;是否必传:是 + 'ci-process': 'ImageRepair', + // 遮罩(白色区域为需要去除的水印位置)图片地址,私有图片需携带签名,需要经过 URL 安全的 Base64 编码 + // 比如图片url为 http://test.com/test.jpg + MaskPic: COS.util.encodeBase64('http://test.com/test.jpg', true), + }, + RawBody: true, + DataType: 'blob', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图像增强 +export const aIEnhanceImage = { + name: '图像增强', + fn: function aIEnhanceImage() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/1.jpg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,只能裁剪参固定为 AIEnhanceImage。;是否必传:是 + 'ci-process': 'AIEnhanceImage', + // 去噪强度值,取值范围为 0 - 5 之间的整数,值为 0 时不进行去噪操作,默认值为3。;是否必传:否 + denoise: 0, + // 锐化强度值,取值范围为 0 - 5 之间的整数,值为 0 时不进行锐化操作,默认值为3。;是否必传:否 + sharpen: 0, + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了detect-url 时,后台会处理 detect-url链接,无需再填写 ObjectKey ,detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为 http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + // ;是否必传:否 + 'ignore-error': 0, + }, + RawBody: true, + DataType: 'blob', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图像智能裁剪 +export const aIImageCrop = { + name: '图像智能裁剪', + fn: function aIImageCrop() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/dog.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,智能裁剪固定为AIImageCrop;是否必传:是 + 'ci-process': 'AIImageCrop', + // 您可以通过填写 detect-url 处理任意公网可访问的图片链接。不填写 detect-url 时,后台会默认处理 ObjectKey ,填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 ObjectKey detect-url 示例:http://www.example.com/abc.jpg ,需要进行 UrlEncode,处理后为http%25253A%25252F%25252Fwww.example.com%25252Fabc.jpg;是否必传:否 + // 'detect-url': '', + // 需要裁剪区域的宽度,与height共同组成所需裁剪的图片宽高比例;输入数字请大于0、小于图片宽度的像素值;是否必传:是 + width: 0, + // 需要裁剪区域的高度,与width共同组成所需裁剪的图片宽高比例;输入数字请大于0、小于图片高度的像素值;width : height建议取值在[1, 2.5]之间,超过这个范围可能会影响效果;是否必传:是 + height: 0, + // 是否严格按照 width 和 height 的值进行输出。取值为0时,宽高比例(width : height)会简化为最简分数,即如果width输入10、height输入20,会简化为1:2;取值为1时,输出图片的宽度等于width,高度等于height;默认值为0;是否必传:否 + fixed: 0, + // 当此参数为1时,针对文件过大等导致处理失败的场景,会直接返回原图而不报错;是否必传:否 + 'ignore-error': 0, + }, + RawBody: true, + DataType: 'blob', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 游戏场景识别 +export const aIGameRec = { + name: '游戏场景识别', + fn: function aIGameRec() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/game.jpeg', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,游戏场景识别固定为 AIGameRec;是否必传:是 + 'ci-process': 'AIGameRec', + // 您可以通过填写 detect-url 对任意公网可访问的图片进行游戏场景识别。不填写 detect-url 时,后台会默认处理 objectkey ;填写了 detect-url 时,后台会处理 detect-url 链接,无需再填写 objectkey , detect-url 示例:http://www.example.com/abc.jpg。;是否必传:是 + // 'detect-url': '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// Logo 识别 +export const recognizeLogo = { + name: 'Logo 识别', + fn: function recognizeLogo() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: 'ci/logo.png', // 与detect-url二选一传递 + Query: { + // 数据万象处理能力,Logo识别固定为RecognizeLogo;是否必传:是 + 'ci-process': 'RecognizeLogo', + // 待检查图片url,需要进行urlencode;是否必传:是 + // 'detect-url': '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/asr.js b/demo/CIDemos/asr.js new file mode 100644 index 0000000..d8e9627 --- /dev/null +++ b/demo/CIDemos/asr.js @@ -0,0 +1,927 @@ +/** + * 智能语音demo集合 +*/ + +// 查询语音识别开通状态 +export const getAsrBucket = { + name: '查询语音识别开通状态', + fn: function getAsrBucket() { + const key = 'asrbucket'; // 固定值 + const host = `ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 地域信息,例如 ap-shanghai、ap-beijing,若查询多个地域以“,”分隔字符串,详情请参见 地域与域名;是否必传:是 + // regions: "", + // 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索;是否必传:是 + // bucketNames: "", + // 存储桶名称前缀,前缀搜索;是否必传:是 + // bucketName: "", + // 第几页;是否必传:是 + // pageNumber: 1, + // 每页个数,大于0且小于等于100的整数;是否必传:是 + // pageSize: 10, + }, + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 开通智能语音 +export const CreateAsrBucket = { + name: '开通智能语音', + fn: function CreateAsrBucket() { + const key = 'asrbucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 关闭智能语音 +export const DeleteAsrBucket = { + name: '关闭智能语音', + fn: function DeleteAsrBucket() { + const key = 'asrbucket'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'DELETE', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 查询语音识别队列 +export const getAsrQueue = { + name: '查询语音识别队列', + fn: function getAsrQueue() { + const key = 'asrqueue'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 队列 ID,以“,”符号分割字符串;是否必传:否 + // queueIds: '', + // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 + // state: '', + // 第几页,默认值1;是否必传:否 + // pageNumber: '', + // 每页个数,默认值10;是否必传:否 + // pageSize: '', + }, + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新语音识别队列 +export const updateAsrQueue = { + name: '更新语音识别队列', + fn: function updateAsrQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + const queueId = 'pcc77499e85c311edb9865254008618d9'; + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue/' + queueId; + const url = 'https://' + host; + const body = COS.util.json2xml({ + Request: { + Name: 'queue-doc-process-1', + QueueID: queueId, + State: 'Paused', + NotifyConfig: { + // Url: '', + // Type: 'Url', + // Event: '', + State: 'Off', + }, + }, + }); + cos.request({ + Method: 'PUT', + Key: 'asrqueue/' + queueId, + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交音频降噪任务 +export const postNoiseReduction = { + name: '提交音频降噪任务', + fn: function postNoiseReduction() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + Tag: 'NoiseReduction', + Input: { + Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称 + }, + Operation: { + Output: { + Bucket: config.Bucket, // 输出的存储桶 + Region: config.Region, // 输出的存储桶的地域 + Object: 'ci/out.mp3', // 输出的文件Key + }, + }, + // QueueId: '', // 任务所在的队列 ID,非必须 + // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 + // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 + // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 + // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 + }, + }); + cos.request({ + Method: 'POST', + Key: 'jobs', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交人声分离任务 +export const postVoiceSeparate = { + name: '提交人声分离任务', + fn: function postVoiceSeparate() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + Tag: 'VoiceSeparate', + Input: { + Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称 + }, + Operation: { + // VoiceSeparate: {}, // 指定转码模板参数,非必须 + TemplateId: 't17844a8302372436187b425271a0ae33a', // 指定的模板 ID,必须 + // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 + Output: { + Bucket: config.Bucket, // 输出的存储桶 + Region: config.Region, // 输出的存储桶的地域 + Object: 'ci/out/background.mp3', // 输出的文件Key,背景音结果文件名,不能与 AuObject 同时为空 + AuObject: 'ci/out/audio.mp3', + }, + }, + // QueueId: '', // 任务所在的队列 ID,非必须 + // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 + // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 + // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 + // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 + }, + }); + cos.request({ + Method: 'POST', + Key: 'jobs', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 创建人声分离模板 +export const postVoiceSeparateTemplete = { + name: '创建人声分离模板', + fn: function postVoiceSeparateTemplete() { + const key = 'template'; // 固定 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型: VoiceSeparate;是否必传:是 + Tag: 'VoiceSeparate', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_voiceSeparate', + // 输出音频IsAudio:输出人声IsBackground:输出背景声AudioAndBackground:输出人声和背景声MusicMode:输出人声、背景声、Bass声、鼓声;是否必传:是 + AudioMode: 'IsAudio', + // 音频配置;是否必传:是 + AudioConfig: { + // 编解码格式,取值 aac、mp3、flac、amr。当 Request.AudioMode 为 MusicMode 时,仅支持 mp3、wav、acc;是否必传:否 + Codec: 'mp3', + // 采样率单位:Hz可选 8000、11025、22050、32000、44100、48000、96000当 Codec 设置为 aac/flac 时,不支持 8000当 Codec 设置为 mp3 时,不支持 8000 和 96000当 Codec 设置为 amr 时,只支持 8000当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Samplerate: '', + // 音频码率单位:Kbps值范围:[8,1000]当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Bitrate: '', + // 声道数当 Codec 设置为 aac/flac,支持1、2、4、5、6、8当 Codec 设置为 mp3,支持1、2 当 Codec 设置为 amr,只支持1当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Channels: '', + }, + } + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新人声分离模板 +export const updateVoiceSeparateTemplete = { + name: '更新人声分离模板', + fn: function updateVoiceSeparateTemplete() { + const templateId = 't18e592c70a4724b46bdcde4b711c6c0d5'; // 要更新的模版id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型: VoiceSeparate;是否必传:是 + Tag: 'VoiceSeparate', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_voiceSeparate2', + // 输出音频IsAudio:输出人声IsBackground:输出背景声AudioAndBackground:输出人声和背景声MusicMode:输出人声、背景声、Bass声、鼓声;是否必传:是 + AudioMode: 'IsAudio', + // 音频配置;是否必传:是 + AudioConfig: { + // 编解码格式,取值 aac、mp3、flac、amr。当 Request.AudioMode 为 MusicMode 时,仅支持 mp3、wav、acc;是否必传:否 + Codec: 'mp3', + // 采样率单位:Hz可选 8000、11025、22050、32000、44100、48000、96000当 Codec 设置为 aac/flac 时,不支持 8000当 Codec 设置为 mp3 时,不支持 8000 和 96000当 Codec 设置为 amr 时,只支持 8000当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Samplerate: '', + // 音频码率单位:Kbps值范围:[8,1000]当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Bitrate: '', + // 声道数当 Codec 设置为 aac/flac,支持1、2、4、5、6、8当 Codec 设置为 mp3,支持1、2 当 Codec 设置为 amr,只支持1当 Request.AudioMode 为 MusicMode 时,该参数无效;是否必传:否 + // Channels: '', + }, + } + }); + + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交一个语音合成任务 +export const postVoiceSynthesis = { + name: '提交一个语音合成任务', + fn: function postVoiceSynthesis() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Tts;是否必传:是 + Tag: 'Tts', + // 操作规则;是否必传:是 + Operation: { + // 语音合成模板 ID; 与TtsTpl二选一传递 + TemplateId: 't1958211407ca54ebc8c78060a7f2ba564', + // 语音合成参数; 与TemplateId二选一传递 + // TtsTpl: { + // // 同创建语音合成模板接口中的 Request.Mode;是否必传:否 + // Mode: '', + // // 同创建语音合成模板接口中的 Request.Codec;是否必传:否 + // Codec: '', + // // 同创建语音合成模板接口中的 Request.VoiceType;是否必传:否 + // VoiceType: '', + // // 同创建语音合成模板接口中的 Request.Volume;是否必传:否 + // Volume: '', + // // 同创建语音合成模板接口中的 Request.Speed;是否必传:否 + // Speed: '', + // // 同创建语音合成模板接口中的 Request.Emotion;是否必传:否 + // Emotion: '', + // }, + // 语音合成任务参数;是否必传:是 + TtsConfig: { + // 输入类型,Url/Text;是否必传:是 + InputType: 'Text', + // 当 InputType 为 Url 时, 必须是合法的 COS 地址,文件必须是utf-8编码,且大小不超过 10M。如果合成方式为同步处理,则文件内容不超过 300 个 utf-8 字符;如果合成方式为异步处理,则文件内容不超过 10000 个 utf-8 字符。当 InputType 为 Text 时, 输入必须是 utf-8 字符, 且不超过 300 个字符。;是否必传:是 + Input: '床前明月光,疑是地上霜', + }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 结果文件名;是否必传:是 + Object: 'ci/tts.mp3', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 创建语音合成模板 +export const postVoiceSynthesisTemplete = { + name: '创建语音合成模板', + fn: function postVoiceSynthesisTemplete() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:Tts;是否必传:是 + Tag: 'Tts', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_tts', + // 处理模式Asyc(异步合成)Sync(同步合成);是否必传:否 + // Mode: 'Asyc', + // 音频格式,支持 wav、mp3、pcm ;是否必传:否 + // Codec: 'pcm', + // 音色,取值和限制介绍请见下表;是否必传:否 + // VoiceType: 'ruxue', + // 音量,取值范围 [-10,10];是否必传:否 + // Volume: '0', + // 语速,取值范围 [50,200];是否必传:否 + // Speed: '100', + // 情绪,不同音色支持的情绪不同,详见下表;是否必传:否 + // Emotion: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新语音合成模板 +export const updateVoiceSynthesisTemplete = { + name: '更新语音合成模板', + fn: function updateVoiceSynthesisTemplete() { + const templateId = 'xxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:Tts;是否必传:是 + Tag: 'Tts', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_tts2', + // 处理模式Asyc(异步合成)Sync(同步合成);是否必传:否 + Mode: 'Asyc', + // 音频格式,支持 wav、mp3、pcm ;是否必传:否 + Codec: 'pcm', + // 音色,取值和限制介绍请见下表;是否必传:否 + VoiceType: 'ruxue', + // 音量,取值范围 [-10,10];是否必传:否 + Volume: '0', + // 语速,取值范围 [50,200];是否必传:否 + Speed: '100', + // 情绪,不同音色支持的情绪不同,详见下表;是否必传:否 + Emotion: '无', + }, + }); + + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交语音识别任务 +export const postSpeechRecognition = { + name: '提交语音识别任务', + fn: function postSpeechRecognition() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + Tag: 'SpeechRecognition', + Input: { + Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称,与Url参数二选一 + // Url: 'http://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/music.mp3', // 病毒文件的链接地址,与Object参数二选一 + }, + Operation: { + SpeechRecognition: { + EngineModelType: '16k_zh_video', // 引擎模型类型 + ChannelNum: 1, // 语音声道数 + ResTextFormat: 0, // 识别结果返回形式 + FilterDirty: 1, // 是否过滤脏词(目前支持中文普通话引擎) + FilterModal: 1, // 是否过语气词(目前支持中文普通话引擎) + ConvertNumMode: 0, // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎) + }, + Output: { + Bucket: config.Bucket, // 输出的存储桶 + Region: config.Region, // 输出的存储桶的地域 + Object: 'ci/out/SpeechRecognition.mp3', // 输出的文件Key + }, + }, + // QueueId: '', // 任务所在的队列 ID,非必须 + // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 + // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 + // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 + // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 + }, + }); + cos.request({ + Method: 'POST', + Key: key, + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 创建语音识别模板 +export const postSpeechRecognitionTemplete = { + name: '创建语音识别模板', + fn: function postSpeechRecognitionTemplete() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:SpeechRecognition;是否必传:是 + Tag: 'SpeechRecognition', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_speechRecognition', + // 语音识别参数;是否必传:是 + SpeechRecognition: { + // 开启极速ASR,取值 true/false;是否必传:否 + FlashAsr: 'false', + // 引擎模型类型,分为电话场景和非电话场景。电话场景:8k_zh:电话 8k 中文普通话通用(可用于双声道音频)8k_zh_s:电话 8k 中文普通话话者分离(仅适用于单声道音频)8k_en:电话 8k 英语 非电话场景: 6k_zh:16k 中文普通话通用16k_zh_video:16k 音视频领域16k_en:16k 英语16k_ca:16k 粤语16k_ja:16k 日语16k_zh_edu:中文教育16k_en_edu:英文教育16k_zh_medical:医疗16k_th:泰语16k_zh_dialect:多方言,支持23种方言极速 ASR 支持8k_zh、16k_zh、16k_en、16k_zh_video、16k_zh_dialect、16k_ms(马来语)、16k_zh-PY(中英粤);是否必传:是 + EngineModelType: '16k_zh', + // 语音声道数:1 表示单声道。EngineModelType为非电话场景仅支持单声道2 表示双声道(仅支持 8k_zh 引擎模型 双声道应分别对应通话双方)仅���持非极速ASR,为非极速ASR时,该参数必填;是否必传:否 + ChannelNum: '1', + // 识别结果返回形式:0:识别结果文本(含分段时间戳)1:词级别粒度的详细识别结果,不含标点,含语速值(词时间戳列表,一般用于生成字幕场景)2:词级别粒度的详细识别结果(包含标点、语速值)3:标点符号分段,包含每段时间戳,特别适用于字幕场景(包含词级时间、标点、语速值)仅支持非极速ASR;是否必传:否 + // ResTextFormat: '0', + // 是否过滤脏词(目前支持中文普通话引擎)0:不过滤脏词1:过滤脏词2:将脏词替换为 *;是否必传:否 + // FilterDirty: '0', + // 是否过滤语气词(目前支持中文普通话引擎):0 表示不过滤语气词1 表示部分过滤2 表示严格过滤 ;是否必传:否 + // FilterModal: '0', + // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎)0:不转换,直接输出中文数字1:根据场景智能转换为阿拉伯数字3 :打开数学相关数字转换仅支持非极速ASR;是否必传:否 + // ConvertNumMode: '0', + // 是否开启说话人分离0:不开启1:开启(仅支持8k_zh,16k_zh,16k_zh_video,单声道音频)8k电话场景建议使用双声道来区分通话双方,设置ChannelNum=2即可,不用开启说话人分离。;是否必传:否 + // SpeakerDiarization: '0', + // 说话人分离人数(需配合开启说话人分离使用),取值范围:[0, 10]0 代表自动分离(目前仅支持≤6个人)1-10代表指定说话人数分离仅支持非极速ASR;是否必传:否 + // SpeakerNumber: '', + // 是否过滤标点符号(目前支持中文普通话引擎)0:不过滤。1:过滤句末标点2:过滤所有标点;是否必传:否 + // FilterPunc: '', + // 输出文件类型,可选txt、srt极速ASR仅支持txt非极速Asr且ResTextFormat为3时仅支持txt;是否必传:否 + // OutputFileType: '', + // 极速ASR音频格式,支持 wav、pcm、ogg-opus、speex、silk、mp3、m4a、aac极速ASR时,该参数必填;是否必传:否 + // Format: '', + // 是否识别首个声道0:识别所有声道1:识别首个声道仅支持极速ASR;是否必传:否 + // FirstChannelOnly: '', + // 是否显示词级别时间戳0:不显示1:显示,不包含标点时间戳2:显示,包含标点时间戳仅支持极速ASR;是否必传:否 + // WordInfo: '', + // 单标点最多字数,取值范围:[6,40]默认值为 0 表示不开启该功能该参数可用于字幕生成场景,控制单行字幕最大字数当FlashAsr为false时,仅ResTextFormat为3时参数有效;是否必传:否 + // SentenceMaxLength: '', + }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新语音识别模板 +export const updateSpeechRecognitionTemplete = { + name: '更新语音识别模板', + fn: function updateSpeechRecognitionTemplete() { + const templateId = 'xxxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:SpeechRecognition;是否必传:是 + Tag: 'SpeechRecognition', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_speechRecognition', + // 语音识别参数;是否必传:是 + SpeechRecognition: { + // 开启极速ASR,取值 true/false;是否必传:否 + FlashAsr: 'true', + // 引擎模型类型,分为电话场景和非电话场景。电话场景:8k_zh:电话 8k 中文普通话通用(可用于双声道音频)8k_zh_s:电话 8k 中文普通话话者分离(仅适用于单声道音频)8k_en:电话 8k 英语 非电话场景: 6k_zh:16k 中文普通话通用16k_zh_video:16k 音视频领域16k_en:16k 英语16k_ca:16k 粤语16k_ja:16k 日语16k_zh_edu:中文教育16k_en_edu:英文教育16k_zh_medical:医疗16k_th:泰语16k_zh_dialect:多方言,支持23种方言极速 ASR 支持8k_zh、16k_zh、16k_en、16k_zh_video、16k_zh_dialect、16k_ms(马来语)、16k_zh-PY(中英粤);是否必传:是 + EngineModelType: '16k_zh', + // 语音声道数:1 表示单声道。EngineModelType为非电话场景仅支持单声道2 表示双声道(仅支持 8k_zh 引擎模型 双声道应分别对应通话双方)仅���持非极速ASR,为非极速ASR时,该参数必填;是否必传:否 + ChannelNum: '2', + // 识别结果返回形式:0:识别结果文本(含分段时间戳)1:词级别粒度的详细识别结果,不含标点,含语速值(词时间戳列表,一般用于生成字幕场景)2:词级别粒度的详细识别结果(包含标点、语速值)3:标点符号分段,包含每段时间戳,特别适用于字幕场景(包含词级时间、标点、语速值)仅支持非极速ASR;是否必传:否 + // ResTextFormat: '', + // 是否过滤脏词(目前支持中文普通话引擎)0:不过滤脏词1:过滤脏词2:将脏词替换为 *;是否必传:否 + // FilterDirty: '', + // 是否过滤语气词(目前支持中文普通话引擎):0 表示不过滤语气词1 表示部分过滤2 表示严格过滤 ;是否必传:否 + // FilterModal: '', + // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎)0:不转换,直接输出中文数字1:根据场景智能转换为阿拉伯数字3 :打开数学相关数字转换仅支持非极速ASR;是否必传:否 + // ConvertNumMode: '', + // 是否开启说话人分离0:不开启1:开启(仅支持8k_zh,16k_zh,16k_zh_video,单声道音频)8k电话场景建议使用双声道来区分通话双方,设置ChannelNum=2即可,不用开启说话人分离。;是否必传:否 + // SpeakerDiarization: '', + // 说话人分离人数(需配合开启说话人分离使用),取值范围:[0, 10]0 代表自动分离(目前仅支持≤6个人)1-10代表指定说话人数分离仅支持非极速ASR;是否必传:否 + // SpeakerNumber: '', + // 是否过滤标点符号(目前支持中文普通话引擎)0:不过滤。1:过滤句末标点2:过滤所有标点;是否必传:否 + // FilterPunc: '', + // 输出文件类型,可选txt、srt极速ASR仅支持txt非极速Asr且ResTextFormat为3时仅支持txt;是否必传:否 + // OutputFileType: '', + // 极速ASR音频格式,支持 wav、pcm、ogg-opus、speex、silk、mp3、m4a、aac极速ASR时,该参数必填;是否必传:否 + // Format: '', + // 是否识别首个声道0:识别所有声道1:识别首个声道仅支持极速ASR;是否必传:否 + // FirstChannelOnly: '', + // 是否显示词级别时间戳0:不显示1:显示,不包含标点时间戳2:显示,包含标点时间戳仅支持极速ASR;是否必传:否 + // WordInfo: '', + // 单标点最多字数,取值范围:[6,40]默认值为 0 表示不开启该功能该参数可用于字幕生成场景,控制单行字幕最大字数当FlashAsr为false时,仅ResTextFormat为3时参数有效;是否必传:否 + // SentenceMaxLength: '', + }, + }, + }); + + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 创建音频降噪模版 +export const postNoiseReductionTemplete = { + name: '创建音频降噪模版', + fn: function postNoiseReductionTemplete() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 固定值:NoiseReduction;是否必传:是 + Tag: 'NoiseReduction', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64。;是否必传:是 + Name: 'my_noiseReduction', + // 降噪参数;是否必传:是 + NoiseReduction: { + // 封装格式,支持 mp3、m4a、wav;是否必传:否 + Format: 'mp3', + // 采样率单位:Hz可选 8000、12000、16000、24000、32000、44100、48000;是否必传:否 + // Samplerate: '', + }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新音频降噪模板 +export const updateNoiseReductionTemplete = { + name: '更新音频降噪模板', + fn: function updateNoiseReductionTemplete() { + const templateId = 'xxxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 固定值:NoiseReduction;是否必传:是 + Tag: 'NoiseReduction', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64。;是否必传:是 + Name: 'my_noiseReduction2', + // 降噪参数;是否必传:是 + NoiseReduction: { + // 封装格式,支持 mp3、m4a、wav;是否必传:否 + Format: 'mp3', + // 采样率单位:Hz可选 8000、12000、16000、24000、32000、44100、48000;是否必传:否 + // Samplerate: '', + }, + }, + }); + + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交听歌识曲任务 +export const postSoundHound = { + name: '提交听歌识曲任务', + fn: function postSoundHound() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:SoundHound;是否必传:是 + Tag: 'SoundHound', + // 待操作的对象信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'ci/music.mp3', + }, + // 操作规则;是否必传:是 + // Operation: { + // 透���用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + // }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 音乐评分 +export const vocalScore = { + name: '音乐评分', + fn: function vocalScore() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:VocalScore;是否必传:是 + Tag: 'VocalScore', + // 待操作的对象信息;是否必传:是 + Input: { + // 文件路径;是否必传:否 + Object: 'ci/music.mp3', + }, + // 操作规则;是否必传:是 + Operation: { + // 音乐评分参数配置;是否必传:是 + VocalScore: { + // 比对基准文件路径;是否必传:否 + StandardObject: 'ci/base.mp3', + }, + // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 + // UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + // JobLevel: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + // CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + // CallBackType: '', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + // CallBack: '', + // 任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig;是否必传:否 + // CallBackMqConfig: { + // 消息队列所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:是 + // MqRegion: '', + // 消息队列使用模式,默认 Queue :主题订阅:Topic队列服务: Queue;是否必传:是 + // MqMode: '', + // TDMQ 主题名称;是否必传:是 + // MqName: '', + // }, + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/audit.js b/demo/CIDemos/audit.js new file mode 100644 index 0000000..04d816a --- /dev/null +++ b/demo/CIDemos/audit.js @@ -0,0 +1,537 @@ +/** + * 内容审核demo集合 +*/ + +// 图片同步审核 +export const getImageAuditing = { + name: '图片同步审核', + fn: function getImageAuditing() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '1.png', // 与detect-url二选一传递 + Query: { + 'ci-process': 'sensitive-content-recognition', // 固定值,必须 + 'biz-type': '', // 审核类型,非必须 + 'detect-url': '', // 审核任意公网可访问的图片链接,非必须 + interval: 5, // 审核 GIF 动图时,每隔interval帧截取一帧,非必须 + 'max-frames': 5, // 审核 GIF 动图时,最大截帧数,非必须 + 'large-image-detect': '0', // 是否需要压缩图片后再审核,非必须 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图片批量审核 +export const postImagesAuditing = { + name: '图片批量审核', + fn: function postImagesAuditing() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/image/auditing'; + const body = COS.util.json2xml({ + Request: { + Input: [ + { + Object: '1.png', + }, + { + Object: '6.png', + }, + ], + Conf: { + BizType: '', + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: 'image/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询图片审核任务结果 +export const getImageAuditingResult = { + name: '查询图片审核任务结果', + fn: function getImageAuditingResult() { + const jobId = 'si8263213daf3711eca0d1525400d88xxx'; // jobId可以通过图片批量审核返回 + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/image/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/image/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 反馈处理结果 +export const reportBadCase = { + name: '反馈处理结果', + fn: function reportBadCase() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const key = 'report/badcase'; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + ContentType: 2, + Url: 'https://example.com/desample_photo.jpg', + Label: 'Porn', + SuggestedLabel: 'Normal', + // JobId: '', + // ModerationTime: '', + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: key, + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交视频审核任务 +export const postVideoAuditing = { + name: '提交视频审核任务', + fn: function postVideoAuditing() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/video/auditing'; + const body = COS.util.json2xml({ + Request: { + Input: { + Object: '1.mp4', + }, + Conf: { + BizType: '', + Snapshot: { + Count: 1000, // 视频截帧数量 + }, + DetectContent: 1, // 是否审核视频声音,0-只审核视频不审核声音;1-审核视频+声音 + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: '/video/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询视频审核任务结果 +export const getVideoAuditingResult = { + name: '查询视频审核任务结果', + fn: function getVideoAuditingResult() { + const jobId = 'av14d9ca15af3a11eca0d6525400d88xxx'; // jobId可以通过提交视频审核任务返回 + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/video/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/video/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交音频审核任务 +export const postAudioAuditing = { + name: '提交音频审核任务', + fn: function postAudioAuditing() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/audio/auditing'; + const body = COS.util.json2xml({ + Request: { + Input: { + Object: '1.mp3', + }, + Conf: { + BizType: '', + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: '/audio/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询音频审核任务结果 +export const getAudioAuditingResult = { + name: '查询音频审核任务结果', + fn: function getAudioAuditingResult() { + const jobId = 'sa0c28d41daff411ecb23352540078cxxx'; // jobId可以通过提交音频审核任务返回 + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/audio/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/audio/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交文本审核任务 +export const postTextAuditing = { + name: '提交文本审核任务', + fn: function postTextAuditing() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/text/auditing'; + const body = COS.util.json2xml({ + Request: { + Input: { + // Content: COS.util.encodeBase64('乳沟'), // 经过base64编码过的文本”乳沟“,查询结果同步返回 + Object: '中文.txt', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 + }, + Conf: { + BizType: '', + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: '/text/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询文本审核任务结果 +export const getTextAuditingResult = { + name: '查询文本审核任务结果', + fn: function getTextAuditingResult() { + const jobId = 'st8d88c664aff511ecb23352540078cxxx'; // jobId可以通过提交文本审核任务返回(Input传入Object) + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/text/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/text/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交文档审核任务 +export const postDocumentAuditing = { + name: '提交文档审核任务', + fn: function postDocumentAuditing() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/document/auditing'; + const body = COS.util.json2xml({ + Request: { + Input: { + Object: 'test.xlsx', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 + }, + Conf: { + BizType: '', + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: '/document/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询文档审核任务结果 +export const getDocumentAuditingResult = { + name: '查询文档审核任务结果', + fn: function getDocumentAuditingResult() { + const jobId = 'sd7815c21caff611eca12f525400d88xxx'; // jobId可以通过提交文档审核任务返回 + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/document/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/document/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交网页审核任务 +export const postWebpageAuditing = { + name: '提交网页审核任务', + fn: function postWebpageAuditing() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/webpage/auditing'; + const body = COS.util.json2xml({ + Request: { + Input: { + Url: 'https://cloud.tencent.com/', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 + }, + Conf: { + BizType: '', + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: '/webpage/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询网页审核任务结果 +export const getWebpageAuditingResult = { + name: '查询网页审核任务结果', + fn: function getWebpageAuditingResult() { + const jobId = 'shce868019aff611ecb1155254009a4xxx'; // jobId可以通过提交网页审核任务返回 + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/webpage/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/webpage/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交直播审核任务 +export const postLiveAuditing = { + name: '提交直播审核任务', + fn: function postLiveAuditing() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/video/auditing'; + const body = COS.util.json2xml({ + Request: { + Type: 'live_video', + Input: { + Url: 'rtmp://example.com/live/123', // 需要审核的直播流播放地址 + // DataId: '', + // UserInfo: {}, + }, + Conf: { + BizType: '766d07a7af937c26216c51db29793ea6', + // Callback: 'https://callback.com', // 回调地址,非必须 + // CallbackType: 1, // 回调片段类型,非必须 + }, + }, + }); + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: '/video/auditing', + ContentType: 'application/xml', + Body: body, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询直播审核任务结果 +export const getLiveAuditingResult = { + name: '查询直播审核任务结果', + fn: function getLiveAuditingResult() { + const jobId = 'av0ca69557bd6111ed904c5254009411xx'; // jobId可以通过提交直播审核任务返回 + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/video/auditing/' + jobId; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: '/video/auditing/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 取消直播审核 +export const cancelLiveAuditing = { + name: '取消直播审核', + fn: function cancelLiveAuditing() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; + const jobId = 'av8088af71359c11eeb17c525400941xxx'; + const key = `video/cancel_auditing/${jobId}`; + const url = `https://${host}/${key}`; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'POST', + Url: url, + Key: key, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/common.js b/demo/CIDemos/common.js new file mode 100644 index 0000000..0bc2c7e --- /dev/null +++ b/demo/CIDemos/common.js @@ -0,0 +1,177 @@ +/** + * 其他demo集合 +*/ + +// 开通数据万象 +export const createCIBucket = { + name: '开通数据万象', + fn: function createCIBucket() { + const host = `${config.Bucket}.pic.${config.Region}.myqcloud.com`; + const url = `https://${host}`; + cos.request({ + Method: 'PUT', // 固定值,必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + + +// 关闭数据万象 +export const deleteCIBucket = { + name: '关闭数据万象', + fn: function deleteCIBucket() { + const host = `${config.Bucket}.pic.${config.Region}.myqcloud.com`; + const url = `https://${host}`; + cos.request({ + Method: 'PUT', // 固定值,必须 + Url: url, // 请求的url,必须 + Action: 'unbind'// 固定值 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 查询查询数据处理服务 +export const queryCIBucket = { + name: '查询查询数据处理服务', + fn: function queryCIBucket() { + const host = `${config.Bucket}.pic.${config.Region}.myqcloud.com`; + const url = `https://${host}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交病毒检测任务 +export const postVirusDetect = { + name: '提交病毒检测任务', + fn: function postVirusDetect() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/virus/detect'; + const url = 'https://' + host; + const body = COS.util.json2xml({ + Request: { + Input: { + Object: 'test/1.png', // 文件名,取值为文件在当前存储桶中的完整名称,与Url参数二选一 + // Url: 'http://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/virus.doc', // 病毒文件的链接地址,与Object参数二选一 + }, + Conf: { + DetectType: 'Virus', // 检测的病毒类型,当前固定为:Virus + // CallBack: 'http://callback.demo.com', // 任务回调的地址 + }, + }, + }); + cos.request({ + Method: 'POST', + Key: 'virus/detect', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询病毒检测任务结果 +export const getVirusDetectResult = { + name: '查询病毒检测任务结果', + fn: function getVirusDetectResult() { + const jobId = 'ssdb2dab23bcdb11ed9efb5254009411xx'; // 提交病毒检测任务后会返回当前任务的jobId + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/virus/detect/' + jobId; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'virus/detect/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询防盗链 +export const describeRefer = { + name: '查询防盗链', + fn: function describeRefer() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?hotlink'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 设置防盗链 +export const setRefer = { + name: '设置防盗链', + fn: function setRefer() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?hotlink'; + const url = 'https://' + host; + const body = COS.util.json2xml({ + Hotlink: { + Url: 'https://www.example.com', // 必须,域名地址 + Type: 'white', // 必须,防盗链类型,white 为白名单,black 为黑名单,off 为关闭。 + }, + }); + cos.request({ + Method: 'PUT', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/docPreview.js b/demo/CIDemos/docPreview.js new file mode 100644 index 0000000..54c016a --- /dev/null +++ b/demo/CIDemos/docPreview.js @@ -0,0 +1,281 @@ +/** + * 文档预览demo集合 +*/ + +// 查询已经开通文档预览的存储桶 +export const describeDocProcessBuckets = { + name: '查询已经开通文档预览的存储桶', + fn: function describeDocProcessBuckets() { + const host = 'ci.' + config.Region + '.myqcloud.com/docbucket'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'docbucket', + Url: url, + Query: { + // regions: '', // 非必须,地域信息,以“,”分隔字符串,支持 All、ap-shanghai、ap-beijing + // bucketNames: '', // 非必须,存储桶名称,以“,”分隔,支持多个存储桶,精确搜索 + // bucketName: '', // 非必须,存储桶名称前缀,前缀搜索 + // pageNumber: 1, // 非必须,第几页 + // pageSize: 10, // 非必须,每页个数 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 文档转码同步请求 +export const getDocPreview = { + name: '文档转码同步请求', + fn: function getDocPreview() { + cos.getObjectUrl({ + Bucket: config.Bucket, // Bucket 格式:test-1250000000 + Region: config.Region, + Key: '1/文档.docx', + Query: { + 'ci-process': 'doc-preview', // 必须,数据万象处理能力,文档预览固定为 doc-preview + srcType: 'docx', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 + // page: '', // 非必须,需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图 + // dstType: '', // 非必须,转换输出目标文件类型 + }, + DataType: 'blob', + }, function (err, data) { + if (err) { + console.log(err); + } else { + // Body为转码后的内容 可展示在img里 比如 + const body = data.Body; + // const url = URL.createObjectURL(body); + // const img = document.getElementById('image'); + // img.src = url; + // 获取总页数(需要在跨域配置的Expose-Headers配置需要暴露出的头部 比如下方的X-Total-Page) + // 跨域配置可参考文档 https://cloud.tencent.com/document/product/436/13318 + const totalPage = data.headers['X-Total-Page']; + } + }); + } +}; + +// 查询文档转码队列 +export const describeDocProcessQueues = { + name: '查询文档转码队列', + fn: function describeDocProcessQueues() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/docqueue'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'docqueue', + Url: url, + Query: { + // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 + // state: '', // 非必须,1=Active,2=Paused + // pageNumber: 1, // 非必须,第几页 + // pageSize: 2, // 非必须,每页个数 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 更新文档预览队列 +export const updateDocProcessQueue = { + name: '更新文档预览队列', + fn: function updateDocProcessQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + const queueId = 'pa2e2c3d3fae042de909cafc16f1d801b'; // 替换成自己的队列id + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/docqueue/' + queueId; + const url = 'https://' + host; + const body = COS.util.json2xml({ + Request: { + Name: 'queue-doc-process-1', // 替换成自己的队列name + QueueID: queueId, + State: 'Active', + NotifyConfig: { + State: 'Off', + }, + }, + }); + cos.request({ + Method: 'PUT', + Key: 'docqueue/' + queueId, + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交文档转码任务 +export const createDocProcessJobs = { + name: '提交文档转码任务', + fn: function createDocProcessJobs() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs'; + const url = 'https://' + host; + const body = COS.util.json2xml({ + Request: { + Tag: 'DocProcess', + Input: { + Object: '1/文档.docx', // 存在cos里的路径 + }, + Operation: { + DocProcess: { + TgtType: 'jpg', + }, + Output: { + Bucket: config.Bucket, + Region: config.Region, + Object: '1/文档转码_${Number}.jpg', // 转码后存到cos的路径 + }, + }, + }, + }); + cos.request({ + Method: 'POST', + Key: 'doc_jobs', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + + +// 查询指定的文档预览任务 +export const describeDocProcessJob = { + name: '查询指定的文档预览任务', + fn: function describeDocProcessJob() { + const jobId = 'd87fbabd07b8611ed974b3f4b40648xxx'; // 替换成自己的jogId + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs/' + jobId; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'doc_jobs/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 拉取符合条件的文档预览任务 +export const describeDocProcessJobs = { + name: '拉取符合条件的文档预览任务', + fn: function describeDocProcessJobs() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'doc_jobs', + Url: url, + Query: { + tag: 'DocProcess', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 文档转 HTML +export const getDocHtmlUrl = { + name: '文档转 HTML', + fn: function getDocHtmlUrl() { + cos.getObjectUrl({ + Bucket: config.Bucket, // Bucket 格式:test-1250000000 + Region: config.Region, + Key: '1/文档.docx', + Query: { + 'ci-process': 'doc-preview', // 必须,数据万象处理能力,文档预览固定为 doc-preview + // srcType: '', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 + // page: '', // 非必须,需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图 + dstType: 'html', // 非必须,转换输出目标文件类型 + }, + }, function (err, data) { + if (err) { + console.log(err); + } else { + // 使用浏览器打开url即可预览 + const url = data.Url; + console.log(url); + } + }); + } +}; + +// 获取在线文档预览地址 +export const getDocHtmlPreviewUrl = { + name: '获取在线文档预览地址', + fn: function getDocHtmlPreviewUrl() { + const key = 'test.pdf'; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: key, + RawBody: true, + Query: { + 'ci-process': 'doc-preview', // 必须,预览固定参数,值为 doc-preview + dstType: 'html', // 必须,预览类型,如需预览生成类型为 html 则填入 html + weboffice_url: 1, // 非必须,是否获取预览链接。填入值为1会返回预览链接和Token信息;填入值为2只返回Token信息;不传会直接预览 + }, + }, function (err, data) { + // 从响应数据中解析出在线文档预览地址 + let body = {}; + if (data && data.Body) { + body = JSON.parse(data.Body) || {}; + } + if (body && body.PreviewUrl) { + data.PreviewUrl = body.PreviewUrl; + } + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/fileProcess.js b/demo/CIDemos/fileProcess.js new file mode 100644 index 0000000..c6384b8 --- /dev/null +++ b/demo/CIDemos/fileProcess.js @@ -0,0 +1,383 @@ +/** + * 文件处理demo集合 +*/ + +// 开通文件处理服务 +export const createFileProcessBucket = { + name: '开通文件处理服务', + fn: function createFileProcessBucket() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_bucket'; + const url = 'https://' + host; + cos.request({ + Method: 'POST', + Key: 'file_bucket', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询文件处理服务 +export const DescribeFileProcessBuckets = { + name: '查询文件处理服务', + fn: function DescribeFileProcessBuckets() { + const key = 'file_bucket'; + const host = 'ci.' + config.Region + '.myqcloud.com/' + key; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: key, + Url: url, + Query: { + // regions: '', // 地域信息,例如 ap-shanghai、ap-beijing,若查询多个地域以“,”分隔字符串,详情请参见 地域与域名 + // bucketNames: '', // 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索 + // bucketName: '', // 存储桶名称前缀,前缀搜索 + // pageNumber: '', // 第几页 + // pageSize: '', // 每页个数,大于0且小于等于100的整数 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 关闭文件处理服务 +export const DeleteFileProcessBucket = { + name: '关闭文件处理服务', + fn: function DeleteFileProcessBucket() { + const key = 'file_bucket'; + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/' + key; + const url = 'https://' + host; + cos.request({ + Method: 'Delete', + Key: key, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交文件压缩任务 +export const postFileCompress = { + name: '提交文件压缩任务', + fn: function postFileCompress() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; + const url = 'https://' + host; + const body = COS.util.json2xml({ + Request: { + Tag: 'FileCompress', // 必须 + Operation: { + FileCompressConfig: { + Flatten: '0', // 文件打包时,是否需要去除源文件已有的目录结构.0:不需要;1:需要 + Format: 'zip', // 打包压缩的类型,有效值:zip、tar、tar.gz + // UrlList、Prefix、Key 三者仅能选择一个,不能都为空,也不会同时生效 + // UrlList: '', // 索引文件的对象地址 + Prefix: 'testCompress/', // 目录前缀 + // Key: [], // 支持对存储桶中的多个文件进行打包,个数不能超过 1000, 总大小不超过50G,否则会导致任务失败 + }, + Output: { + Bucket: config.Bucket, // 保存压缩后文件的存储桶 + Region: config.Region, // 保存压缩后文件的存储桶地域 + Object: 'testCompress/compressed.zip', // 压缩后文件的文件名 + }, + UserData: '', + }, + // QueueId: '', // 任务所在的队列 ID + // CallBack: 'http://callback.demo.com', // 任务回调的地址 + // CallBackFormat: 'JSON', // 任务回调格式 + // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url + }, + }); + cos.request({ + Method: 'POST', + Key: 'file_jobs', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询文件压缩任务结果 +export const getFileCompress = { + name: '查询文件压缩任务结果', + fn: function getFileCompress() { + const jobId = 'faf1d2774a13911ed88a65b0c303ae7xx'; // 提交文件压缩任务后会返回当前任务的jobId + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'file_jobs/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交文件解压任务 +export const postFileUnCompress = { + name: '提交文件解压任务', + fn: function postFileUnCompress() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; + const url = 'https://' + host; + const body = COS.util.json2xml({ + Request: { + Tag: 'FileUncompress', // 必须 + Input: { + Object: 'testCompress/compressed.zip', // 文件名,取值为文件在当前存储桶中的完整名称 + }, + Operation: { + FileUncompressConfig: { + Prefix: '', // 指定解压后输出文件的前缀,不填则默认保存在存储桶根路径 + PrefixReplaced: '0', // 指定解压后的文件路径是否需要替换前缀,默认0 + }, + Output: { + Bucket: config.Bucket, // 保存解压后文件的存储桶 + Region: config.Region, // 保存解压后文件的存储桶地域 + }, + }, + // QueueId: '', // 任务所在的队列 ID + // CallBack: 'http://callback.demo.com', // 任务回调的地址 + // CallBackFormat: 'JSON', // 任务回调格式 + // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url + }, + }); + cos.request({ + Method: 'POST', + Key: 'file_jobs', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询文件解压任务结果 +export const getFileUnCompress = { + name: '查询文件解压任务结果', + fn: function getFileUnCompress() { + const jobId = 'fe7b0fa34a13911eda186254bb8f3aaxx'; // 提交文件解压任务后会返回当前任务的jobId + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'file_jobs/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 提交哈希值计算任务 +export const postFileHash = { + name: '提交哈希值计算任务', + fn: function postFileHash() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; + const url = 'https://' + host; + const body = COS.util.json2xml({ + Request: { + Tag: 'FileHashCode', // 必须 + Input: { + Object: 'test/1.pdf', // 文件名,取值为文件在当前存储桶中的完整名称 + }, + Operation: { + FileHashCodeConfig: { + Type: 'MD5', // 哈希值的算法类型,有效值:MD5、SHA1、SHA256 + AddToHeader: 'false', // 是否将计算得到的哈希值添加至文件自定义header, 有效值:true、false,默认值为 false。 + }, + // UserData: '', // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024 + }, + // QueueId: '', // 任务所在的队列 ID + // CallBack: 'http://callback.demo.com', // 任务回调的地址 + // CallBackFormat: 'JSON', // 任务回调格式 + // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url + }, + }); + cos.request({ + Method: 'POST', + Key: 'file_jobs', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询哈希值计算任务结果 +export const getFileHashResult = { + name: '查询哈希值计算任务结果', + fn: function getFileHashResult() { + const jobId = 'f3addcbd0a13811ed9b4ff5338d756fxx'; // 提交文件哈希值计算任务后会返回当前任务的jobId + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'file_jobs/' + jobId, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询文件处理队列 +export const describeFileProcessQueues = { + name: '查询文件处理队列', + fn: function describeFileProcessQueues() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'file_queue', + Url: url, + Query: { + // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 + state: 'Active', // 非必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响 + pageNumber: 1, // 第几页,默认值1 + pageSize: 10, // 非必须,每页个数,默认值10 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 更新文件处理队列 +export const updateFileProcessQueue = { + name: '更新文件处理队列', + fn: function updateFileProcessQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + const queueId = 'p6160ada105a7408e95aac015f4bf8xxx'; + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue/' + queueId; + const url = 'https://' + host; + const body = COS.util.json2xml({ + Request: { + Name: 'My-Queue-file', // 必须,队列名称,长度不超过128 + State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 + NotifyConfig: { + // 必须,回调配置 + State: 'On', // 必须,回调开关,Off/On,默认Off + Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish + ResultFormat: 'XML', // 非必选,回调格式,JSON/XML + Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ + Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 + // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 + // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 + // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 + }, + }, + }); + cos.request({ + Method: 'POST', + Key: 'file_queue/' + queueId, + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 哈希值计算同步请求 +export const generateFileHash = { + name: '哈希值计算同步请求', + fn: function generateFileHash() { + const key = 'test.pdf'; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: key, + Query: { + 'ci-process': 'filehash', // 必须,操作类型,哈希值计算固定为:filehash + type: 'md5', // 必须,支持的哈希算法类型,有效值:md5、sha1、sha256 + // 'addtoheader': false, // 非必须,是否将计算得到的哈希值,自动添加至文件的自定义header,格式为:x-cos-meta-md5/sha1/sha256;有效值:true、false,不填则默认为false。 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/index.js b/demo/CIDemos/index.js new file mode 100644 index 0000000..b647b12 --- /dev/null +++ b/demo/CIDemos/index.js @@ -0,0 +1,121 @@ +import * as common from './common.js'; +import * as taskAndWorkflow from './taskAndWorkflow.js'; +import * as picProcess from './picProcess.js'; +import * as ai from './ai.js'; +import * as mediaProcess from './mediaProcess.js'; +import * as docPreview from './docPreview.js'; +import * as audit from './audit.js'; +import * as fileProcess from './fileProcess.js'; +import * as asr from './asr.js'; + +// 函数集合 +const moduleFn = {}; +// html排版 +const contentMap = { + common: { + title: 'Common', + functions: [], + }, + taskAndWorkflow: { + title: '任务和工作流', + functions: [], + }, + picProcess: { + title: '图片处理', + functions: [], + }, + ai: { + title: 'AI识别', + functions: [], + }, + mediaProcess: { + title: '媒体处理', + functions: [], + }, + docPreview: { + title: '文档预览', + functions: [], + }, + audit: { + title: '内容审核', + functions: [], + }, + fileProcess: { + title: '文件处理', + functions: [], + }, + asr: { + title: '智能语音', + functions: [], + }, +}; + +function setContent(fnName, module, moduleName) { + const { name, fn } = module[fnName]; + moduleFn[fnName] = module[fnName].fn; + contentMap[moduleName].functions.push({ name, fnName }); +} +for (let fnName in common) { + setContent(fnName, common, 'common'); +} +for (let fnName in taskAndWorkflow) { + setContent(fnName, taskAndWorkflow, 'taskAndWorkflow'); +} +for (let fnName in picProcess) { + setContent(fnName, picProcess, 'picProcess'); +} +for (let fnName in ai) { + setContent(fnName, ai, 'ai'); +} +for (let fnName in mediaProcess) { + setContent(fnName, mediaProcess, 'mediaProcess'); +} +for (let fnName in docPreview) { + setContent(fnName, docPreview, 'docPreview'); +} +for (let fnName in audit) { + setContent(fnName, audit, 'audit'); +} +for (let fnName in fileProcess) { + setContent(fnName, fileProcess, 'fileProcess'); +} +for (let fnName in asr) { + setContent(fnName, asr, 'asr'); +} + + +(function () { + const container = document.querySelector('.ci-main'); + const html = []; + // 渲染html + for (let i in contentMap) { + const module = contentMap[i]; + const content = `

${module.title}

`; + let a = ''; + if (module.functions && module.functions.length > 0) { + a += module.functions.map(item => { + return `${item.fnName}(${item.name})`; + }).join(''); + } + html.push(content, a, '
'); + } + container.innerHTML = html.join(''); + container.onclick = function (e) { + if (e.target.tagName === 'A') { + const name = e.target.getAttribute('data-method').trim(); + moduleFn[name](); + } + }; + + // 设置结果面板跟随窗口自适应高 + const mainPanel = document.querySelector('.ci-main'); + const resultPanel = document.querySelector('.result'); + resultPanel.style.height = getPanelHeight(); + window.onresize = function (e) { + resultPanel.style.height = getPanelHeight(); + }; + + function getPanelHeight() { + return mainPanel.getBoundingClientRect().height - 80 + 'px'; + } +})(); diff --git a/demo/CIDemos/mediaProcess.js b/demo/CIDemos/mediaProcess.js new file mode 100644 index 0000000..678978f --- /dev/null +++ b/demo/CIDemos/mediaProcess.js @@ -0,0 +1,1081 @@ +/** + * 媒体处理demo集合 +*/ + +// 查询已经开通数据万象功能的存储桶 +export const describeMediaBuckets = { + name: '查询已经开通数据万象功能的存储桶', + fn: function describeMediaBuckets() { + const host = 'ci.' + config.Region + '.myqcloud.com'; + const url = 'https://' + host + '/mediabucket'; + cos.request({ + Method: 'GET', + Key: 'mediabucket', // 固定值,必须 + Url: url, + Query: { + pageNumber: '1', // 第几页,非必须 + pageSize: '10', // 每页个数,非必须 + // regions: 'ap-chengdu', // 地域信息,例如'ap-beijing',支持多个值用逗号分隔如'ap-shanghai,ap-beijing',非必须 + // bucketNames: 'test-1250000000', // 存储桶名称,精确搜索,例如'test-1250000000',支持多个值用逗号分隔如'test1-1250000000,test2-1250000000',非必须 + // bucketName: 'test', //存储桶名称前缀,前缀搜索,例如'test',支持多个值用逗号分隔如'test1,test2',非必须 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 搜索媒体处理队列 +export const searchMediaQueue = { + name: '搜索媒体处理队列', + fn: function searchMediaQueue() { + const key = `queue`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 队列 ID,支持搜索多个,以“,”符号分割字符串,最多填10个。;是否必传:否 + queueIds: '', + // 1. Active 表示队列内的作业会被媒体处理服务调度执行2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 + state: 'Active', + // 1. CateAll:所有类型2. Transcoding:媒体处理队列3. SpeedTranscoding:媒体处理倍速转码队列4. 默认为 Transcoding;是否必传:否 + category: 'CateAll', + // 第几页,默认值1;是否必传:否 + pageNumber: '', + // 每页个数,默认值10;是否必传:否 + pageSize: '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新媒体处理队列 +export const updateMediaQueue = { + name: '更新媒体处理队列', + fn: function updateMediaQueue() { + const queueId = 'xxx'; // queueId: 要更新的队列id; + const key = `queue/${queueId}`; // queueId: 要更新的队列id; + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 队列名称,仅支持中文、英文、数字、_、-和*,长度不超过 128;限制:无;;是否必传:是 + Name: 'queue-1', + // 1. Active 表示队列内的作业会被媒体处理服务调度执行2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;限制:无;;是否必传:是 + State: 'Paused', + // 回调配置;限制:无;;是否必传:是 + NotifyConfig: { + // 回调开关OffOn;限制:Off;;是否必传:否 + State: 'Off', + // 回调事件TaskFinish:任务完成WorkflowFinish:工作流完成;限制:无;;是否必传:否 + Event: 'TaskFinish', + // 回调格式XMLJSON;限制:XML;;是否必传:否 + ResultFormat: '', + // 回调类型UrlTDMQ;限制:无;;是否必传:否 + Type: 'Url', + // 回调地址,不能为内网地址。;限制:无;;是否必传:否 + Url: '', + // TDMQ 使用模式Topic:主题订阅Queue: 队列服务;限制:无;;是否必传:否 + MqMode: '', + // TDMQ 所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);限制:无;;是否必传:否 + MqRegion: '', + // TDMQ 主题名称;限制:无;;是否必传:否 + MqName: '', + }, + }, + }); + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + + +// 获取媒体文件信息同步请求 +export const getMediaInfo = { + name: '获取媒体文件信息同步请求', + fn: function getMediaInfo() { + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: 'test.mp4', + Query: { + 'ci-process': 'videoinfo', // 固定值,必须 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 获取媒体信息异步任务 +export const postMediaInfo = { + name: '获取媒体信息异步任务', + fn: function postMediaInfo() { + const key = 'jobs'; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:MediaInfo;是否必传:是 + Tag: 'MediaInfo', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 获取媒体文件某个时间的截图 +export const getSnapshot = { + name: '获取媒体文件某个时间的截图', + fn: function getSnapshot() { + const key = 'test.mp4'; // ObjectKey: 存在cos的媒体文件路径,比如test.mp4 + const host = `${config.Bucket}.cos.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 操作类型,固定使用 snapshot;是否必传:是 + 'ci-process': 'snapshot', + // 截图的时间点,单位为秒;是否必传:是 + time: 1, + // 截图的宽。默认为0;是否必传:否 + width: 0, + // 截图的高。默认为0;是否必传:否 + height: 0, + // 截图的格式,支持 jpg 和 png,默认 jpg;是否必传:否 + format: 'jpg', + // 图片旋转方式auto:按视频旋转信息进行自动���转off:不旋转默认值为 auto;是否必传:否 + rotate: 'auto', + // 截帧方式keyframe:截取指定时间点之前的最近的一个关键帧exactframe:截取指定时间点的帧默认值为 exactframe;是否必传:否 + mode: 'exactframe', + }, + RawBody: true, + // 可选返回文件格式为blob + DataType: 'blob', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Body); + } + }); + } +}; + + +// 提交视频截帧任务 +export const postSnapshot = { + name: '提交视频截帧任务', + fn: function postSnapshot() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Snapshot;是否必传:是 + Tag: 'Snapshot', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 截帧模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/snapshot-${number}.jpg', + // 雪碧图的名字。当有多个输出文件时必须包含 ${number} 通配符。仅支持 jpg 格式;是否必传:否 + SpriteObject: 'output/sprite-${number}.jpg', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 获取私m3u8 +export const getPrivateM3U8 = { + name: '获取私m3u8', + fn: function getPrivateM3U8() { + const key = '视频/peachtest.mp4.m3u8'; // ObjectKey: 存在cos的媒体文件路径,比如test.mp4 + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Query: { + // 操作类型,固定使用 pm3u8;是否必传:是 + 'ci-process': 'pm3u8', + // 私有 ts 资源 url 下载凭证的相对有效期,单位为秒,范围为[3600, 43200];是否必传:是 + expires: 3600, + }, + RawBody: true, // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Body); + } + }); + } +}; + +// 音视频转码 +export const postTranscode = { + name: '音视频转码', + fn: function postTranscode() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的Tag:Transcode;是否必传:是 + Tag: 'Transcode', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // TemplateId与Transcode 二选一传入 + // 转码模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 转码模板参数;是否必传:否 + // Transcode: {}, + // 水印模板 ID,可以传多个水印模板 ID,最多传3个;是否必传:否 + // WatermarkTemplateId: '', + // 去除水印参数, H265、AV1编码暂不支持该参数;是否必传:否 + // RemoveWatermark: { + // // 距离左上角原点 x 偏移,范围为[1, 4096];是否必传:是 + // Dx: '', + // // 距离左上角原点 y 偏移,范围为[1, 4096];是否必传:是 + // Dy: '', + // // 宽,范围为[1, 4096];是否必传:是 + // Width: '', + // // 高,范围为[1, 4096];是否必传:是 + // Height: '', + // }, + // 字幕参数,H265、AV1编码和非mkv封装暂不支持该参数;是否必传:否 + // Subtitles: { + // // 字幕参数;是否必传:是 + // Subtitle: { + // // 同 bucket 的字幕地址,需要 encode;是否必传:是 + // Url: '', + // }, + // }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/test.mp4', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务所在的队列类型,限制为 SpeedTranscoding, 表示为开启倍速转码;是否必传:否 + QueueType: 'SpeedTranscoding', + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 极速高清 +export const postExtremeHD = { + name: '极速高清', + fn: function postExtremeHD() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的Tag:Transcode;是否必传:是 + Tag: 'Transcode', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 极速高清转码模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 't0fc3f4eb75596459eb42b5fa52aa6e511', + // 水印模板 ID,可以传多个水印模板 ID,最多传3个;是否必传:否 + // WatermarkTemplateId: '', + // 去除水印参数, H265、AV1编码暂不支持该参数;是否必传:否 + // RemoveWatermark: { + // // 距离左上角原点 x 偏移,范围为[1, 4096];是否必传:是 + // Dx: '', + // // 距离左上角原点 y 偏移,范围为[1, 4096];是否必传:是 + // Dy: '', + // // 宽,范围为[1, 4096];是否必传:是 + // Width: '', + // // 高,范围为[1, 4096];是否必传:是 + // Height: '', + // }, + // 字幕参数,H265、AV1编码和非mkv封装暂不支持该参数;是否必传:否 + // Subtitles: { + // // 字幕参数;是否必传:是 + // Subtitle: { + // // 同 bucket 的字幕地址,需要 encode;是否必传:是 + // Url: '', + // }, + // }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/test.mp4', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 音视频转封装 +export const postSegment = { + name: '音视频转封装', + fn: function postSegment() { + const key = 'jobs'; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Segment;是否必传:是 + Tag: 'Segment', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 转封装参数;是否必传:是 + Segment: { + // 封装格式,支持 aac、mp3、flac、mp4、ts、mkv、avi、hls、m3u8;是否必传:是 + Format: 'mp4', + // 转封装时长单位:秒不小于5的整数不设置 Duration 时,表示只转封装格式不分段;是否必传:否 + Duration: '5', + // 处理的流编号,对应媒体信息中的 Response.MediaInfo.Stream.Video.Index 和 Response.MediaInfo.Stream.Audio.Index,详见 获取媒体信息接口;是否必传:否 + // TranscodeIndex: '', + // // hls 加密配置,当封装格式为 hls 和 m3u8 时生效;是否必传:否 + // HlsEncrypt: { + // // 是否开启 HLS 加密,取值 true/false,默认值 false;是否必传:否 + // IsHlsEncrypt: '', + // // HLS 加密的 key,当 IsHlsEncrypt 为 true 时,该参数才有意义;是否必传:否 + // UriKey: '', + // }, + // // 开始时间取值范围: [0,视频时长],默认值为0单位为秒支持 float 格式,执行精度精确到毫秒;是否必传:否 + // StartTime: '', + // // 结束时间取值范围:[0, 视频时长],默认值为视频结束时间单位为秒支持 float 格式,执行精度精确到毫秒;是否必传:否 + // EndTime: '', + }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/out-${number}', + }, + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + + +// 提交音视频拼接任务 +export const postConcat = { + name: '提交音视频拼接任务', + fn: function postConcat() { + const key = 'jobs'; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Concat;是否必传:是 + Tag: 'Concat', + // 待操作的文件信息;是否必传:否 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // TemplateId与ConcatTemplate 二选一传入 + // 转码模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 拼接参数;是否必传:否 + // ConcatTemplate: { + // // 拼接节点,支持多个文件,按照文件顺序拼接;限制:否;;是否必传:否 + // ConcatFragment: { + // // 同 bucket 对象地址,需要 urlEncode;限制:是;;是否必传:否 + // Url: '', + // // 拼接对象的索引位置,大于等于0的整数;限制:否;;是否必传:否 + // FragmentIndex: '', + // // 开始时间[0, 视频时长]单位为秒 当Request.Operation.ConcatTemplate.DirectConcat 为 true 时不生效;限制:否;;是否必传:否 + // StartTime: '', + // // 结束时间[0, 视频时长]单位为秒 当 Request.Operation.ConcatTemplate.DirectConcat 为 true 时不生效;限制:否;;是否必传:否 + // EndTime: '', + // }, + // // Input 节点位于 ConcatFragment 序列索引,不能大于 ConcatFragment 长度;限制:否;;是否必传:否 + // Index: '', + // // 简单拼接方式(不转码直接拼接),其他的视频和音频参数失效,取值 true/false;限制:否;;是否必传:否 + // DirectConcat: '', + // }, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/out.mp4', + }, + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交视频转动图 +export const postAnimation = { + name: '提交视频转动图', + fn: function postAnimation() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:Animation;是否必传:是 + Tag: 'Animation', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // TemplateId与Animation 二选一传入 + // 转码模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 视频转动图参数;是否必传:否 + // Animation: {}, + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/out.${ext}', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交精彩集锦任务 +export const postVideoMontage = { + name: '提交精彩集锦任务', + fn: function postVideoMontage() { + const key = 'jobs'; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:VideoMontage;是否必传:是 + Tag: 'VideoMontage', + // 待操作的文件信息;是否必传:是 + Input: { + // Object与url二选一传递 + // 同存储桶文件路径;是否必传:否 + Object: 'test.mp4', + // 支持公网下载的Url;是否必传:否 + // Url: '', + }, + // 操作规则;是否必传:是 + Operation: { + // 模板 ID;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/out.mp4', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交视频标签任务 +export const postVideoTag = { + name: '提交视频标签任务', + fn: function postVideoTag() { + const key = 'jobs'; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:VideoTag;是否必传:是 + Tag: 'VideoTag', + // 待操作的文件信息;是否必传:是 + Input: { + // 执行视频标签任务的文件路径,目前支持 mp4、avi、mkv、wmv、rmvb、flv、mov 封装格式,视频时长超过30min的视频请 提交工单 处理;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 任务参数;是否必传:是 + VideoTag: { + // 场景类型,可选择视频标签的运用场景,不同的运用场景使用的算法、输入输出等都会有所差异。当前版本只支持 Stream 场景;是否必传:是 + Scenario: 'Stream', + }, + // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + // 透传用户信息;是否必传:否 + UserData: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交智能封面任务 +export const postSmartCover = { + name: '提交智能封面任务', + fn: function postSmartCover() { + const key = 'jobs'; // + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:SmartCover;是否必传:是 + Tag: 'SmartCover', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 智能封面模板id;是否必传:否,可通过控制台获取 + TemplateId: 'xxx', + // 结果输出配置;是否必传:是 + Output: { + // 存储桶的地域;是否必传:是 + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/smartcover-${number}.jpg', + }, + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为 0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 添加数字水印任务 +export const postDigitalWatermark = { + name: '添加数字水印任务', + fn: function postDigitalWatermark() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:DigitalWatermark;是否必传:是 + Tag: 'DigitalWatermark', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + DigitalWatermark: { + Message: '123456', // 嵌入数字水印的水印信息;是否必传:是 + Type: 'Text', // 数字水印类型;是否必传:是 + Version: 'V1', // 数字水印版本;是否必传:是 + IgnoreError: true, // 当添加水印失败是否忽略错误继续执行任务;是否必传:是 + }, + // 结果输出配置;是否必传:是 + Output: { + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/output.mp4', + }, + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提取数字水印任务 +export const postExtractDigitalWatermark = { + name: '提取数字水印任务', + fn: function postExtractDigitalWatermark() { + const key = 'jobs'; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:ExtractDigitalWatermark;是否必传:是 + Tag: 'ExtractDigitalWatermark', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: 'test.mp4', + }, + // 操作规则;是否必传:是 + Operation: { + // 提取数字水印配置;是否必传:是 + ExtractDigitalWatermark: { + // 水印类型;限制:Text;;是否必传:是 + Type: 'Text', + // 水印版本;限制:V1;;是否必传:是 + Version: 'V1', + }, + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 + UserData: '', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 提交图片异步处理任务 +export const postPicProcess = { + name: '提交图片异步处理任务', + fn: function postPicProcess() { + const key = 'jobs'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 创建任务的 Tag:PicProcess;是否必传:是 + Tag: 'PicProcess', + // 待操作的文件信息;是否必传:是 + Input: { + // 文件路径;是否必传:是 + Object: '1.jpg', + }, + // 操作规则;是否必传:是 + Operation: { + // 模板 ID;是否必传:否 + TemplateId: 't1edc04f224ca64782840022cdc8fc3aa4', + // PicProcess: {}, + // 结果输出配置;是否必传:是 + Output: { + Region: config.Region, + // 存储结果的存储桶;是否必传:是 + Bucket: config.Bucket, + // 输出结果的文件名;是否必传:是 + Object: 'output/output.jpg', + }, + // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 + UserData: '', + // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 + JobLevel: '0', + }, + // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 + CallBackFormat: '', + // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 + CallBackType: 'Url', + // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 + CallBack: '', + }, + }); + + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; \ No newline at end of file diff --git a/demo/CIDemos/picProcess.js b/demo/CIDemos/picProcess.js new file mode 100644 index 0000000..8e19b1e --- /dev/null +++ b/demo/CIDemos/picProcess.js @@ -0,0 +1,519 @@ +/** + * 图片处理demo集合 +*/ + +// 获取带图片处理的访问url +export const getImageUrl = { + name: '获取带图片处理的访问url', + fn: function getImageUrl() { + // 生成带图片处理参数的文件签名URL,过期时间设置为 30 分钟。 + cos.getObjectUrl({ + Bucket: config.Bucket, + Region: config.Region, + Key: '02.png', + Query: { 'imageMogr2/thumbnail/200x/': '' }, + Expires: 1800, + Sign: true, + }, function (err, data) { + console.log('getObjectUrl with sign: ', err || (data && data.Url)); + }); + + // 生成带图片处理参数的文件URL,不带签名。 + cos.getObjectUrl({ + Bucket: config.Bucket, + Region: config.Region, + Key: 'photo.png', + QueryString: `imageMogr2/thumbnail/200x/`, + Sign: false, + }, function (err, data) { + console.log('getObjectUrl without sign: ', err || (data && data.Url)); + }); + } +}; + +// 图片样式 - 查询样式 +export const describeImageStyles = { + name: '图片样式 - 查询样式', + fn: function describeImageStyles() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Url: url, + Query: { + 'style-name': 'style_name', // 非必填,样式名称 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图片样式 - 增加样式 +export const addImageStyle = { + name: '图片样式 - 增加样式', + fn: function addImageStyle() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; + const url = 'https://' + host; + const body = COS.util.json2xml({ + AddStyle: { + StyleName: 'style_name1', // 必须,样式名称 + StyleBody: 'imageMogr2/thumbnail/!50px', // 必须,样式详情 + }, + }); + cos.request({ + Method: 'PUT', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 图片样式 - 删除样式 +export const deleteImageStyle = { + name: '图片样式 - 删除样式', + fn: function deleteImageStyle() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; + const url = 'https://' + host; + const body = COS.util.json2xml({ + DeleteStyle: { + StyleName: 'style_name1', // 必须,样式名称 + }, + }); + cos.request({ + Method: 'DELETE', + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 开通 Guetzli 压缩 +export const openImageGuetzli = { + name: '开通 Guetzli 压缩', + fn: function openImageGuetzli() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; + const url = 'https://' + host; + cos.request({ + Method: 'PUT', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询 Guetzli 状态 +export const describeImageGuetzli = { + name: '查询 Guetzli 状态', + fn: function describeImageGuetzli() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 关闭 Guetzli 压缩 +export const closeImageGuetzli = { + name: '关闭 Guetzli 压缩', + fn: function closeImageGuetzli() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; + const url = 'https://' + host; + cos.request({ + Method: 'DELETE', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }) + } +}; + +// 上传时使用图片处理 +export const uploadPicOperation = { + name: '上传时使用图片处理', + fn: function uploadPicOperation() { + util.selectLocalFile(function (files) { + const file = files && files[0]; + if (!file) return; + if (file.type.indexOf('image') < 0) { + console.error('Please select a photo to upload!'); + return; + } + if (file.size > 1024 * 1024) { + cos.sliceUploadFile({ + Bucket: config.Bucket, // Bucket 格式:test-1250000000 + Region: config.Region, + Key: file.name, + Body: file, + Headers: { + // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 + 'Pic-Operations': JSON.stringify({ + is_pic_info: 1, + rules: [{ fileid: 'desample_photo.jpg', rule: 'imageMogr2/thumbnail/200x/' }], + }), + }, + onHashProgress: function (progressData) { + console.log('onHashProgress', JSON.stringify(progressData)); + }, + onProgress: function (progressData) { + console.log('onProgress', JSON.stringify(progressData)); + }, + }, function (err, data) { + console.log('uploadPicOperation:', err || data); + }, + ); + } else { + cos.putObject({ + Bucket: config.Bucket, // Bucket 格式:test-1250000000 + Region: config.Region, + Key: file.name, + Body: file, + Headers: { + // 通过 imageMogr2 接口进行 avif 压缩,可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc + 'Pic-Operations': + '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/format/avif"}]}', + }, + onHashProgress: function (progressData) { + console.log('onHashProgress', JSON.stringify(progressData)); + }, + onProgress: function (progressData) { + console.log('onProgress', JSON.stringify(progressData)); + }, + }, function (err, data) { + console.log('uploadPicOperation:', err || data); + }, + ); + } + }); + } +}; + +// 对云上数据处理 +export const requestPicOperation = { + name: '对云上数据处理', + fn: function requestPicOperation() { + // 文字水印示例 + const text = '腾讯云万象优图'; + const color = '#3D3D3D'; + // 经过安全base64编码 使用 COS.util.encodeBase64 方法需要sdk版本至少为1.4.18 + const textBase64 = COS.util.encodeBase64(text, true); + const colorBase64 = COS.util.encodeBase64(color, true); + // 生成一个文字水印 + const waterMarkRule = `watermark/2/text/${textBase64}/fill/${colorBase64}/fontsize/20/dissolve/50/gravity/northeast/dx/20/dy/20/batch/1/degree/45`; + const picOperations = JSON.stringify({ + is_pic_info: 1, // 固定 + // fileid 设置和Key相同可实现只保留处理后的图片而不保留原图 + rules: [{ fileid: 'desample_photo.jpg', rule: waterMarkRule }], + }); + + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Key: '02.png', + Method: 'GET', + Action: 'exif', + RawBody: true, + // Headers: { + // // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 + // 'Pic-Operations': picOperations, + // }, + }, function (err, data) { + const info = JSON.parse(data.Body); + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 下载时使用图片压缩 +export const getObjectPicOperation = { + name: '下载时使用图片压缩', + fn: function getObjectPicOperation() { + cos.getObject({ + Bucket: config.Bucket, + Region: config.Region, + Key: '1.png', + QueryString: `imageMogr2/format/avif`, // 可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 异常图片检测 +export const createImageInspectJob = { + name: '异常图片检测', + fn: function createImageInspectJob() { + const key = '1.png'; + cos.request({ + Bucket: config.Bucket, + Region: config.Region, + Method: 'GET', + Key: key, + RawBody: true, + Query: { + 'ci-process': 'ImageInspect', // 必须,操作类型,异常图片检测固定为:ImageInspect + }, + }, function (err, data) { + // 从响应数据中解析出异常图片检测结果 + let body = {}; + if (data && data.Body) { + body = JSON.parse(data.Body) || {}; + if (body) { + data.body = body; + } + } + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + + +// 查询图片处理队列 +export const describePicProcessQueues = { + name: '查询图片处理队列', + fn: function describePicProcessQueues() { + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: 'picqueue', + Url: url, + Query: { + // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 + state: 'Active', // 非必须,1. Active 表示队列内的作业会被媒体处理服务调度执行。2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 + pageNumber: 1, // 非必须,第几页,默认值1 + pageSize: 10, // 非必须,每页个数,默认值10 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + + +// 更新图片处理队列 +export const updatePicProcessQueue = { + name: '更新图片处理队列', + fn: function updatePicProcessQueue() { + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + const queueId = 'p882d181160d84feca27d9376e17c4xxx'; + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue/' + queueId; + const url = 'https://' + host; + const body = COS.util.json2xml({ + Request: { + Name: 'My-Queue-Pic', // 必须,队列名称,长度不超过128 + State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 + NotifyConfig: { + // 必须,回调配置 + State: 'On', // 必须,回调开关,Off/On,默认Off + Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish + ResultFormat: 'XML', // 非必选,回调格式,JSON/XML + Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ + Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 + // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 + // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 + // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 + }, + }, + }); + cos.request({ + Method: 'POST', + Key: 'picqueue/' + queueId, + Url: url, + Body: body, + ContentType: 'application/xml', + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询原图保护状态 +export const describeOriginProtect = { + name: '查询原图保护状态', + fn: function describeOriginProtect() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + + +// 开通原图保护 +export const openOriginProtect = { + name: '开通原图保护', + fn: function openOriginProtect() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; + const url = 'https://' + host; + cos.request({ + Method: 'PUT', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 关闭原图保护 +export const closeOriginProtect = { + name: '关闭原图保护', + fn: function closeOriginProtect() { + const host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; + const url = 'https://' + host; + cos.request({ + Method: 'DELETE', + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 开通图片处理(异步)服务 +export const CreatePicProcessBucket = { + name: '开通图片处理(异步)服务', + fn: function CreatePicProcessBucket() { + const key = 'picbucket'; // 固定值 + const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/' + key; + const url = 'https://' + host; + cos.request({ + Method: 'POST', + Key: key, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + +// 查询图片处理(异步)服务 +export const DescribePicProcessBuckets = { + name: '查询图片处理(异步)服务', + fn: function DescribePicProcessBuckets() { + const key = 'picbucket'; // 固定值 + const host = 'ci.' + config.Region + '.myqcloud.com/' + key; + const url = 'https://' + host; + cos.request({ + Method: 'GET', + Key: key, + Url: url, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data); + } + }); + } +}; + + + diff --git a/demo/CIDemos/taskAndWorkflow.js b/demo/CIDemos/taskAndWorkflow.js new file mode 100644 index 0000000..fb486d2 --- /dev/null +++ b/demo/CIDemos/taskAndWorkflow.js @@ -0,0 +1,956 @@ +/** + * 任务和工作流demo集合 +*/ + +// 获取任务列表 +export const DescribeFileProcessJobs = { + name: '获取任务列表', + fn: function DescribeFileProcessJobs() { + const key = 'jobs'; // 固定值,必须 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 拉取该队列 ID 下的任务;是否必传:否 + // queueId: '', + // 拉取队列类型下的任务,和 queueId 不同时生效,同时存在时 queueId 优先;是否必传:否 + // queueType: '', + // 任务的 Tag;是否必传:是,比如查找视频转动图的任务 + tag: 'Animation', + // 触发该任务的工作流ID;是否必传:否 + workflowId: '', + // 触发该任务的存量触发任务ID;是否必传:否 + // inventoryTriggerJobId: '', + // 该任务的输入文件名,暂仅支持精确匹配;是否必传:否 + // inputObject: '', + // Desc 或者 Asc。默认为 Desc;是否必传:否 + // orderByTime: '', + // 请求的上下文,用于翻页。上次返回的值;是否必传:否 + // nextToken: '', + // 拉取的最大任务数。默认为10。最大为100;是否必传:否 + size: 10, + // 拉取该状态的任务,以,分割,支持多状态:All、Submitted、Running、Success、Failed、Pause、Cancel。默认为 All;是否必传:否 + states: 'All', + // 拉取创建时间大于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T00:00:00+0800;是否必传:否 + // startCreationTime: '', + // 拉取创建时间小于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T23:59:59+0800;是否必传:否 + // endCreationTime: '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + + +// 查看指定任务 +export const getJobDetail = { + name: '查看指定任务', + fn: function getJobDetail() { + const jobId = 'jec8ae8943c2511ee9d4a9b3cb7a5c6xx'; // jobId: 需要查询的jobId; + const key = `jobs/${jobId}`; // jobId: 需要查询的jobId; + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 查询工作流 +export const DescribeWorkflow = { + name: '查询工作流', + fn: function DescribeWorkflow() { + const key = 'workflow'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 工作流 ID,以,符号分割字符串;是否必传:否 + ids: '', + // 工作流名称;是否必传:否 + name: '', + // 第几页;是否必传:否 + pageNumber: '', + // 每页个数;是否必传:否 + pageSize: '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 新增工作流 +export const CreateWorkflow = { + name: '新增工作流', + fn: function CreateWorkflow() { + const key = 'workflow'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + // 替换为自己的模板id + const snapshotTemplate = 'xxx'; // 音视频截帧模板 + const transcodeTemplate = 'xxx'; // 视频转码模板 + const animationTemplate = 'xxx'; // 视频转动图模板 + const concatTemplate = 'xxx'; // 音视频拼接模板 + const voiceSeparateTemplate = 'xxx'; // 人声分离模板 + const videoMontageTemplate = 'xxx'; // 精彩集锦模板 + const watermarkTemplate = 'xxx'; // 视频水印模板 + const videoProcessTemplate = 'xxx'; // 视频增强模板 + const superResolutionTemplate = 'xxx'; // 超分辨率模板 + const body = COS.util.json2xml({ + Request: { + MediaWorkflow: { + Name: 'my_workflow', + State: 'Active', // 创建并开启工作流 + Topology: { + Dependencies: { + Start: + 'Snapshot_1581665960536,Transcode_1581665960537,Animation_1581665960538,Concat_1581665960539,VoiceSeparate_1581665960551,VideoMontage_1581665960551,SDRtoHDR_1581665960553,VideoProcess_1581665960554,SuperResolution_1581665960583,Segment_1581665960667', + Snapshot_1581665960536: 'End', + Transcode_1581665960537: 'End', + Animation_1581665960538: 'End', + Concat_1581665960539: 'End', + VideoMontage_1581665960551: 'End', + SDRtoHDR_1581665960553: 'End', + VideoProcess_1581665960554: 'End', + SuperResolution_1581665960583: 'End', + Segment_1581665960667: 'End', + VoiceSeparate_1581665960551: 'End', + }, + Nodes: { + Start: { + Type: 'Start', + Input: { + ObjectPrefix: 'test-', + NotifyConfig: { + Type: 'Url', + Url: 'http://www.callback.com', + Event: 'TaskFinish,WorkflowFinish', + }, + ExtFilter: { + State: 'On', + Audio: 'true', + Custom: 'true', + CustomExts: 'mp4/mp3', + AllFile: 'false', + }, + }, + }, + Snapshot_1581665960536: { + Type: 'Snapshot', + Operation: { + TemplateId: snapshotTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/snapshot-${number}.${Ext}', + SpriteObject: 'worlflow-test/${RunId}/snapshot-sprite-${number}.jpg', + }, + }, + }, + Transcode_1581665960537: { + Type: 'Transcode', + Operation: { + TemplateId: transcodeTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/trans.mp4', + }, + }, + }, + Animation_1581665960538: { + Type: 'Animation', + Operation: { + TemplateId: animationTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/bcd.gif', + }, + }, + }, + Concat_1581665960539: { + Type: 'Concat', + Operation: { + TemplateId: concatTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/abc.${ext}', + }, + }, + }, + VoiceSeparate_1581665960551: { + Type: 'VoiceSeparate', + Operation: { + TemplateId: voiceSeparateTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/background.mp3', + AuObject: 'worlflow-test/${RunId}/audio.mp3', + }, + }, + }, + VideoMontage_1581665960551: { + Type: 'VideoMontage', + Operation: { + TemplateId: videoMontageTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/montage.mp4', + }, + }, + }, + SDRtoHDR_1581665960553: { + Type: 'SDRtoHDR', + Operation: { + SDRtoHDR: { + HdrMode: 'HLG', + }, + TranscodeTemplateId: transcodeTemplate, + WatermarkTemplateId: watermarkTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/SDRtoHDR.mp4', + }, + }, + }, + VideoProcess_1581665960554: { + Type: 'VideoProcess', + Operation: { + TemplateId: videoProcessTemplate, + TranscodeTemplateId: transcodeTemplate, + WatermarkTemplateId: watermarkTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/videoProcess.mp4', + }, + }, + }, + SuperResolution_1581665960583: { + Type: 'SuperResolution', + Operation: { + TemplateId: superResolutionTemplate, + TranscodeTemplateId: transcodeTemplate, + WatermarkTemplateId: watermarkTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/SuperResolution.mkv', + }, + }, + }, + Segment_1581665960667: { + Type: 'Segment', + Operation: { + Segment: { + Format: 'mp4', + Duration: '5', + }, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/segment-trans${Number}', + }, + }, + }, + }, + }, + }, + }, + }); + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新工作流 +export const UpdateWorkflow = { + name: '更新工作流', + fn: function UpdateWorkflow() { + const workflowId = 'xxx'; // 要更新的工作流id + const key = `workflow/${workflowId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + // 替换为自己的模板id + const snapshotTemplate = 'xxx'; // 音视频截帧模板 + const transcodeTemplate = 'xxx'; // 视频转码模板 + const animationTemplate = 'xxx'; // 视频转动图模板 + const concatTemplate = 'xxx'; // 音视频拼接模板 + const voiceSeparateTemplate = 'xxx'; // 人声分离模板 + const videoMontageTemplate = 'xxx'; // 精彩集锦模板 + const watermarkTemplate = 'xxx'; // 视频水印模板 + const videoProcessTemplate = 'xxx'; // 视频增强模板 + const superResolutionTemplate = 'xxx'; // 超分辨率模板 + const body = COS.util.json2xml({ + Request: { + MediaWorkflow: { + Name: 'my_workflow3333', + State: 'Active', // 创建并开启工作流 + Topology: { + Dependencies: { + Start: + 'Snapshot_1581665960536,Transcode_1581665960537,Animation_1581665960538,Concat_1581665960539,VoiceSeparate_1581665960551,VideoMontage_1581665960551,SDRtoHDR_1581665960553,VideoProcess_1581665960554,SuperResolution_1581665960583,Segment_1581665960667', + Snapshot_1581665960536: 'End', + Transcode_1581665960537: 'End', + Animation_1581665960538: 'End', + Concat_1581665960539: 'End', + VideoMontage_1581665960551: 'End', + SDRtoHDR_1581665960553: 'End', + VideoProcess_1581665960554: 'End', + SuperResolution_1581665960583: 'End', + Segment_1581665960667: 'End', + VoiceSeparate_1581665960551: 'End', + }, + Nodes: { + Start: { + Type: 'Start', + Input: { + ObjectPrefix: 'test-', + NotifyConfig: { + Type: 'Url', + Url: 'http://www.callback.com', + Event: 'TaskFinish,WorkflowFinish', + }, + ExtFilter: { + State: 'On', + Audio: 'true', + Custom: 'true', + CustomExts: 'mp4/mp3', + AllFile: 'false', + }, + }, + }, + Snapshot_1581665960536: { + Type: 'Snapshot', + Operation: { + TemplateId: snapshotTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/snapshot-${number}.${Ext}', + SpriteObject: 'worlflow-test/${RunId}/snapshot-sprite-${number}.jpg', + }, + }, + }, + Transcode_1581665960537: { + Type: 'Transcode', + Operation: { + TemplateId: transcodeTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/trans.mp4', + }, + }, + }, + Animation_1581665960538: { + Type: 'Animation', + Operation: { + TemplateId: animationTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/bcd.gif', + }, + }, + }, + Concat_1581665960539: { + Type: 'Concat', + Operation: { + TemplateId: concatTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/abc.${ext}', + }, + }, + }, + VoiceSeparate_1581665960551: { + Type: 'VoiceSeparate', + Operation: { + TemplateId: voiceSeparateTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/background.mp3', + AuObject: 'worlflow-test/${RunId}/audio.mp3', + }, + }, + }, + VideoMontage_1581665960551: { + Type: 'VideoMontage', + Operation: { + TemplateId: videoMontageTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/montage.mp4', + }, + }, + }, + SDRtoHDR_1581665960553: { + Type: 'SDRtoHDR', + Operation: { + SDRtoHDR: { + HdrMode: 'HLG', + }, + TranscodeTemplateId: transcodeTemplate, + WatermarkTemplateId: watermarkTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/SDRtoHDR.mp4', + }, + }, + }, + VideoProcess_1581665960554: { + Type: 'VideoProcess', + Operation: { + TemplateId: videoProcessTemplate, + TranscodeTemplateId: transcodeTemplate, + WatermarkTemplateId: watermarkTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/videoProcess.mp4', + }, + }, + }, + SuperResolution_1581665960583: { + Type: 'SuperResolution', + Operation: { + TemplateId: superResolutionTemplate, + TranscodeTemplateId: transcodeTemplate, + WatermarkTemplateId: watermarkTemplate, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/SuperResolution.mkv', + }, + }, + }, + Segment_1581665960667: { + Type: 'Segment', + Operation: { + Segment: { + Format: 'mp4', + Duration: '5', + }, + Output: { + Region: config.Region, + Bucket: config.Bucket, + Object: 'worlflow-test/${RunId}/segment-trans${Number}', + }, + }, + }, + }, + }, + }, + }, + }); + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 删除工作流 +export const DeleteWorkflow = { + name: '删除工作流', + fn: function DeleteWorkflow() { + const workflowId = 'xxx'; // 要删除的工作流id + const key = `workflow/${workflowId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'DELETE', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 工作流实例列表 +export const DescribeWorkflowExecutions = { + name: '工作流实例列表', + fn: function DescribeWorkflowExecutions() { + const key = 'workflowexecution'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + workflowId: 'xxx', // 工作流 ID,非必须 + // name: '', // 文件名称,非必须 + // orderByTime: 'Desc', // Desc 或者 Asc。默认为 Desc,非必须 + // size: '10', // 拉取的最大任务数。默认为10。最大为100,非必须 + // states: 'All', // 工作流实例状态,以,分割支持多状态,非必须 + // startCreationTime: '', // 拉取创建时间大于等于该时间。格式为:%Y-%m-%dT%H:%m:%S%z,非必须 + // endCreationTime: '', // 拉取创建时间小于等于该时间。格式为:%Y-%m-%dT%H:%m:%S%z,非必须 + // nextToken: '', // 请求的上下文,用于翻页。下一页输入 token,非必须 + // jobId: '' // 批量触发工作流任务 ID,用于扫描出批量触发任务 ID 对应执行的工作流实例,非必须 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 获取工作流实例详情 +export const DescribeWorkflowExecution = { + name: '获取工作流实例详情', + fn: function DescribeWorkflowExecution() { + const runId = 'xxx'; // 要查询的工作流实例 ID + const key = `workflowexecution/${runId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 手动触发工作流 +export const TriggerWorkflow = { + name: '手动触发工作流', + fn: function TriggerWorkflow() { + const key = 'triggerworkflow'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // 需要触发的工作流 ID;是否必传:是 + workflowId: 'xxxx', + // 需要进行工作流处理的对象名称, 需要进行 url 编码;是否必传:是 + object: 'test.mp4', + // 存量触发任务名称,支持中文、英文、数字、—和_,长度限制128字符,默认为空;是否必传:否 + // name: '', + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 取消任务 +export const CancelMediaJob = { + name: '取消任务', + fn: function CancelMediaJob() { + const jobId = 'xxxx'; // 要取消的任务id + const key = `jobs/${jobId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Action: 'cancel', // 固定值 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 任务列表 +export const DescribeMediaJobs = { + name: '任务列表', + fn: function DescribeMediaJobs() { + const key = 'jobs'; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + tag: 'Animation', // 任务的 Tag,这里以视频转动图任务Animation为例,必须 + // workflowId: '', // 触发该任务的工作流ID,非必须 + // inventoryTriggerJobId: '', // 触发该任务的存量触发任务 ID,非必须 + // inputObject: '', // 该任务的输入文件名,暂仅支持精确匹配,非必须 + // orderByTime: 'Desc', // Desc 或者 Asc。默认为 Desc,非必须 + // size: '10', // 拉取的最大任务数。默认为10。最大为100,非必须 + // states: 'All', // 工作流实例状态,以,分割支持多状态,非必须 + // startCreationTime: '', // 拉取创建时间大于等于该时间。格式为:%Y-%m-%dT%H:%m:%S%z,非必须 + // endCreationTime: '', // 拉取创建时间小于等于该时间。格式为:%Y-%m-%dT%H:%m:%S%z,非必须 + // nextToken: '', // 请求的上下文,用于翻页。下一页输入 token,非必须 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 查询模板列表 +export const DescribeMediaTemplates = { + name: '查询模板列表', + fn: function DescribeMediaTemplates() { + const key = 'template'; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + tag: 'All', // 模板类型,默认值: All + // category: '', // Official(系统预设模板),Custom(自定义模板),默认值: Custom,非必须 + // ids: '', // 模板 ID,以,符号分割字符串,非必须 + // name: '', // 模板名称前缀,非必须 + // pageNumber: '1', // 第几页,默认值:1,非必须 + // pageSize: '10', // 每页个数,默认值:10,非必须 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 创建模板 +export const CreateMediaTemplate = { + name: '创建模板', + fn: function CreateMediaTemplate() { + const key = 'template'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:按照不同需求传递,这里以创建视频检测模板VideoTargetRec为例;是否必传:是 + Tag: 'VideoTargetRec', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_videoTargetRec', + // 视频目标检测 参数;是否必传:是 + VideoTargetRec: { + // 是否开启人体检测,取值 true/false;是否必传:否 + Body: 'true', + // 是否开启宠物检测,取值 true/false;是否必传:否 + Pet: 'true', + // 是否开启车辆检测,取值 true/false;是否必传:否 + Car: 'false', + }, + }, + }); + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 更新模版 +export const UpdateMediaTemplate = { + name: '更新模版', + fn: function UpdateMediaTemplate() { + const templateId = 'xxxxxxx'; // 要更新的模板id + const key = `template/${templateId}`; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + // 模板类型:按照不同需求传递,这里以创建视频检测模板VideoTargetRec为例;是否必传:是 + Tag: 'VideoTargetRec', + // 模板名称,仅支持中文、英文、数字、_、-和*,长度不超过 64;是否必传:是 + Name: 'my_videoTargetRec2', + // 视频目标检测 参数;是否必传:是 + VideoTargetRec: { + // 是否开启人体检测,取值 true/false;是否必传:否 + Body: 'false', + // 是否开启宠物检测,取值 true/false;是否必传:否 + Pet: 'false', + // 是否开启车辆检测,取值 true/false;是否必传:否 + Car: 'true', + }, + }, + }); + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 删除模板 +export const DeleteMediaTemplate = { + name: '删除模板', + fn: function DeleteMediaTemplate() { + const templateId = 'xxxx'; // 要删除的模板id + const key = `template/${templateId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'DELETE', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 创建批量任务 +export const CreateInventoryTriggerJob = { + name: '创建批量任务', + fn: function CreateInventoryTriggerJob() { + const key = 'inventorytriggerjob'; // 固定值 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + const body = COS.util.json2xml({ + Request: { + Name: 'demo', // 批量触发任务名称,支持中文、英文、数字、—和_,长度限制128字符 + Type: 'Workflow', // 批量处理任务类型: Workflow,也支持设置为Job + Input: { + Prefix: 'inputtest', // Object 前缀 + }, + Operation: { + TimeInterval: { + Start: '2022-02-01T12:00:00+0800', // 扫描对象的上传时间,非必须 + End: '2022-05-01T12:00:00+0800', // 扫描对象的上传时间,非必须 + }, + WorkflowIds: 'xxxx', // 触发的工作流 ID,必须 + }, + }, + }); + cos.request({ + Method: 'POST', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Body: body, // 请求体参数,必须 + ContentType: 'application/xml', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 取消批量任务 +export const CancelInventoryTriggerJob = { + name: '取消批量任务', + fn: function CancelInventoryTriggerJob() { + const jobId = 'xxx'; // 要取消的批量任务id + const key = `inventorytriggerjob/${jobId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'PUT', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Action: 'cancel', // 固定值,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 查询单个批量任务 +export const DescribeInventoryTriggerJob = { + name: '查询单个批量任务', + fn: function DescribeInventoryTriggerJob() { + const jobId = 'xxx'; // 要查询的批量任务id + const key = `inventorytriggerjob/${jobId}`; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; + +// 批量任务列表 +export const DescribeInventoryTriggerJobs = { + name: '批量任务列表', + fn: function DescribeInventoryTriggerJobs() { + const key = 'inventorytriggerjob'; // 固定格式 + const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; + const url = `https://${host}/${key}`; + cos.request({ + Method: 'GET', // 固定值,必须 + Key: key, // 必须 + Url: url, // 请求的url,必须 + Query: { + // nextToken: '', // 请求的上下文,用于翻页。下一页输入 token,非必须 + // size: '10', // 拉取的最大任务数。默认为10。最大为100,非必须 + // type: 'Workflow', // 拉取批量任务类型,工作流类型 Workflow 、任务类型 Job,非必须 + // orderByTime: 'Desc', // Desc 或者 Asc。默认为 Desc,非必须 + // states: 'All', // 工作流实例状态,以,分割支持多状态,非必须 + // startCreationTime: '', // 拉取创建时间大于等于该时间。格式为:%Y-%m-%dT%H:%m:%S%z,非必须 + // endCreationTime: '', // 拉取创建时间小于等于该时间。格式为:%Y-%m-%dT%H:%m:%S%z,非必须 + // workflowId: '', // 工作流 ID,非必须 + // jobId: '', // 批量触发任务 ID,非必须 + // name: '', // 批量触发任务名称 + }, + }, function (err, data) { + if (err) { + // 处理请求失败 + console.log(err); + } else { + // 处理请求成功 + console.log(data.Response); + } + }); + } +}; diff --git a/demo/ciDemo.js b/demo/ciDemo.js deleted file mode 100644 index 00fa412..0000000 --- a/demo/ciDemo.js +++ /dev/null @@ -1,3308 +0,0 @@ -var TaskId; - -function request() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '1.png', - Method: 'POST', - Action: 'image_process', - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/thumbnail/200x/"}]}', - }, - }, - function (err, data) { - logger.log('request:', err || data); - }, - ); -} - -function getImageUrl() { - // 生成带图片处理参数的文件签名URL,过期时间设置为 30 分钟。 - cos.getObjectUrl( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '02.png', - Query: { 'imageMogr2/thumbnail/200x/': '' }, - Expires: 1800, - Sign: true, - }, - function (err, data) { - logger.log('getObjectUrl with sign: ', err || (data && data.Url)); - }, - ); - - // 生成带图片处理参数的文件URL,不带签名。 - cos.getObjectUrl( - { - Bucket: config.Bucket, - Region: config.Region, - Key: 'photo.png', - QueryString: `imageMogr2/thumbnail/200x/`, - Sign: false, - }, - function (err, data) { - logger.log('getObjectUrl without sign: ', err || (data && data.Url)); - }, - ); -} - -// 查询已经开通数据万象功能的存储桶 -function describeMediaBuckets() { - const host = 'ci.' + config.Region + '.myqcloud.com'; - const url = 'https://' + host + '/mediabucket'; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: 'mediabucket', // 固定值,必须 - Url: url, - Query: { - pageNumber: '1', // 第几页,非必须 - pageSize: '10', // 每页个数,非必须 - // regions: 'ap-chengdu', // 地域信息,例如'ap-beijing',支持多个值用逗号分隔如'ap-shanghai,ap-beijing',非必须 - // bucketNames: 'test-1250000000', // 存储桶名称,精确搜索,例如'test-1250000000',支持多个值用逗号分隔如'test1-1250000000,test2-1250000000',非必须 - // bucketName: 'test', //存储桶名称前缀,前缀搜索,例如'test',支持多个值用逗号分隔如'test1,test2',非必须 - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 搜索媒体处理队列 -function searchMediaQueue() { - const key = `queue`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 队列 ID,支持搜索多个,以“,”符号分割字符串,最多填10个。;是否必传:否 - queueIds: '', - // 1. Active 表示队列内的作业会被媒体处理服务调度执行2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否 - state: 'Active', - // 1. CateAll:所有类型2. Transcoding:媒体处理队列3. SpeedTranscoding:媒体处理倍速转码队列4. 默认为 Transcoding;是否必传:否 - category: 'CateAll', - // 第几页,默认值1;是否必传:否 - pageNumber: '', - // 每页个数,默认值10;是否必传:否 - pageSize: '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 更新媒体处理队列 -function updateMediaQueue() { - const queueId = 'xxx'; // queueId: 要更新的队列id; - const key = `queue/${queueId}`; // queueId: 要更新的队列id; - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 队列名称,仅支持中文、英文、数字、_、-和*,长度不超过 128;限制:无;;是否必传:是 - Name: 'queue-1', - // 1. Active 表示队列内的作业会被媒体处理服务调度执行2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;限制:无;;是否必传:是 - State: 'Paused', - // 回调配置;限制:无;;是否必传:是 - NotifyConfig: { - // 回调开关OffOn;限制:Off;;是否必传:否 - State: 'Off', - // 回调事件TaskFinish:任务完成WorkflowFinish:工作流完成;限制:无;;是否必传:否 - Event: 'TaskFinish', - // 回调格式XMLJSON;限制:XML;;是否必传:否 - ResultFormat: '', - // 回调类型UrlTDMQ;限制:无;;是否必传:否 - Type: 'Url', - // 回调地址,不能为内网地址。;限制:无;;是否必传:否 - Url: '', - // TDMQ 使用模式Topic:主题订阅Queue: 队列服务;限制:无;;是否必传:否 - MqMode: '', - // TDMQ 所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);限制:无;;是否必传:否 - MqRegion: '', - // TDMQ 主题名称;限制:无;;是否必传:否 - MqName: '', - }, - }, - }); - - cos.request( - { - Method: 'PUT', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 获取媒体文件信息同步请求 -function getMediaInfo() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: 'test.mp4', - Query: { - 'ci-process': 'videoinfo', // 固定值,必须 - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -function postMediaInfo() { - const key = `jobs`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:MediaInfo;是否必传:是 - Tag: 'MediaInfo', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 获取媒体文件某个时间的截图 -function getSnapshot() { - const key = 'test.mp4'; // ObjectKey: 存在cos的媒体文件路径,比如test.mp4 - const host = `${config.Bucket}.cos.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 操作类型,固定使用 snapshot;是否必传:是 - 'ci-process': 'snapshot', - // 截图的时间点,单位为秒;是否必传:是 - time: 1, - // 截图的宽。默认为0;是否必传:否 - width: 0, - // 截图的高。默认为0;是否必传:否 - height: 0, - // 截图的格式,支持 jpg 和 png,默认 jpg;是否必传:否 - format: 'jpg', - // 图片旋转方式auto:按视频旋转信息进行自动���转off:不旋转默认值为 auto;是否必传:否 - rotate: 'auto', - // 截帧方式keyframe:截取指定时间点之前的最近的一个关键帧exactframe:截取指定时间点的帧默认值为 exactframe;是否必传:否 - mode: 'exactframe', - }, - RawBody: true, - // 可选返回文件格式为blob - DataType: 'blob', - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Body); - } - }, - ); -} -// 获取私m3u8 -function getPrivateM3U8() { - const key = '视频/peachtest.mp4.m3u8'; // ObjectKey: 存在cos的媒体文件路径,比如test.mp4 - const host = `${config.Bucket}.cos.${config.Region}.myqcloud.com`; - - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - // Url: url, // 请求的url,必须 - Query: { - // 操作类型,固定使用 pm3u8;是否必传:是 - 'ci-process': 'pm3u8', - // 私有 ts 资源 url 下载凭证的相对有效期,单位为秒,范围为[3600, 43200];是否必传:是 - expires: 3600, - }, - RawBody: true, // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Body); - } - }, - ); -} - -// 音视频转码 -function postTranscode() { - const key = `jobs`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的Tag:Transcode;是否必传:是 - Tag: 'Transcode', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // TemplateId与Transcode 二选一传入 - // 转码模板 ID;是否必传:否,可通过控制台获取 - TemplateId: 'xxx', - // 转码模板参数;是否必传:否 - // Transcode: {}, - // 水印模板 ID,可以传多个水印模板 ID,最多传3个;是否必传:否 - // WatermarkTemplateId: '', - // 去除水印参数, H265、AV1编码暂不支持该参数;是否必传:否 - // RemoveWatermark: { - // // 距离左上角原点 x 偏移,范围为[1, 4096];是否必传:是 - // Dx: '', - // // 距离左上角原点 y 偏移,范围为[1, 4096];是否必传:是 - // Dy: '', - // // 宽,范围为[1, 4096];是否必传:是 - // Width: '', - // // 高,范围为[1, 4096];是否必传:是 - // Height: '', - // }, - // 字幕参数,H265、AV1编码和非mkv封装暂不支持该参数;是否必传:否 - // Subtitles: { - // // 字幕参数;是否必传:是 - // Subtitle: { - // // 同 bucket 的字幕地址,需要 encode;是否必传:是 - // Url: '', - // }, - // }, - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/test.mp4', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务所在的队列类型,限制为 SpeedTranscoding, 表示为开启倍速转码;是否必传:否 - QueueType: 'SpeedTranscoding', - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 极速高清 -function postExtremeHD() { - const key = `jobs`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的Tag:Transcode;是否必传:是 - Tag: 'Transcode', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 极速高清转码模板 ID;是否必传:否,可通过控制台获取 - TemplateId: 't0fc3f4eb75596459eb42b5fa52aa6e511', - // 水印模板 ID,可以传多个水印模板 ID,最多传3个;是否必传:否 - // WatermarkTemplateId: '', - // 去除水印参数, H265、AV1编码暂不支持该参数;是否必传:否 - // RemoveWatermark: { - // // 距离左上角原点 x 偏移,范围为[1, 4096];是否必传:是 - // Dx: '', - // // 距离左上角原点 y 偏移,范围为[1, 4096];是否必传:是 - // Dy: '', - // // 宽,范围为[1, 4096];是否必传:是 - // Width: '', - // // 高,范围为[1, 4096];是否必传:是 - // Height: '', - // }, - // 字幕参数,H265、AV1编码和非mkv封装暂不支持该参数;是否必传:否 - // Subtitles: { - // // 字幕参数;是否必传:是 - // Subtitle: { - // // 同 bucket 的字幕地址,需要 encode;是否必传:是 - // Url: '', - // }, - // }, - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/test.mp4', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 音视频转封装 -function postSegment() { - const key = `jobs`; // 固定值,必须 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:Segment;是否必传:是 - Tag: 'Segment', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 转封装参数;是否必传:是 - Segment: { - // 封装格式,支持 aac、mp3、flac、mp4、ts、mkv、avi、hls、m3u8;是否必传:是 - Format: 'mp4', - // 转封装时长单位:秒不小于5的整数不设置 Duration 时,表示只转封装格式不分段;是否必传:否 - Duration: '5', - // 处理的流编号,对应媒体信息中的 Response.MediaInfo.Stream.Video.Index 和 Response.MediaInfo.Stream.Audio.Index,详见 获取媒体信息接口;是否必传:否 - // TranscodeIndex: '', - // // hls 加密配置,当封装格式为 hls 和 m3u8 时生效;是否必传:否 - // HlsEncrypt: { - // // 是否开启 HLS 加密,取值 true/false,默认值 false;是否必传:否 - // IsHlsEncrypt: '', - // // HLS 加密的 key,当 IsHlsEncrypt 为 true 时,该参数才有意义;是否必传:否 - // UriKey: '', - // }, - // // 开始时间取值范围: [0,视频时长],默认值为0单位为秒支持 float 格式,执行精度精确到毫秒;是否必传:否 - // StartTime: '', - // // 结束时间取值范围:[0, 视频时长],默认值为视频结束时间单位为秒支持 float 格式,执行精度精确到毫秒;是否必传:否 - // EndTime: '', - }, - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/out-${number}', - }, - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交音视频拼接任务 -function postConcat() { - const key = `jobs`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:Concat;是否必传:是 - Tag: 'Concat', - // 待操作的文件信息;是否必传:否 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // TemplateId与ConcatTemplate 二选一传入 - // 转码模板 ID;是否必传:否,可通过控制台获取 - TemplateId: 'xxx', - // 拼接参数;是否必传:否 - // ConcatTemplate: { - // // 拼接节点,支持多个文件,按照文件顺序拼接;限制:否;;是否必传:否 - // ConcatFragment: { - // // 同 bucket 对象地址,需要 urlEncode;限制:是;;是否必传:否 - // Url: '', - // // 拼接对象的索引位置,大于等于0的整数;限制:否;;是否必传:否 - // FragmentIndex: '', - // // 开始时间[0, 视频时长]单位为秒 当Request.Operation.ConcatTemplate.DirectConcat 为 true 时不生效;限制:否;;是否必传:否 - // StartTime: '', - // // 结束时间[0, 视频时长]单位为秒 当 Request.Operation.ConcatTemplate.DirectConcat 为 true 时不生效;限制:否;;是否必传:否 - // EndTime: '', - // }, - // // Input 节点位于 ConcatFragment 序列索引,不能大于 ConcatFragment 长度;限制:否;;是否必传:否 - // Index: '', - // // 简单拼接方式(不转码直接拼接),其他的视频和音频参数失效,取值 true/false;限制:否;;是否必传:否 - // DirectConcat: '', - // }, - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/out.mp4', - }, - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交视频转动图 -function postAnimation() { - const key = `jobs`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:Animation;是否必传:是 - Tag: 'Animation', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // TemplateId与Animation 二选一传入 - // 转码模板 ID;是否必传:否,可通过控制台获取 - TemplateId: 'xxx', - // 视频转动图参数;是否必传:否 - // Animation: {}, - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/out.${ext}', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交视频截帧任务 -function postSnapshot() { - const key = `jobs`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:Snapshot;是否必传:是 - Tag: 'Snapshot', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 截帧模板 ID;是否必传:否,可通过控制台获取 - TemplateId: 'xxx', - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/snapshot-${number}.jpg', - // 雪碧图的名字。当有多个输出文件时必须包含 ${number} 通配符。仅支持 jpg 格式;是否必传:否 - SpriteObject: 'output/sprite-${number}.jpg', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交精彩集锦任务 -function postVideoMontage() { - const key = `jobs`; // 固定值,必须 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:VideoMontage;是否必传:是 - Tag: 'VideoMontage', - // 待操作的文件信息;是否必传:是 - Input: { - // Object与url二选一传递 - // 同存储桶文件路径;是否必传:否 - Object: 'test.mp4', - // 支持公网下载的Url;是否必传:否 - // Url: '', - }, - // 操作规则;是否必传:是 - Operation: { - // 模板 ID;是否必传:否,可通过控制台获取 - TemplateId: 'xxx', - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/out.mp4', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交视频标签任务 -function postVideoTag() { - const key = `jobs`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:VideoTag;是否必传:是 - Tag: 'VideoTag', - // 待操作的文件信息;是否必传:是 - Input: { - // 执行视频标签任务的文件路径,目前支持 mp4、avi、mkv、wmv、rmvb、flv、mov 封装格式,视频时长超过30min的视频请 提交工单 处理;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 任务参数;是否必传:是 - VideoTag: { - // 场景类型,可选择视频标签的运用场景,不同的运用场景使用的算法、输入输出等都会有所差异。当前版本只支持 Stream 场景;是否必传:是 - Scenario: 'Stream', - }, - // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - // 透传用户信息;是否必传:否 - UserData: '', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交智能封面任务 -function postSmartCover() { - const key = `jobs`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:SmartCover;是否必传:是 - Tag: 'SmartCover', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 智能封面模板id;是否必传:否,可通过控制台获取 - TemplateId: 'xxx', - // 结果输出配置;是否必传:是 - Output: { - // 存储桶的地域;是否必传:是 - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/smartcover-${number}.jpg', - }, - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为 0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 添加数字水印任务 -function postDigitalWatermark() { - const key = `jobs`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:DigitalWatermark;是否必传:是 - Tag: 'DigitalWatermark', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - DigitalWatermark: { - Message: '123456', // 嵌入数字水印的水印信息;是否必传:是 - Type: 'Text', // 数字水印类型;是否必传:是 - Version: 'V1', // 数字水印版本;是否必传:是 - IgnoreError: true, // 当添加水印失败是否忽略错误继续执行任务;是否必传:是 - }, - // 结果输出配置;是否必传:是 - Output: { - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/output.mp4', - }, - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提取数字水印任务 -function postExtractDigitalWatermark() { - const key = `jobs`; // 固定值,必须 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:ExtractDigitalWatermark;是否必传:是 - Tag: 'ExtractDigitalWatermark', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: 'test.mp4', - }, - // 操作规则;是否必传:是 - Operation: { - // 提取数字水印配置;是否必传:是 - ExtractDigitalWatermark: { - // 水印类型;限制:Text;;是否必传:是 - Type: 'Text', - // 水印版本;限制:V1;;是否必传:是 - Version: 'V1', - }, - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - // 透传用户信息,可打印的 ASCII 码,长度不超过1024;是否必传:否 - UserData: '', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 提交图片异步处理任务 -function postPicProcess() { - const key = `jobs`; // 固定值 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - // 创建任务的 Tag:PicProcess;是否必传:是 - Tag: 'PicProcess', - // 待操作的文件信息;是否必传:是 - Input: { - // 文件路径;是否必传:是 - Object: '1.jpg', - }, - // 操作规则;是否必传:是 - Operation: { - // 模板 ID;是否必传:否 - TemplateId: 't1edc04f224ca64782840022cdc8fc3aa4', - // PicProcess: {}, - // 结果输出配置;是否必传:是 - Output: { - Region: config.Region, - // 存储结果的存储桶;是否必传:是 - Bucket: config.Bucket, - // 输出结果的文件名;是否必传:是 - Object: 'output/output.jpg', - }, - // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024;是否必传:否 - UserData: '', - // 任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0;是否必传:否 - JobLevel: '0', - }, - // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式;是否必传:否 - CallBackFormat: '', - // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型;是否必传:否 - CallBackType: 'Url', - // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调;是否必传:否 - CallBack: '', - }, - }); - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Body: body, // 请求体参数,必须 - ContentType: 'application/xml', // 固定值,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data); - } - }, - ); -} - -// 图片同步审核 -function getImageAuditing() { - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '1.png', - Query: { - 'ci-process': 'sensitive-content-recognition', // 固定值,必须 - 'biz-type': '', // 审核类型,非必须 - 'detect-url': '', // 审核任意公网可访问的图片链接,非必须 - interval: 5, // 审核 GIF 动图时,每隔interval帧截取一帧,非必须 - 'max-frames': 5, // 审核 GIF 动图时,最大截帧数,非必须 - 'large-image-detect': '0', // 是否需要压缩图片后再审核,非必须 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片批量审核 -function postImagesAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/image/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: [ - { - Object: '1.png', - }, - { - Object: '6.png', - }, - ], - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: 'image/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询图片审核任务结果 -function getImageAuditingResult() { - var jobId = 'si8263213daf3711eca0d1525400d88xxx'; // jobId可以通过图片批量审核返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/image/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/image/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 反馈处理结果 -function reportBadCase() { - const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - const key = 'report/badcase'; - const url = `https://${host}/${key}`; - const body = COS.util.json2xml({ - Request: { - ContentType: 2, - Url: 'https://example.com/desample_photo.jpg', - Label: 'Porn', - SuggestedLabel: 'Normal', - // JobId: '', - // ModerationTime: '', - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: key, - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交视频审核任务 -function postVideoAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: '1.mp4', - }, - Conf: { - BizType: '', - Snapshot: { - Count: 1000, // 视频截帧数量 - }, - DetectContent: 1, // 是否审核视频声音,0-只审核视频不审核声音;1-审核视频+声音 - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/video/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询视频审核任务结果 -function getVideoAuditingResult() { - var jobId = 'av14d9ca15af3a11eca0d6525400d88xxx'; // jobId可以通过提交视频审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/video/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交音频审核任务 -function postAudioAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/audio/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: '1.mp3', - }, - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/audio/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询音频审核任务结果 -function getAudioAuditingResult() { - var jobId = 'sa0c28d41daff411ecb23352540078cxxx'; // jobId可以通过提交音频审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/audio/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/audio/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文本审核任务 -function postTextAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/text/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - // Content: COS.util.encodeBase64('乳沟'), // 经过base64编码过的文本”乳沟“,查询结果同步返回 - Object: '中文.txt', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 - }, - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/text/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文本审核任务结果 -function getTextAuditingResult() { - var jobId = 'st8d88c664aff511ecb23352540078cxxx'; // jobId可以通过提交文本审核任务返回(Input传入Object) - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/text/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/text/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文档审核任务 -function postDocumentAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/document/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: 'test.xlsx', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 - }, - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/document/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文档审核任务结果 -function getDocumentAuditingResult() { - var jobId = 'sd7815c21caff611eca12f525400d88xxx'; // jobId可以通过提交文档审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/document/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/document/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交网页审核任务 -function postWebpageAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/webpage/auditing'; - var body = COS.util.json2xml({ - Request: { - Input: { - Url: 'https://cloud.tencent.com/', // 存在cos里的资源,审核结果异步返回,可以调用查询文本审核结果api查询 - }, - Conf: { - BizType: '', - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/webpage/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询网页审核任务结果 -function getWebpageAuditingResult() { - var jobId = 'shce868019aff611ecb1155254009a4xxx'; // jobId可以通过提交网页审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/webpage/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/webpage/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交直播审核任务 -function postLiveAuditing() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing'; - var body = COS.util.json2xml({ - Request: { - Type: 'live_video', - Input: { - Url: 'rtmp://example.com/live/123', // 需要审核的直播流播放地址 - // DataId: '', - // UserInfo: {}, - }, - Conf: { - BizType: '766d07a7af937c26216c51db29793ea6', - // Callback: 'https://callback.com', // 回调地址,非必须 - // CallbackType: 1, // 回调片段类型,非必须 - }, - }, - }); - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: '/video/auditing', - ContentType: 'application/xml', - Body: body, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 取消直播审核 -function cancelLiveAuditing() { - const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - const jobId = 'av8088af71359c11eeb17c525400941xxx'; - const key = `video/cancel_auditing/${jobId}`; - const url = `https://${host}/${key}`; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'POST', - Url: url, - Key: key, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询直播审核任务结果 -function getLiveAuditingResult() { - var jobId = 'av0ca69557bd6111ed904c5254009411xx'; // jobId可以通过提交直播审核任务返回 - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host + '/video/auditing/' + jobId; - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Method: 'GET', - Key: '/video/auditing/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询已经开通文档预览的存储桶 -function describeDocProcessBuckets() { - var host = 'ci.' + config.Region + '.myqcloud.com/docbucket'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'docbucket', - Url: url, - Query: { - // regions: '', // 非必须,地域信息,以“,”分隔字符串,支持 All、ap-shanghai、ap-beijing - // bucketNames: '', // 非必须,存储桶名称,以“,”分隔,支持多个存储桶,精确搜索 - // bucketName: '', // 非必须,存储桶名称前缀,前缀搜索 - // pageNumber: 1, // 非必须,第几页 - // pageSize: 10, // 非必须,每页个数 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 文档转码同步请求 -function getDocPreview() { - cos.getObjectUrl( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: '1/文档.docx', - Query: { - 'ci-process': 'doc-preview', // 必须,数据万象处理能力,文档预览固定为 doc-preview - srcType: 'docx', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 - // page: '', // 非必须,需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图 - // dstType: '', // 非必须,转换输出目标文件类型 - }, - DataType: 'blob', - }, - function (err, data) { - if (err) { - console.log(err); - } else { - // Body为转码后的内容 可展示在img里 比如 - var body = data.Body; - // const url = URL.createObjectURL(body); - // const img = document.getElementById('image'); - // img.src = url; - // 获取总页数(需要在跨域配置的Expose-Headers配置需要暴露出的头部 比如下方的X-Total-Page) - // 跨域配置可参考文档 https://cloud.tencent.com/document/product/436/13318 - var totalPage = data.headers['X-Total-Page']; - } - }, - ); -} - -// 查询文档转码队列 -function describeDocProcessQueues() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/docqueue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'docqueue', - Url: url, - Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - // state: '', // 非必须,1=Active,2=Paused - // pageNumber: 1, // 非必须,第几页 - // pageSize: 2, // 非必须,每页个数 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新文档预览队列 -function updateDocProcessQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 - var queueId = 'pa2e2c3d3fae042de909cafc16f1d801b'; // 替换成自己的队列id - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/docqueue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'queue-doc-process-1', // 替换成自己的队列name - QueueID: queueId, - State: 'Active', - NotifyConfig: { - State: 'Off', - }, - }, - }); - cos.request( - { - Method: 'PUT', - Key: 'docqueue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文档转码任务 -function createDocProcessJobs() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'DocProcess', - Input: { - Object: '1/文档.docx', // 存在cos里的路径 - }, - Operation: { - DocProcess: { - TgtType: 'jpg', - }, - Output: { - Bucket: config.Bucket, - Region: config.Region, - Object: '1/文档转码_${Number}.jpg', // 转码后存到cos的路径 - }, - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'doc_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询指定的文档预览任务 -function describeDocProcessJob() { - var jobId = 'd87fbabd07b8611ed974b3f4b40648xxx'; // 替换成自己的jogId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'doc_jobs/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 拉取符合条件的文档预览任务 -function describeDocProcessJobs() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/doc_jobs'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'doc_jobs', - Url: url, - Query: { - tag: 'DocProcess', - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 文档转 HTML -function getDocHtmlUrl() { - cos.getObjectUrl( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: '1/文档.docx', - Query: { - 'ci-process': 'doc-preview', // 必须,数据万象处理能力,文档预览固定为 doc-preview - // srcType: '', // 非必须,源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值 - // page: '', // 非必须,需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图 - dstType: 'html', // 非必须,转换输出目标文件类型 - }, - }, - function (err, data) { - if (err) { - console.log(err); - } else { - // 使用浏览器打开url即可预览 - var url = data.Url; - console.log(url); - } - }, - ); -} - -// 识别图片标签 -function getImageLabel() { - var key = '1/素材.jpeg'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - Query: { - 'ci-process': 'detect-label', - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 二维码识别(上传时识别) -function identifyQrcode_put() { - util.selectLocalFile(function (files) { - var file = files && files[0]; - if (!file) return; - cos.putObject( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: '1/上传二维码.png', - Body: file, - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': '{"is_pic_info": 1, "rules": [{"fileid":"test.jpg","rule":" QRcode/cover/0"}]}', - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('CIExample1:', err || data); - }, - ); - }); -} - -// 二维码识别(下载时识别) -function identifyQrcode_get() { - var key = '1/二维码图片.png'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - Query: { - 'ci-process': 'QRcode', - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 二维码生成 -function generateQrcode() { - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: '', - Url: url, - Query: { - 'ci-process': 'qrcode-generate', // 必须,对象存储处理能力,二维码生成参数为 qrcode-generate - 'qrcode-content': '二维码文案', // 必须,可识别的二维码文本信息 - // mode: 0, // 非必须,生成的二维码类型,可选值:0或1。0为二维码,1为条形码,默认值为0 - width: 200, //必须,指定生成的二维码或条形码的宽度,高度会进行等比压缩 - }, - }, - function (err, data) { - if (!err) { - // 获得二维码base64 - var imgBase64 = data.Response.ResultImage; - // 比如可拼接前缀直接展示在img里 - // document.querySelector('#img').src = 'data:image/jpg;base64,' + imgBase64; - } - }, - ); -} - -// 图片文字识别 -function ocr() { - var key = '1/素材.jpeg'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - Query: { - 'ci-process': 'OCR', // 必须,数据万象处理能力,图片文字识别固定为 OCR - // type: '', // 非必须,OCR 的识别类型 - // 'language-type': '', // 非必须,type 值为 general 时有效,表示识别语言类型 - // ispdf: false, // 非必须,type 值为 general、fast 时有效,表示是否开启 PDF 识别 - // 'pdf-pagenumber': '', // 非必须,type 值为 general、fast 时有效,表示需要识别的 PDF 页面的对应页码 - // isword: false, // 非必须,type 值为 general、accurate 时有效,表示识别后是否需要返回单字信息 - // 'enable-word-polygon': false, // 非必须,type 值为 handwriting 时有效,表示是否开启单字的四点定位坐标输出 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文件压缩任务 -function postFileCompress() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'FileCompress', // 必须 - Operation: { - FileCompressConfig: { - Flatten: '0', // 文件打包时,是否需要去除源文件已有的目录结构.0:不需要;1:需要 - Format: 'zip', // 打包压缩的类型,有效值:zip、tar、tar.gz - // UrlList、Prefix、Key 三者仅能选择一个,不能都为空,也不会同时生效 - // UrlList: '', // 索引文件的对象地址 - Prefix: 'testCompress/', // 目录前缀 - // Key: [], // 支持对存储桶中的多个文件进行打包,个数不能超过 1000, 总大小不超过50G,否则会导致任务失败 - }, - Output: { - Bucket: config.Bucket, // 保存压缩后文件的存储桶 - Region: config.Region, // 保存压缩后文件的存储桶地域 - Object: 'testCompress/compressed.zip', // 压缩后文件的文件名 - }, - UserData: '', - }, - // QueueId: '', // 任务所在的队列 ID - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - // CallBackFormat: 'JSON', // 任务回调格式 - // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文件压缩任务结果 -function getFileCompress() { - var jobId = 'faf1d2774a13911ed88a65b0c303ae7xx'; // 提交文件压缩任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_jobs/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交文件解压任务 -function postFileUnCompress() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'FileUncompress', // 必须 - Input: { - Object: 'testCompress/compressed.zip', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - FileUncompressConfig: { - Prefix: '', // 指定解压后输出文件的前缀,不填则默认保存在存储桶根路径 - PrefixReplaced: '0', // 指定解压后的文件路径是否需要替换前缀,默认0 - }, - Output: { - Bucket: config.Bucket, // 保存解压后文件的存储桶 - Region: config.Region, // 保存解压后文件的存储桶地域 - }, - }, - // QueueId: '', // 任务所在的队列 ID - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - // CallBackFormat: 'JSON', // 任务回调格式 - // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文件解压任务结果 -function getFileUnCompress() { - var jobId = 'fe7b0fa34a13911eda186254bb8f3aaxx'; // 提交文件解压任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_jobs/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交哈希值计算任务 -function postFileHash() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'FileHashCode', // 必须 - Input: { - Object: 'test/1.pdf', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - FileHashCodeConfig: { - Type: 'MD5', // 哈希值的算法类型,有效值:MD5、SHA1、SHA256 - AddToHeader: 'false', // 是否将计算得到的哈希值添加至文件自定义header, 有效值:true、false,默认值为 false。 - }, - // UserData: '', // 透传用户信息, 可打印的 ASCII 码, 长度不超过1024 - }, - // QueueId: '', // 任务所在的队列 ID - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - // CallBackFormat: 'JSON', // 任务回调格式 - // CallBackType: 'Url', // 任务回调类型,Url 或 TDMQ,默认 Url - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询哈希值计算任务结果 -function getFileHashResult() { - var jobId = 'f3addcbd0a13811ed9b4ff5338d756fxx'; // 提交文件哈希值计算任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_jobs/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_jobs/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交病毒检测任务 -function postVirusDetect() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/virus/detect'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Input: { - Object: 'test/1.png', // 文件名,取值为文件在当前存储桶中的完整名称,与Url参数二选一 - // Url: 'http://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/virus.doc', // 病毒文件的链接地址,与Object参数二选一 - }, - Conf: { - DetectType: 'Virus', // 检测的病毒类型,当前固定为:Virus - // CallBack: 'http://callback.demo.com', // 任务回调的地址 - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'virus/detect', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询病毒检测任务结果 -function getVirusDetectResult() { - var jobId = 'ssdb2dab23bcdb11ed9efb5254009411xx'; // 提交病毒检测任务后会返回当前任务的jobId - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/virus/detect/' + jobId; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'virus/detect/' + jobId, - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交音频降噪任务 -function postNoiseReduction() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'NoiseReduction', - Input: { - Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out.mp3', // 输出的文件Key - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交人声分离任务 -function postVoiceSeparate() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'VoiceSeparate', - Input: { - Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称 - }, - Operation: { - // VoiceSeparate: {}, // 指定转码模板参数,非必须 - TemplateId: 'xxx', // 指定的模板 ID,必须 - // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out/background.mp3', // 输出的文件Key,背景音结果文件名,不能与 AuObject 同时为空 - AuObject: 'ci/out/audio.mp3', - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交语音合成任务 -function postTts() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'Tts', - Operation: { - // VoiceSeparate: {}, // 指定转码模板参数,非必须 - TemplateId: 'xxx', // 指定的模板 ID,必须 - // JobLevel: 0, // 任务优先级,级别限制:0 、1 、2。级别越大任务优先级越高,默认为0,非必须 - TtsConfig: { - InputType: 'Text', - Input: '床前明月光,疑是地上霜', - }, - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out/tts.mp3', // 输出的文件Key - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 提交语音识别任务 -function postSpeechRecognition() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asr_jobs'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Tag: 'SpeechRecognition', - Input: { - Object: 'ci/music.mp3', // 文件名,取值为文件在当前存储桶中的完整名称,与Url参数二选一 - // Url: 'http://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/music.mp3', // 病毒文件的链接地址,与Object参数二选一 - }, - Operation: { - SpeechRecognition: { - EngineModelType: '16k_zh_video', // 引擎模型类型 - ChannelNum: 1, // 语音声道数 - ResTextFormat: 0, // 识别结果返回形式 - FilterDirty: 1, // 是否过滤脏词(目前支持中文普通话引擎) - FilterModal: 1, // 是否过语气词(目前支持中文普通话引擎) - ConvertNumMode: 0, // 是否进行阿拉伯数字智能转换(目前支持中文普通话引擎) - }, - Output: { - Bucket: config.Bucket, // 输出的存储桶 - Region: config.Region, // 输出的存储桶的地域 - Object: 'ci/out/SpeechRecognition.mp3', // 输出的文件Key - }, - }, - // QueueId: '', // 任务所在的队列 ID,非必须 - // CallBackFormat: '', // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式,非必须 - // CallBackType: '', // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型,非必须 - // CallBack: '', // 任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调,非必须 - // CallBackMqConfig: '', // 任务回调 TDMQ 配置,当 CallBackType 为 TDMQ 时必填,非必须 - }, - }); - cos.request( - { - Method: 'POST', - Key: 'asr_jobs', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询语音识别队列 -function getAsrQueue() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'asrqueue', - Url: url, - Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - // state: '', // 非必须,1=Active,2=Paused - // pageNumber: 1, // 非必须,第几页 - // pageSize: 2, // 非必须,每页个数 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新语音识别队列 -function putAsrQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 - var queueId = 'pcc77499e85c311edb9865254008618d9'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'queue-doc-process-1', - QueueID: queueId, - State: 'Paused', - NotifyConfig: { - // Url: '', - // Type: 'Url', - // Event: '', - State: 'Off', - }, - }, - }); - cos.request( - { - Method: 'PUT', - Key: 'asrqueue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询语音识别开通状态 -function getAsrBucket() { - var host = 'ci.' + config.Region + '.myqcloud.com/asrbucket'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'asrbucket', - Url: url, - Query: { - // regions: '', // 非必须,地域信息,以“,”分隔字符串,支持 All、ap-shanghai、ap-beijing - // bucketNames: '', // 非必须,存储桶名称,以“,”分隔,支持多个存储桶,精确搜索 - // bucketName: '', // 非必须,存储桶名称前缀,前缀搜索 - // pageNumber: 1, // 非必须,第几页 - // pageSize: 10, // 非必须,每页个数 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 获取在线文档预览地址 -function getDocHtmlPreviewUrl() { - var key = 'test.pdf'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - RawBody: true, - Query: { - 'ci-process': 'doc-preview', // 必须,预览固定参数,值为 doc-preview - dstType: 'html', // 必须,预览类型,如需预览生成类型为 html 则填入 html - weboffice_url: 1, // 非必须,是否获取预览链接。填入值为1会返回预览链接和Token信息;填入值为2只返回Token信息;不传会直接预览 - }, - }, - function (err, data) { - // 从响应数据中解析出在线文档预览地址 - let body = {}; - if (data && data.Body) { - body = JSON.parse(data.Body) || {}; - } - if (body && body.PreviewUrl) { - data.PreviewUrl = body.PreviewUrl; - } - logger.log(err || data); - }, - ); -} - -// 开通文件处理服务 -function createFileProcessBucket() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_bucket'; - var url = 'https://' + host; - cos.request( - { - Method: 'POST', - Key: 'file_bucket', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询文件处理队列 -function describeFileProcessQueues() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'file_queue', - Url: url, - Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - state: 'Active', // 非必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响 - pageNumber: 1, // 第几页,默认值1 - pageSize: 10, // 非必须,每页个数,默认值10 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新文件处理队列 -function updateFileProcessQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 - var queueId = 'p6160ada105a7408e95aac015f4bf8xxx'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'My-Queue-file', // 必须,队列名称,长度不超过128 - State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 - NotifyConfig: { - // 必须,回调配置 - State: 'On', // 必须,回调开关,Off/On,默认Off - Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish - ResultFormat: 'XML', // 非必选,回调格式,JSON/XML - Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ - Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 - // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 - // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 - // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'file_queue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 哈希值计算同步请求 -function generateFileHash() { - var key = 'test.pdf'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - Query: { - 'ci-process': 'filehash', // 必须,操作类型,哈希值计算固定为:filehash - type: 'md5', // 必须,支持的哈希算法类型,有效值:md5、sha1、sha256 - // 'addtoheader': false, // 非必须,是否将计算得到的哈希值,自动添加至文件的自定义header,格式为:x-cos-meta-md5/sha1/sha256;有效值:true、false,不填则默认为false。 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片样式 - 增加样式 -function addImageStyle() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - AddStyle: { - StyleName: 'style_name1', // 必须,样式名称 - StyleBody: 'imageMogr2/thumbnail/!50px', // 必须,样式详情 - }, - }); - cos.request( - { - Method: 'PUT', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片样式 - 查询样式 -function describeImageStyles() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - Query: { - 'style-name': 'style_name', // 非必填,样式名称 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 图片样式 - 删除样式 -function deleteImageStyle() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?style'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - DeleteStyle: { - StyleName: 'style_name1', // 必须,样式名称 - }, - }); - cos.request( - { - Method: 'DELETE', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 开通 Guetzli 压缩 -function openImageGuetzli() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; - var url = 'https://' + host; - cos.request( - { - Method: 'PUT', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询 Guetzli 状态 -function describeImageGuetzli() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 关闭 Guetzli 压缩 -function closeImageGuetzli() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?guetzli'; - var url = 'https://' + host; - cos.request( - { - Method: 'DELETE', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 上传时使用图片处理 -function uploadPicOperation() { - util.selectLocalFile(function (files) { - var file = files && files[0]; - if (!file) return; - if (file.type.indexOf('image') < 0) { - logger.error('Please select a photo to upload!'); - return; - } - if (file.size > 1024 * 1024) { - cos.sliceUploadFile( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: file.name, - Body: file, - Headers: { - // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - 'Pic-Operations': JSON.stringify({ - is_pic_info: 1, - rules: [{ fileid: 'desample_photo.jpg', rule: 'imageMogr2/thumbnail/200x/' }], - }), - }, - onTaskReady: function (tid) { - TaskId = tid; - }, - onHashProgress: function (progressData) { - logger.log('onHashProgress', JSON.stringify(progressData)); - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('uploadPicOperation:', err || data); - }, - ); - } else { - cos.putObject( - { - Bucket: config.Bucket, // Bucket 格式:test-1250000000 - Region: config.Region, - Key: file.name, - Body: file, - Headers: { - // 通过 imageMogr2 接口进行 avif 压缩,可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - 'Pic-Operations': - '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/format/avif"}]}', - }, - onTaskReady: function (tid) { - TaskId = tid; - }, - onHashProgress: function (progressData) { - logger.log('onHashProgress', JSON.stringify(progressData)); - }, - onProgress: function (progressData) { - logger.log('onProgress', JSON.stringify(progressData)); - }, - }, - function (err, data) { - logger.log('uploadPicOperation:', err || data); - }, - ); - } - }); -} - -// 对云上数据处理 -function requestPicOperation() { - // 文字水印示例 - const text = '腾讯云万象优图'; - const color = '#3D3D3D'; - // 经过安全base64编码 使用 COS.util.encodeBase64 方法需要sdk版本至少为1.4.18 - const textBase64 = COS.util.encodeBase64(text, true); - const colorBase64 = COS.util.encodeBase64(color, true); - // 生成一个文字水印 - const waterMarkRule = `watermark/2/text/${textBase64}/fill/${colorBase64}/fontsize/20/dissolve/50/gravity/northeast/dx/20/dy/20/batch/1/degree/45`; - const picOperations = JSON.stringify({ - is_pic_info: 1, // 固定 - // fileid 设置和Key相同可实现只保留处理后的图片而不保留原图 - rules: [{ fileid: 'desample_photo.jpg', rule: waterMarkRule }], - }); - - cos.request( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '02.png', - Method: 'GET', - Action: 'exif', - RawBody: true, - // Headers: { - // // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩 - // 'Pic-Operations': picOperations, - // }, - }, - function (err, data) { - const info = JSON.parse(data.Body); - logger.log('requestPicOperation:', err || data); - }, - ); -} - -// 下载时使用图片压缩 -function advanceCompressExample3() { - cos.getObject( - { - Bucket: config.Bucket, - Region: config.Region, - Key: '1.png', - QueryString: `imageMogr2/format/avif`, // 可以根据需要压缩的类型填入不同的压缩格式:webp/heif/tpg/avif/svgc - }, - function (err, data) { - logger.log('advanceCompressExample3:', err || data); - }, - ); -} - -// 异常图片检测 -function createImageInspectJob() { - var key = '1.png'; - var host = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + key; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: key, - Url: url, - RawBody: true, - Query: { - 'ci-process': 'ImageInspect', // 必须,操作类型,异常图片检测固定为:ImageInspect - }, - }, - function (err, data) { - // 从响应数据中解析出异常图片检测结果 - let body = {}; - if (data && data.Body) { - body = JSON.parse(data.Body) || {}; - if (body) { - data.body = body; - } - } - logger.log(err || data); - }, - ); -} - -// 查询图片处理队列 -function describePicProcessQueues() { - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Key: 'picqueue', - Url: url, - Query: { - // queueIds: '', // 非必须,队列 ID,以“,”符号分割字符串 - state: 'Active', // 非必须,1. Active 表示队列内的作业会被媒体处理服务调度执行。2. Paused 表示队列暂停,作业不再会被媒体处理调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 - pageNumber: 1, // 非必须,第几页,默认值1 - pageSize: 10, // 非必须,每页个数,默认值10 - }, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 更新图片处理队列 -function updatePicProcessQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 - var queueId = 'p882d181160d84feca27d9376e17c4xxx'; - var host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue/' + queueId; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Request: { - Name: 'My-Queue-Pic', // 必须,队列名称,长度不超过128 - State: 'Active', // 必须,Active 表示队列内的作业会被调度执行。Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响。 - NotifyConfig: { - // 必须,回调配置 - State: 'On', // 必须,回调开关,Off/On,默认Off - Event: 'TaskFinish', // 回调事件,当 State=On时, 必选。任务完成:TaskFinish;工作流完成:WorkflowFinish - ResultFormat: 'XML', // 非必选,回调格式,JSON/XML - Type: 'Url', // 回调类型,当 State=On时, 必选,Url 或 TDMQ - Url: 'https://www.example.com', // 回调地址,当 State=On, 且Type=Url时, 必选 - // MqMode: 'Off', // TDMQ 使用模式,当 State=On, 且Type=TDMQ时, 必选 - // MqRegion: 'Off', // TDMQ 所属园区,当 State=On, 且Type=TDMQ时, 必选 - // MqName: 'Off', // TDMQ 主题名称,当 State=On, 且Type=TDMQ时, 必选 - }, - }, - }); - cos.request( - { - Method: 'POST', - Key: 'picqueue/' + queueId, - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询防盗链 -function describeRefer() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?hotlink'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 设置防盗链 -function setRefer() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?hotlink'; - var url = 'https://' + host; - var body = COS.util.json2xml({ - Hotlink: { - Url: 'https://www.example.com', // 必须,域名地址 - Type: 'white', // 必须,防盗链类型,white 为白名单,black 为黑名单,off 为关闭。 - }, - }); - cos.request( - { - Method: 'PUT', - Url: url, - Body: body, - ContentType: 'application/xml', - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 开通原图保护 -function openOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; - cos.request( - { - Method: 'PUT', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查询原图保护状态 -function describeOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; - cos.request( - { - Method: 'GET', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 关闭原图保护 -function closeOriginProtect() { - var host = config.Bucket + '.pic.' + config.Region + '.myqcloud.com/?origin-protect'; - var url = 'https://' + host; - cos.request( - { - Method: 'DELETE', - Url: url, - }, - function (err, data) { - logger.log(err || data); - }, - ); -} - -// 查看指定任务 -function getJobDetail() { - const jobId = 'jec8ae8943c2511ee9d4a9b3cb7a5c6xx'; // jobId: 需要查询的jobId; - const key = `jobs/${jobId}`; // jobId: 需要查询的jobId; - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 获取任务列表 -function getJobList() { - const key = `jobs`; // 固定值,必须 - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 拉取该队列 ID 下的任务;是否必传:否 - // queueId: '', - // 拉取队列类型下的任务,和 queueId 不同时生效,同时存在时 queueId 优先;是否必传:否 - // queueType: '', - // 任务的 Tag;是否必传:是,比如查找视频转动图的任务 - tag: 'Animation', - // 触发该任务的工作流ID;是否必传:否 - workflowId: '', - // 触发该任务的存量触发任务ID;是否必传:否 - // inventoryTriggerJobId: '', - // 该任务的输入文件名,暂仅支持精确匹配;是否必传:否 - // inputObject: '', - // Desc 或者 Asc。默认为 Desc;是否必传:否 - // orderByTime: '', - // 请求的上下文,用于翻页。上次返回的值;是否必传:否 - // nextToken: '', - // 拉取的最大任务数。默认为10。最大为100;是否必传:否 - size: 10, - // 拉取该状态的任务,以,分割,支持多状态:All、Submitted、Running、Success、Failed、Pause、Cancel。默认为 All;是否必传:否 - states: 'All', - // 拉取创建时间大于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T00:00:00+0800;是否必传:否 - // startCreationTime: '', - // 拉取创建时间小于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z,示例:2001-01-01T23:59:59+0800;是否必传:否 - // endCreationTime: '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -function getWorkflow() { - const key = `workflow`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 工作流 ID,以,符号分割字符串;是否必传:否 - ids: '', - // 工作流名称;是否必传:否 - name: '', - // 第几页;是否必传:否 - pageNumber: '', - // 每页个数;是否必传:否 - pageSize: '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 获取工作流实例详情 -function getWorkflowexecution() { - const runId = 'ic7af1bf53c2911ee9988525400ae68xx'; - const key = `workflowexecution/${runId}`; // RunId:7; - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'GET', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -// 测试工作流 -function triggerworkflow() { - const key = `triggerworkflow`; // - const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`; - const url = `https://${host}/${key}`; - - cos.request( - { - Method: 'POST', // 固定值,必须 - Key: key, // 必须 - Url: url, // 请求的url,必须 - Query: { - // 需要触发的工作流 ID;是否必传:是 - workflowId: 'wd3330113a4ef4287a4e0a93c36af09xx', - // 需要进行工作流处理的对象名称, 需要进行 url 编码;是否必传:是 - object: 'test.mp4', - // 存量触发任务名称,支持中文、英文、数字、—和_,长度限制128字符,默认为空;是否必传:否 - // name: '', - }, - }, - function (err, data) { - if (err) { - // 处理请求失败 - console.log(err); - } else { - // 处理请求成功 - console.log(data.Response); - } - }, - ); -} - -(function () { - var list = [ - 'header-任务与工作流', - 'getJobDetail', - 'getJobList', - 'getWorkflow', - 'getWorkflowexecution', - 'triggerworkflow', - - 'header-图片处理', - 'getImageUrl', - 'addImageStyle', - 'describeImageStyles', - 'deleteImageStyle', - 'openImageGuetzli', - 'describeImageGuetzli', - 'closeImageGuetzli', - 'uploadPicOperation', - 'requestPicOperation', - 'advanceCompressExample3', - 'createImageInspectJob', - 'describePicProcessQueues', - 'updatePicProcessQueue', - 'openOriginProtect', - 'describeOriginProtect', - 'closeOriginProtect', - - 'header-媒体处理', - 'describeMediaBuckets', - 'searchMediaQueue', - 'updateMediaQueue', - 'getMediaInfo', - 'postMediaInfo', - 'getSnapshot', - 'postSnapshot', - 'getPrivateM3U8', - 'postTranscode', - 'postExtremeHD', - 'postSegment', - 'postConcat', - 'postAnimation', - 'postVideoMontage', - 'postVideoTag', - 'postSmartCover', - 'postDigitalWatermark', - 'postExtractDigitalWatermark', - 'postPicProcess', - - 'header-内容审核', - 'getImageAuditing', - 'postImagesAuditing', - 'getImageAuditingResult', - 'reportBadCase', - 'postVideoAuditing', - 'getVideoAuditingResult', - 'postAudioAuditing', - 'getAudioAuditingResult', - 'postTextAuditing', - 'getTextAuditingResult', - 'postDocumentAuditing', - 'getDocumentAuditingResult', - 'postWebpageAuditing', - 'getWebpageAuditingResult', - 'postLiveAuditing', - 'getLiveAuditingResult', - 'cancelLiveAuditing', - - 'header-文档预览', - 'describeDocProcessBuckets', - 'getDocPreview', - 'describeDocProcessQueues', - 'updateDocProcessQueue', - 'createDocProcessJobs', - 'describeDocProcessJob', - 'describeDocProcessJobs', - 'getDocHtmlUrl', - 'getDocHtmlPreviewUrl', - - 'header-AI识别', - 'getImageLabel', - 'identifyQrcode_put', - 'identifyQrcode_get', - 'generateQrcode', - 'ocr', - - 'header-文件处理', - 'postFileCompress', - 'getFileCompress', - 'postFileUnCompress', - 'getFileUnCompress', - 'postFileHash', - 'getFileHashResult', - 'createFileProcessBucket', - 'describeFileProcessQueues', - 'updateFileProcessQueue', - 'generateFileHash', - - 'header-病毒检测', - 'postVirusDetect', - 'getVirusDetectResult', - - 'header-智能语音', - 'postNoiseReduction', - 'postVoiceSeparate', - 'postTts', - 'postSpeechRecognition', - 'getAsrQueue', - 'putAsrQueue', - 'getAsrBucket', - - 'header-防盗链', - 'describeRefer', - 'setRefer', - ]; - var labelMap = { - putObject: '简单上传', - putObject_base64ToBlob: '简单上传:base64转blob', - appendObject: '追加上传', - appendObject_continue: '查询position并追加上传', - uploadFile: '高级上传', - sliceUploadFile: '分片上传', - sliceCopyFile: '分片复制', - uploadFiles: '批量上传文件', - selectFileToUpload: '上传本地文件', - uploadFolder: '上传文件夹', - uploadToFolder: '上传到指定文件夹', - request: '通用请求接口', - listFolder: '列出文件夹', - deleteFolder: '删除文件夹(按前缀批量删除)', - getImageUrl: '生成带图片处理参数的签名 URL', - - getJobDetail: '查询指定任务', - getJobList: '获取任务列表', - getWorkflow: '查询工作流', - getWorkflowexecution: '获取工作流实例详情', - triggerworkflow: '测试工作流', - - describeMediaBuckets: '查询媒体处理开通情况', - searchMediaQueue: '搜索媒体处理队列', - updateMediaQueue: '更新媒体处理队列', - getMediaInfo: '获取媒体信息同步请求', - postMediaInfo: '获取媒体信息异步任务', - getSnapshot: '获取媒体文件某个时间的截图', - getPrivateM3U8: '获取私有m3u8', - postTranscode: '提交音视频转码', - postExtremeHD: '提交极速高清转码', - postSegment: '提交音视频转封装', - postConcat: '提交音视频拼接任务', - postAnimation: '提交视频转动图任务', - postVideoMontage: '提交精彩集锦任务', - postVideoTag: '提交视频标签任务', - postSmartCover: '提交智能封面任务', - postDigitalWatermark: '添加数字水印任务', - postExtractDigitalWatermark: '提取数字水印任务', - postPicProcess: '提交图片异步处理任务', - - getImageAuditing: '图片同步审核', - postImagesAuditing: '图片批量审核', - getImageAuditingResult: '查询图片审核任务结果', - reportBadCase: '反馈处理结果', - postVideoAuditing: '提交视频审核任务', - getVideoAuditingResult: '查询视频审核任务结果', - postAudioAuditing: '提交音频审核任务', - getAudioAuditingResult: '查询音频审核任务结果', - postTextAuditing: '提交文本审核任务', - getTextAuditingResult: '查询文本审核任务结果', - postDocumentAuditing: '提交文档审核任务', - getDocumentAuditingResult: '查询文档审核任务结果', - postWebpageAuditing: '提交网页审核任务', - getWebpageAuditingResult: '查询网页审核任务结果', - postLiveAuditing: '提交直播审核任务', - getLiveAuditingResult: '查询直播审核任务结果', - cancelLiveAuditing: '取消直播审核任务', - describeDocProcessBuckets: '查询文档预览开通状态', - getDocPreview: '文档转码同步请求', - describeDocProcessQueues: '查询文档转码队列', - updateDocProcessQueue: '更新文档转码队列', - createDocProcessJobs: '提交文档预览任务 ', - describeDocProcessJob: '查询指定的文档预览任务', - describeDocProcessJobs: '拉取符合条件的文档预览任务', - getDocHtmlUrl: '文档转 HTML', - getImageLabel: '识别图片标签', - identifyQrcode_put: '二维码识别(上传时识别)', - identifyQrcode_get: '二维码识别(下载时识别)', - generateQrcode: '二维码生成', - ocr: '图片文字识别', - postFileCompress: '提交文件压缩任务', - getFileCompress: '查询文件压缩任务', - postFileUnCompress: '提交文件解压任务', - getFileUnCompress: '查询文件解压任务', - postFileHash: '提交哈希值计算任务', - getFileHashResult: '查询哈希值计算任务结果', - postVirusDetect: '提交病毒检测任务', - getVirusDetectResult: '查询病毒检测任务结果', - postNoiseReduction: '提交音频降噪任务', - postVoiceSeparate: '提交人声分离任务', - postTts: '提交语音合成任务', - postSpeechRecognition: '提交语音识别任务', - getAsrQueue: '查询语音识别队列', - putAsrQueue: '更新语音识别队列', - getAsrBucket: '查询语音识别开通状态', - getDocHtmlPreviewUrl: '获取在线文档预览地址', - createFileProcessBucket: '开通文件处理服务', - describeFileProcessQueues: '查询文件处理队列', - updateFileProcessQueue: '更新文件处理队列', - generateFileHash: '哈希值计算同步请求', - addImageStyle: '图片处理-增加样式', - describeImageStyles: '图片处理-查询样式', - deleteImageStyle: '图片处理-删除样式', - openImageGuetzli: '开通 Guetzli 压缩', - describeImageGuetzli: '查询 Guetzli 压缩', - closeImageGuetzli: '关闭 Guetzli 压缩', - uploadPicOperation: '上传时使用图片处理', - requestPicOperation: '对云上数据进行图片处理', - advanceCompressExample3: '下载时使用图片处理', - createImageInspectJob: '异常图片检测', - describePicProcessQueues: '查询图片处理队列', - updatePicProcessQueue: '更新图片处理队列', - describeRefer: '查询防盗链', - setRefer: '设置防盗链', - openOriginProtect: '开通原图保护', - describeOriginProtect: '查询原图保护状态', - closeOriginProtect: '关闭原图保护', - postSnapshot: '提交视频截帧任务', - }; - var container = document.querySelector('.ci-main'); - var html = []; - list.forEach(function (name) { - if (name === '-') { - html.push('
'); - } else if (name.indexOf('header') > -1) { - html.push('

' + name.split('-')[1] + '

'); - } else { - html.push( - '' + - name + - (labelMap[name] ? ' (' + labelMap[name] + ')' : '') + - '', - ); - } - }); - container.innerHTML = html.join(''); - container.onclick = function (e) { - if (e.target.tagName === 'A') { - var name = e.target.getAttribute('data-method').trim(); - window[name](); - } - }; - - // 设置结果面板跟随窗口自适应高 - var mainPanel = document.querySelector('.ci-main'); - var resultPanel = document.querySelector('.result'); - resultPanel.style.height = getPanelHeight(); - window.onresize = function (e) { - resultPanel.style.height = getPanelHeight(); - }; - - function getPanelHeight() { - return mainPanel.getBoundingClientRect().height - 80 + 'px'; - } -})(); diff --git a/demo/index.html b/demo/index.html index 41dab86..f4c8324 100644 --- a/demo/index.html +++ b/demo/index.html @@ -73,11 +73,12 @@ } .demo-select-content { display: inline-block; - font-size: 16px; + font-size: 0; margin-left: 20px; } .demo-select-content div { display: inline-block; + font-size: 16px; border: solid 1px #ddd; padding: 2px 6px; cursor: pointer; @@ -108,7 +109,7 @@

- +