fileProcess.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  1. const COS = require('../lib/cos-wx-sdk-v5');
  2. var wxfs = wx.getFileSystemManager();
  3. const config = require('../config');
  4. const { cos, requestCallback } = require('../tools');
  5. const fileProcessDao = {
  6. '开通文件处理服务 openFileProcessService': openFileProcessService,
  7. '查询文件处理服务 describeFileProcessService': describeFileProcessService,
  8. '关闭文件处理服务 closeFileProcessService': closeFileProcessService,
  9. '查询文件处理队列 describeFileProcessQueue': describeFileProcessQueue,
  10. '更新文件处理队列 updateFileProcessQueue': updateFileProcessQueue,
  11. '哈希值计算同步请求 fileHash': fileHash,
  12. '提交哈希值计算任务 createFileHashJob': createFileHashJob,
  13. '查询哈希值计算结果 describeFileHashJob': describeFileHashJob,
  14. '提交多文件打包压缩任务 createFileCompressJob': createFileCompressJob,
  15. '查询多文件打包压缩结果 describeFileCompressJob': describeFileCompressJob,
  16. '压缩包预览 zipPreview': zipPreview,
  17. '提交文件解压任务 createFileUnCompressJob': createFileUnCompressJob,
  18. '查询文件解压结果 describeFileUnCompressJob': describeFileUnCompressJob,
  19. };
  20. function openFileProcessService() {
  21. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  22. const key = `file_bucket`; //
  23. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  24. const url = `https://${host}/${key}`;
  25. cos.request(
  26. {
  27. Method: 'POST', // 固定值,必须
  28. Key: key, // 必须
  29. Url: url, // 请求的url,必须
  30. },
  31. function (err, data) {
  32. if (err) {
  33. // 处理请求失败
  34. console.log(err);
  35. } else {
  36. // 处理请求成功
  37. console.log(data.Response);
  38. }
  39. }
  40. );
  41. }
  42. function describeFileProcessService() {
  43. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  44. const key = `file_bucket`; //
  45. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  46. const url = `https://${host}/${key}`;
  47. cos.request(
  48. {
  49. Method: 'Get', // 固定值,必须
  50. Key: key, // 必须
  51. Url: url, // 请求的url,必须
  52. Query: {
  53. // regions: "", // 地域信息,例如 ap-shanghai、ap-beijing,若查询多个地域以“,”分隔字符串,非必须
  54. // bucketNames: "", // 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索,非必须
  55. // bucketName: "", // 存储桶名称前缀,前缀搜索,非必须
  56. // pageNumber: "", // 第几页,非必须
  57. // pageSize: "", // 每页个数,大于0且小于等于100的整数,非必须
  58. },
  59. },
  60. function (err, data) {
  61. if (err) {
  62. // 处理请求失败
  63. console.log(err);
  64. } else {
  65. // 处理请求成功
  66. console.log(data.Response);
  67. }
  68. }
  69. );
  70. }
  71. function closeFileProcessService() {
  72. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  73. const key = `file_bucket`; //
  74. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  75. const url = `https://${host}/${key}`;
  76. cos.request(
  77. {
  78. Method: 'DELETE', // 固定值,必须
  79. Key: key, // 必须
  80. Url: url, // 请求的url,必须
  81. },
  82. function (err, data) {
  83. if (err) {
  84. // 处理请求失败
  85. console.log(err);
  86. } else {
  87. // 处理请求成功
  88. console.log(data.Response);
  89. }
  90. }
  91. );
  92. }
  93. function describeFileProcessQueue() {
  94. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  95. const key = `file_queue`; //
  96. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  97. const url = `https://${host}/${key}`;
  98. cos.request(
  99. {
  100. Method: 'GET', // 固定值,必须
  101. Key: key, // 必须
  102. Url: url, // 请求的url,必须
  103. Query: {
  104. // 队列 ID,以“,”符号分割字符串;是否必传:否
  105. queueIds: '',
  106. // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:否
  107. state: 'Active',
  108. // 第几页,默认值1;是否必传:否
  109. pageNumber: '',
  110. // 每页个数,默认值10;是否必传:否
  111. pageSize: '',
  112. },
  113. },
  114. function (err, data) {
  115. if (err) {
  116. // 处理请求失败
  117. console.log(err);
  118. } else {
  119. // 处理请求成功
  120. console.log(data.Response);
  121. }
  122. }
  123. );
  124. }
  125. function updateFileProcessQueue() {
  126. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  127. const queueId = 'xxx';
  128. const key = `file_queue/${queueId}`; // queueId:{queueId};
  129. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  130. const url = `https://${host}/${key}`;
  131. const body = COS.util.json2xml({
  132. Request: {
  133. // 队列名称,仅支持中文、英文、数字、_、-和*,长度不超过 128;是否必传:是
  134. Name: 'xxx',
  135. // Active 表示队列内的作业会被调度执行Paused 表示队列暂停,作业不再会被调度执行,队列内的所有作业状态维持在暂停状态,已经执行中的任务不受影响;是否必传:是
  136. State: 'Active',
  137. // 回调配置;是否必传:是
  138. NotifyConfig: {
  139. // 回调开关OffOn;是否必传:否
  140. State: 'Off',
  141. // 回调事件TaskFinish:任务完成WorkflowFinish:工作流完成;是否必传:否
  142. Event: 'TaskFinish',
  143. // 回调格式XMLJSON;是否必传:否
  144. ResultFormat: '',
  145. // 回调类型UrlTDMQ;是否必传:否
  146. Type: 'Url',
  147. // 回调地址,不能为内网地址。;是否必传:否
  148. Url: '',
  149. // TDMQ 使用模式Topic:主题订阅Queue: 队列服务;是否必传:否
  150. MqMode: '',
  151. // TDMQ 所属园区,目前支持园区 sh(上海)、bj(北京)、gz(广州)、cd(成都)、hk(中国香港);是否必传:否
  152. MqRegion: '',
  153. // TDMQ 主题名称;是否必传:否
  154. MqName: '',
  155. },
  156. },
  157. });
  158. cos.request(
  159. {
  160. Method: 'PUT', // 固定值,必须
  161. Key: key, // 必须
  162. Url: url, // 请求的url,必须
  163. Body: body, // 请求体参数,必须
  164. ContentType: 'application/xml', // 固定值,必须
  165. },
  166. function (err, data) {
  167. if (err) {
  168. // 处理请求失败
  169. console.log(err);
  170. } else {
  171. // 处理请求成功
  172. console.log(data.Response);
  173. }
  174. }
  175. );
  176. }
  177. function fileHash() {
  178. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  179. const ObjectKey = 'test.docx';
  180. const key = `${ObjectKey}`; // ObjectKey:{ObjectKey};
  181. const host = `${config.Bucket}.cos.${config.Region}.myqcloud.com`;
  182. const url = `https://${host}/${key}`;
  183. cos.request(
  184. {
  185. Method: 'GET', // 固定值,必须
  186. Key: key, // 必须
  187. Url: url, // 请求的url,必须
  188. Query: {
  189. // 操作类型,哈希值计算固定为:filehash;是否必传:是
  190. 'ci-process': 'filehash',
  191. // 支持的哈希算法类型,有效值:md5、sha1、sha256;是否必传:是
  192. type: 'md5',
  193. // 是否将计算得到的哈希值,自动添加至文件的自定义header,格式为:x-cos-meta-md5/sha1/sha256;有效值: true、false,不填则默认为false;是否必传:否
  194. addtoheader: '',
  195. },
  196. },
  197. function (err, data) {
  198. if (err) {
  199. // 处理请求失败
  200. console.log(err);
  201. } else {
  202. // 处理请求成功
  203. console.log(data.Response);
  204. }
  205. }
  206. );
  207. }
  208. function createFileHashJob() {
  209. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  210. const key = `jobs`; //
  211. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  212. const url = `https://${host}/${key}`;
  213. const body = COS.util.json2xml({
  214. Request: {
  215. // 表示任务的类型,哈希值计算默认为:FileHashCode。;是否必传:是
  216. Tag: 'FileHashCode',
  217. // 包含待操作的文件信息。;是否必传:是
  218. Input: {
  219. // 文件名,取值为文件在当前存储桶中的完整名称。;是否必传:是
  220. Object: 'test.docx',
  221. },
  222. // 包含哈希值计算的处理规则。;是否必传:是
  223. Operation: {
  224. // 指定哈希值计算的处理规则。;是否必传:是
  225. FileHashCodeConfig: {
  226. // 哈希值的算法类型,支持:MD5、SHA1、SHA256;是否必传:是
  227. Type: 'MD5',
  228. // 是否将计算得到的哈希值添加至文件自定义header,有效值:true、false,默认值为 false。自定义header根据Type的值变化,例如Type值为MD5时,自定义header为 x-cos-meta-md5。;是否必传:否
  229. AddToHeader: '',
  230. },
  231. // 透传用户信息, 可打印的 ASCII 码,长度不超过1024。;是否必传:否
  232. UserData: '',
  233. },
  234. // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式。;是否必传:否
  235. CallBackFormat: '',
  236. // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型。;是否必传:否
  237. CallBackType: 'Url',
  238. // 任务回调的地址,优先级高于队列的回调地址。;是否必传:否
  239. CallBack: '',
  240. },
  241. });
  242. cos.request(
  243. {
  244. Method: 'POST', // 固定值,必须
  245. Key: key, // 必须
  246. Url: url, // 请求的url,必须
  247. Body: body, // 请求体参数,必须
  248. ContentType: 'application/xml', // 固定值,必须
  249. },
  250. function (err, data) {
  251. if (err) {
  252. // 处理请求失败
  253. console.log(err);
  254. } else {
  255. // 处理请求成功
  256. console.log(data.Response);
  257. }
  258. }
  259. );
  260. }
  261. function describeFileHashJob() {
  262. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  263. const jobId = 'xxx';
  264. const key = `file_jobs/${jobId}`; // jobId:{jobId};
  265. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  266. const url = `https://${host}/${key}`;
  267. cos.request(
  268. {
  269. Method: 'GET', // 固定值,必须
  270. Key: key, // 必须
  271. Url: url, // 请求的url,必须
  272. },
  273. function (err, data) {
  274. if (err) {
  275. // 处理请求失败
  276. console.log(err);
  277. } else {
  278. // 处理请求成功
  279. console.log(data.Response);
  280. }
  281. }
  282. );
  283. }
  284. function createFileCompressJob() {
  285. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  286. const key = `jobs`; //
  287. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  288. const url = `https://${host}/${key}`;
  289. const body = COS.util.json2xml({
  290. Request: {
  291. // 表示任务的类型,多文件打包压缩默认为:FileCompress。;是否必传:是
  292. Tag: 'FileCompress',
  293. // 包含文件打包压缩的处理规则。;是否必传:是
  294. Operation: {
  295. // 指定文件打包压缩的处理规则。;是否必传:是
  296. FileCompressConfig: {
  297. // 文件打包时,是否需要去除源文件已有的目录结构,有效值:0:不需要去除目录结构,打包后压缩包中的文件会保留原有的目录结构;1:需要,打包后压缩包内的文件会去除原有的目录结构,所有文件都在同一层级。例如:源文�� URL 为 https://domain/source/test.mp4,则源文件路径为 source/test.mp4,如果为 1,则 ZIP 包中该文件路径为 test.mp4;如果为0, ZIP 包中该文件路径为 source/test.mp4。;是否必传:是
  298. Flatten: '0',
  299. // 打包压缩的类型,有效值:zip、tar、tar.gz。;是否必传:是
  300. Format: 'zip',
  301. // 压缩类型,仅在Format为tar.gz或zip时有效。faster:压缩速度较快better:压缩质量较高,体积较小default:适中的压缩方式默认值为default;是否必传:否
  302. Type: '',
  303. // 压缩包密钥,传入时需先经过 base64 编码,编码后长度不能超过128。当 Format 为 zip 时生效。;是否必传:否
  304. CompressKey: '',
  305. // 支持将需要打包的文件整理成索引文件,后台将根据索引文件内提供的文件 url,打包为一个压缩包文件。索引文件需要保存在当前存储桶中,本字段需要提供索引文件的对象地址,例如:/test/index.csv。索引文件格式:仅支持 CSV 文件,一行一条 URL(仅支持本存储桶文件),如有多列字段,默认取第一列作为URL。最多不超过10000个文件, 总大小不超过50G,否则会导致任务失败。;是否必传:否
  306. UrlList: '',
  307. // 支持对存储桶中的某个前缀进行打包,如果需要对某个目录进行打包,需要加/,例如test目录打包,则值为:test/。最多不超过10000个文件,总大小不超过50G,否则会导致任务失败。;是否必传:否
  308. Prefix: 'example/',
  309. // 支持对存储桶中的多个文件进行打包,个数不能超过 1000,总大小不超过50G,否则会导致任务失败。;是否必传:否
  310. Key: '',
  311. },
  312. // 透传用户信息,可打印的 ASCII 码,长度不超过1024。;是否必传:否
  313. UserData: '',
  314. // 指定打包压缩后的文件保存的地址信息。;是否必传:是
  315. Output: {
  316. // 存储桶的地域。;是否必传:是
  317. Region: config.Region,
  318. // 保存压缩后文件的存储桶。;是否必传:是
  319. Bucket: config.Bucket,
  320. // 压缩后文件的文件名;是否必传:是
  321. Object: 'test.zip',
  322. },
  323. },
  324. // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式。;是否必传:否
  325. CallBackFormat: '',
  326. // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型。;是否必传:否
  327. CallBackType: 'Url',
  328. // 任务回调的地址,优先级高于队列的回调地址。;是否必传:否
  329. CallBack: '',
  330. },
  331. });
  332. cos.request(
  333. {
  334. Method: 'POST', // 固定值,必须
  335. Key: key, // 必须
  336. Url: url, // 请求的url,必须
  337. Body: body, // 请求体参数,必须
  338. ContentType: 'application/xml', // 固定值,必须
  339. },
  340. function (err, data) {
  341. if (err) {
  342. // 处理请求失败
  343. console.log(err);
  344. } else {
  345. // 处理请求成功
  346. console.log(data.Response);
  347. }
  348. }
  349. );
  350. }
  351. function describeFileCompressJob() {
  352. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  353. const jobId = 'xxx';
  354. const key = `file_jobs/${jobId}`; // jobId:{jobId};
  355. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  356. const url = `https://${host}/${key}`;
  357. cos.request(
  358. {
  359. Method: 'GET', // 固定值,必须
  360. Key: key, // 必须
  361. Url: url, // 请求的url,必须
  362. },
  363. function (err, data) {
  364. if (err) {
  365. // 处理请求失败
  366. console.log(err);
  367. } else {
  368. // 处理请求成功
  369. console.log(data.Response);
  370. }
  371. }
  372. );
  373. }
  374. function zipPreview() {
  375. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  376. const key = `test.zip`; //
  377. const host = `${config.Bucket}.cos.${config.Region}.myqcloud.com`;
  378. const url = `https://${host}/${key}`;
  379. cos.request(
  380. {
  381. Method: 'GET', // 固定值,必须
  382. Key: key, // 必须
  383. Url: url, // 请求的url,必须
  384. Query: {
  385. 'ci-process': 'zippreview', // 操作类型,压缩包预览计算固定为:zippreview,必须
  386. },
  387. },
  388. function (err, data) {
  389. if (err) {
  390. // 处理请求失败
  391. console.log(err);
  392. } else {
  393. // 处理请求成功
  394. console.log(data.Response);
  395. }
  396. }
  397. );
  398. }
  399. function createFileUnCompressJob() {
  400. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  401. const key = `jobs`; //
  402. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  403. const url = `https://${host}/${key}`;
  404. const body = COS.util.json2xml({
  405. Request: {
  406. // 表示任务的类型,文件解压默认为:FileUncompress。;是否必传:是
  407. Tag: 'FileUncompress',
  408. // 包含待操作的文件信息。;是否必传:是
  409. Input: {
  410. // 文件名,取值为文件在当前存储桶中的完整名称。;是否必传:是
  411. Object: 'test.zip',
  412. },
  413. // 包含文件解压的处理规则。;是否必传:是
  414. Operation: {
  415. // 指定文件解压的处理规则。;是否必传:是
  416. FileUncompressConfig: {
  417. // 指定解压后输出文件的前缀,不填则默认保存在存储桶根路径。;是否必传:否
  418. Prefix: 'output/',
  419. // 解压密钥,传入时需先经过 base64 编码。;是否必传:否
  420. UnCompressKey: '',
  421. // 指定解压后的文件路径是否需要替换前缀,有效值:0:不添加额外的前缀,解压缩将保存在Prefix指定的路径下(不会保留压缩包的名称,仅将压缩包内的文件保存至指定的路径)1:以压缩包本身的名称作为前缀,解压缩将保存在Prefix指定的路径下2:以压缩包完整路径作为前缀,此时如果不指定Prefix,就是解压到压缩包所在的当前路径(包含压缩包本身名称)默认值为0。;是否必传:否
  422. PrefixReplaced: '',
  423. },
  424. // 透传用户信息,可打印的 ASCII 码,长度不超过1024。;是否必传:否
  425. UserData: '',
  426. // 指定解压后的文件保存的存储桶信息。;是否必传:是
  427. Output: {
  428. // 存储桶的地域。;是否必传:是
  429. Region: config.Region,
  430. // 保存解压后文件的存储桶。;是否必传:是
  431. Bucket: config.Bucket,
  432. },
  433. },
  434. // 任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式。;是否必传:否
  435. CallBackFormat: '',
  436. // 任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型。;是否必传:否
  437. CallBackType: 'Url',
  438. // 任务回调的地址,优先级高于队列的回调地址。;是否必传:否
  439. CallBack: '',
  440. },
  441. });
  442. cos.request(
  443. {
  444. Method: 'POST', // 固定值,必须
  445. Key: key, // 必须
  446. Url: url, // 请求的url,必须
  447. Body: body, // 请求体参数,必须
  448. ContentType: 'application/xml', // 固定值,必须
  449. },
  450. function (err, data) {
  451. if (err) {
  452. // 处理请求失败
  453. console.log(err);
  454. } else {
  455. // 处理请求成功
  456. console.log(data.Response);
  457. }
  458. }
  459. );
  460. }
  461. function describeFileUnCompressJob() {
  462. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  463. const jobId = 'xxx';
  464. const key = `file_jobs/${jobId}`; // jobId:{jobId};
  465. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  466. const url = `https://${host}/${key}`;
  467. cos.request(
  468. {
  469. Method: 'GET', // 固定值,必须
  470. Key: key, // 必须
  471. Url: url, // 请求的url,必须
  472. },
  473. function (err, data) {
  474. if (err) {
  475. // 处理请求失败
  476. console.log(err);
  477. } else {
  478. // 处理请求成功
  479. console.log(data.Response);
  480. }
  481. }
  482. );
  483. }
  484. module.exports = fileProcessDao;