lesson.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. var express = require('express');
  2. var mac = require('getmac');//获取mac地址
  3. var fs = require('fs');
  4. var url = require('url');
  5. var router = express.Router();
  6. var ljConst = require("../common/LjConst");
  7. var ljRetState = require("../common/LjRetState");
  8. var logHelper = require("../helper/LjLogHelper.js");
  9. var httpHelper = require("../helper/LjHttpHelper");
  10. var fileHelper = require("../helper/LjFileHelper");
  11. var apiHelper = require("../helper/LjApiHelper");
  12. var ljStringHelper = require("../helper/LjStringHelper");
  13. /**
  14. * 下载文件
  15. */
  16. router.get("/downloadFile", function (req, res, next)
  17. {
  18. var arg = url.parse(req.url, true).query;
  19. var courseId = arg.courseId;
  20. var eid = arg.eid;
  21. var uid = arg.uid;
  22. var token = arg.token;
  23. var lessonId = arg.lessonId;
  24. //获取参数
  25. logHelper.debug(arg);
  26. //校验参数
  27. if (ljStringHelper.isNull(courseId))
  28. {
  29. logHelper.info("null object of courseId");
  30. ljRetState.code = 2;
  31. ljRetState.msg = "null object of courseId"
  32. res.json(ljRetState);
  33. return;
  34. }
  35. if (ljStringHelper.isNull(lessonId))
  36. {
  37. logHelper.info("null object of lessonId");
  38. ljRetState.code = 2;
  39. ljRetState.msg = "null object of lessonId"
  40. res.json(ljRetState);
  41. return;
  42. }
  43. if (ljStringHelper.isNull(eid))
  44. {
  45. logHelper.info("null object of eid");
  46. ljRetState.code = 2;
  47. ljRetState.msg = "null object of eid"
  48. res.json(ljRetState);
  49. return;
  50. }
  51. if (ljStringHelper.isNull(uid))
  52. {
  53. logHelper.info("null object of uid");
  54. ljRetState.code = 2;
  55. ljRetState.msg = "null object of uid"
  56. res.json(ljRetState);
  57. return;
  58. }
  59. if (ljStringHelper.isNull(token))
  60. {
  61. logHelper.info("null object of token");
  62. ljRetState.code = 2;
  63. ljRetState.msg = "null object of token"
  64. res.json(ljRetState);
  65. return;
  66. }
  67. var opt = {};
  68. opt.eid = eid;
  69. opt.uid = uid;
  70. opt.token = token;
  71. opt.lessonId = lessonId;
  72. opt.courseId = courseId;
  73. opt.path = "/lesson/" + opt.lessonId;
  74. opt.url = apiHelper.getApiForQueryCourse(opt.lessonId, opt.courseId, opt.eid);
  75. opt.method = "get";
  76. httpHelper.request(opt, function (error, res, body)
  77. {
  78. let obj = JSON.parse(body);
  79. var lessonJsonObj = JSON.parse(body);
  80. if (lessonJsonObj.code == 200)
  81. {
  82. /*课件-Begin*/
  83. //课程集合
  84. var courseList = lessonJsonObj.data.list;
  85. //课程数
  86. var courseListSize = courseList.length;
  87. //获取总共资源数
  88. var res_total = 0;
  89. for (var i = 0; i < courseListSize; i++)
  90. {
  91. //资源集合
  92. var resourceList = courseList[i].list;
  93. //资源数
  94. var resourceSize = resourceList.length;
  95. res_total += resourceSize
  96. }
  97. logHelper.info("res_total:"+res_total);
  98. /*课件-End*/
  99. //添加下载记录
  100. opt.resTotal = res_total;
  101. opt.resSize = 0;
  102. addDownload(opt);
  103. logHelper.info("Begin to download file with lessonId【" + opt.lessonId + "】");
  104. //添加下载记录
  105. //遍历课件
  106. for (var i = 0; i < courseListSize; i++)
  107. {
  108. //资源集合
  109. var resourceList = courseList[i].list;
  110. //资源数
  111. var resourceSize = resourceList.length;
  112. for (var j = 0; j < resourceSize; j++)
  113. {
  114. logHelper.debug(resourceList[j].url);
  115. var url = resourceList[j].url;
  116. fileHelper.downloadFile(url,opt);
  117. }
  118. }
  119. /*课件-End*/
  120. return "ok";
  121. }
  122. else
  123. {
  124. logHelper.error("failed to query lesson with lessonId[" + opt.lessonId + "],caused by error:" + lessonJsonObj);
  125. return "error";
  126. }
  127. })
  128. ljRetState.code = 200;
  129. ljRetState.msg = "null object of uid"
  130. ljRetState.success = true;
  131. res.setHeader("Access-Control-Allow-Origin", "*");
  132. res.json(ljRetState);
  133. return;
  134. });
  135. /**
  136. * 读取文件
  137. */
  138. router.get("/readFile", function (req, res)
  139. {
  140. var arg = url.parse(req.url, true).query;
  141. var fileDirStr = arg.n;
  142. var fileDirNew = fileDirStr.replace(/\*/g, '\\');
  143. var fileDir = fileHelper.getFileDir(fileDirNew)
  144. var fileProp = fileHelper.getFileProperty(fileDir);
  145. logHelper.info(fileProp.fileType);
  146. if (fileProp.fileType == ljConst.VIDEO_TYPE_MP4)
  147. {
  148. logHelper.info(fileDir);
  149. fileHelper.readDecryptedStream(res, fileDir, "video/mp4")
  150. }
  151. else
  152. {
  153. fileHelper.readDecryptedStream(res, fileDir, "image/jpeg")
  154. }
  155. });
  156. /**
  157. * 删除下载文件
  158. */
  159. router.get("/delFile", function (req, res)
  160. {
  161. var arg = url.parse(req.url, true).query;
  162. var courseId = arg.courseId;
  163. var eid = arg.eid;
  164. var uid = arg.uid;
  165. var token = arg.token;
  166. var lessonId = arg.lessonId;
  167. //获取参数
  168. logHelper.debug(arg);
  169. //校验参数
  170. if (ljStringHelper.isNull(courseId))
  171. {
  172. logHelper.info("null object of courseId");
  173. ljRetState.code = 2;
  174. ljRetState.msg = "null object of courseId"
  175. res.json(ljRetState);
  176. return;
  177. }
  178. if (ljStringHelper.isNull(lessonId))
  179. {
  180. logHelper.info("null object of lessonId");
  181. ljRetState.code = 2;
  182. ljRetState.msg = "null object of lessonId"
  183. res.json(ljRetState);
  184. return;
  185. }
  186. if (ljStringHelper.isNull(eid))
  187. {
  188. logHelper.info("null object of eid");
  189. ljRetState.code = 2;
  190. ljRetState.msg = "null object of eid"
  191. res.json(ljRetState);
  192. return;
  193. }
  194. if (ljStringHelper.isNull(uid))
  195. {
  196. logHelper.info("null object of uid");
  197. ljRetState.code = 2;
  198. ljRetState.msg = "null object of uid"
  199. res.json(ljRetState);
  200. return;
  201. }
  202. if (ljStringHelper.isNull(token))
  203. {
  204. logHelper.info("null object of token");
  205. ljRetState.code = 2;
  206. ljRetState.msg = "null object of token"
  207. res.json(ljRetState);
  208. return;
  209. }
  210. var opt = {};
  211. opt.eid = eid;
  212. opt.uid = uid;
  213. opt.token = token;
  214. opt.lessonId = lessonId;
  215. opt.courseId = courseId;
  216. opt.path = "/lesson/" + opt.lessonId;
  217. opt.url = apiHelper.getApiForQueryCourse(opt.lessonId, opt.courseId, opt.eid);
  218. opt.method = "get";
  219. httpHelper.request(opt, function (error, res, body)
  220. {
  221. let obj = JSON.parse(body);
  222. var lessonJsonObj = JSON.parse(body);
  223. if (lessonJsonObj.code == 200)
  224. {
  225. /*课件-Begin*/
  226. //课程集合
  227. var courseList = lessonJsonObj.data.list;
  228. //课程数
  229. var courseListSize = courseList.length;
  230. //遍历课件
  231. for (var i = 0; i < courseListSize; i++)
  232. {
  233. //资源集合
  234. var resourceList = courseList[i].list;
  235. //资源数
  236. var resourceSize = resourceList.length;
  237. for (var j = 0; j < resourceSize; j++)
  238. {
  239. logHelper.debug(resourceList[j].url);
  240. var url = resourceList[j].url;
  241. //fileHelper.downloadFile(url)
  242. var delFileProp = fileHelper.getFilePropertyNoMkdir(url);
  243. //未加密文件URL
  244. var file1 = null;
  245. if (delFileProp.fileType == ljConst.VIDEO_TYPE_M3U8)
  246. {
  247. file1 = delFileProp.folderDir + delFileProp.fileName + "_new.mp4";
  248. }
  249. else
  250. {
  251. file1 = delFileProp.folderDir + delFileProp.fileName + "_new." + delFileProp.fileType;
  252. }
  253. //判断文件是否存在
  254. if (fs.existsSync(file1))
  255. {
  256. //删除路径
  257. fs.unlinkSync(file1);
  258. }
  259. }
  260. }
  261. /*课件-End*/
  262. //删除记录
  263. delDownload(opt);
  264. return "ok";
  265. }
  266. else
  267. {
  268. logHelper.error("failed to query lesson with lessonId[" + opt.lessonId + "],caused by error:" + lessonJsonObj);
  269. return "error";
  270. }
  271. });
  272. ljRetState.code = 2;
  273. ljRetState.msg = "null object of uid"
  274. ljRetState.success = true;
  275. res.setHeader("Access-Control-Allow-Origin", "*");
  276. res.json(ljRetState);
  277. return "";
  278. });
  279. var addDownload = function (opt)
  280. {
  281. var macAddressStr = "";
  282. mac.getMac(function(err,macAddress){
  283. if (err) throw err;
  284. macAddressStr = macAddress; //获取mac地址
  285. });
  286. console.info("macAddressStr:"+macAddressStr);
  287. opt.url = apiHelper.getApiForAddDownload(opt.lessonId, opt.courseId, opt.resTotal, opt.resSize);
  288. opt.method = "post";
  289. opt.path = "/callback/download/add";
  290. httpHelper.request(opt, function (error, res, body)
  291. {
  292. var retObj = JSON.parse(body);
  293. logHelper.debug(retObj);
  294. if (retObj.code == 200)
  295. {
  296. logHelper.info("Succeed to call api[" + opt.path + "]");
  297. return true;
  298. }
  299. else
  300. {
  301. logHelper.error("Failed to call api[" + opt.path + "],caused by error[" + retObj + "]");
  302. return false;
  303. }
  304. });
  305. }
  306. var delDownload = function (opt)
  307. {
  308. opt.url = apiHelper.getApiForDelDownload(opt.lessonId, null);
  309. opt.method = "delete";
  310. opt.path = "/callback/download/delete";
  311. httpHelper.request(opt, function (error, res, body)
  312. {
  313. var retObj = JSON.parse(body);
  314. logHelper.debug(retObj);
  315. if (retObj.code == 200)
  316. {
  317. logHelper.info("Succeed to call api[" + opt.path + "]");
  318. return true;
  319. }
  320. else
  321. {
  322. logHelper.error("Failed to call api[" + opt.path + "],caused by error[" + retObj + "]");
  323. return false;
  324. }
  325. });
  326. }
  327. module.exports = router;