Selaa lähdekoodia

添加对语音的支持

zhouxianguang 5 vuotta sitten
vanhempi
commit
6d0839c09e
5 muutettua tiedostoa jossa 177 lisäystä ja 56 poistoa
  1. BIN
      audio.json
  2. 6 5
      helper/LjApiHelper.js
  3. 47 15
      helper/LjFileHelper.js
  4. 123 35
      router/lesson.js
  5. 1 1
      test/json.js

BIN
audio.json


+ 6 - 5
helper/LjApiHelper.js

@@ -1,5 +1,6 @@
 var request = require('request');
 var cryptoJS = require("crypto-js");
+var domainName = "tt-web.api.ai160.com";
 var mac = require('getmac');//获取mac地址
 
 var macAddressStr = "";
@@ -9,7 +10,6 @@ mac.getMac(function(err,macAddress){
     macAddressStr = macAddress; //获取mac地址
 });
 
-
 /**
  * The helper of api
  */
@@ -37,7 +37,7 @@ class LjApiHelper
      */
     static getApiForQueryCourse(lessonId, courseId, eid)
     {
-        var http = "http://tt-web.api.ai160.com/lesson/" + lessonId;
+        var http = "http://"+domainName+"/lesson/" + lessonId;
         http += "?courseId=" + courseId
         http += "&eid=" + eid
         http += "&cache=true";
@@ -53,7 +53,7 @@ class LjApiHelper
      */
     static getApiForAddDownload(lessonId,courseId,resTotal,data)
     {
-        return "http://tt-web.api.ai160.com/callback/download/add?lessonId=" + lessonId+"&courseId="+courseId+"&resTotal="+resTotal+"&resSize=0&mac="+macAddressStr;
+        return "http://"+domainName+"/callback/download/add?lessonId=" + lessonId+"&courseId="+courseId+"&resTotal="+resTotal+"&resSize=0&mac="+macAddressStr;
     }
 
     /**
@@ -64,7 +64,7 @@ class LjApiHelper
      */
     static getApiForDelDownload(lessonId,data)
     {
-        return "http://tt-web.api.ai160.com/callback/download/delete?lessonId=" + lessonId+"&mac="+macAddressStr;
+        return "http://"+domainName+"/callback/download/delete?lessonId=" + lessonId+"&mac="+macAddressStr;
     }
 
     /**
@@ -74,8 +74,9 @@ class LjApiHelper
      */
     static getApiForUpdateResSize(lessonId)
     {
-        return "http://tt-web.api.ai160.com/callback/download/update/resource/size?lessonId=" + lessonId+"&mac="+macAddressStr;
+        return "http://"+domainName+"/callback/download/update/resource/size?lessonId=" + lessonId+"&mac="+macAddressStr;
     }
+
 }
 
 module.exports = LjApiHelper;

+ 47 - 15
helper/LjFileHelper.js

@@ -21,6 +21,11 @@ class LjFileHelper
      */
     static downloadFile(fileUrl, opt)
     {
+        if(fileUrl == null || fileUrl=="")
+        {
+            return "";
+        }
+
         //获取文件属性对象
         var filePropObj = this.getFileProperty(fileUrl);
         if (filePropObj == null)
@@ -38,17 +43,17 @@ class LjFileHelper
             ffmpeg(fileUrl).format(ljConst.VIDEO_TYPE_MP4)
                 .on('start', function (err)
                 {
-                    logHelper.info("Starting down video:" + fileUrl);
+                    logHelper.info("【"+opt.lessonId+"】","Starting down video:" + fileUrl);
                 })
                 .on('error', function (err)
                 {
-                    logHelper.error("Succeeded to down video[" + fileUrl + "]: " + err.message);
+                    logHelper.error("【"+opt.lessonId+"】","Failed to down video[" + fileUrl + "]: " + err.message);
                 })
                 .on('end', function ()
                 {
                     //加密视频存储路径
                     let localFileDirNew = filePropObj.folderDir + filePropObj.fileName + "_new" + ".mp4"
-                    logHelper.info("Succeeded to down video:" + localFileDirNew);
+                    logHelper.info("【"+opt.lessonId+"】","Succeeded to down video:" + localFileDirNew);
 
                     //加密存储
                     LjFileHelper.writeEncryptedStream(localFileDir, localFileDirNew, function ()
@@ -62,12 +67,12 @@ class LjFileHelper
                         if (err)
                         {
                             //删除失败
-                            logHelper.info("Failed to delete video[" + err.message + "]:" + localFileDir);
+                            logHelper.error("【"+opt.lessonId+"】","Failed to delete video[" + err.message + "]:" + localFileDir);
                             throw err;
                         }
                         else
                         {
-                            logHelper.info('Succeeded to delete video:' + localFileDir)
+                            logHelper.info("【"+opt.lessonId+"】",'Succeeded to delete video:' + localFileDir)
                         }
                     })
                 })
@@ -83,7 +88,7 @@ class LjFileHelper
             {
                 //加密有声读物存储地址
                 var localFileDirNew = filePropObj.folderDir + filePropObj.fileName + "_new." + filePropObj.fileType;
-                logHelper.info("Succeeded to down audio:" + localFileDirNew);
+                logHelper.info("【"+opt.lessonId+"】","Succeeded to down audio:" + localFileDirNew);
 
                 //加密有声读物
                 LjFileHelper.writeEncryptedStream(localFileDir, localFileDirNew, function ()
@@ -108,12 +113,12 @@ class LjFileHelper
                     if (err)
                     {
                         //删除失败
-                        logHelper.erro("Failed to delete audio[" + err.message + "]:" + localFileDir);
+                        logHelper.erro("【"+opt.lessonId+"】","Failed to delete audio[" + err.message + "]:" + localFileDir);
                         throw err;
                     }
                     else
                     {
-                        logHelper.info('Succeeded to delete audio:' + localFileDir)
+                        logHelper.info("【"+opt.lessonId+"】",'Succeeded to delete audio:' + localFileDir)
                     }
                 })
             });
@@ -128,7 +133,7 @@ class LjFileHelper
             {
                 //加密图片存储地址
                 var localFileDirNew = filePropObj.folderDir + filePropObj.fileName + "_new." + filePropObj.fileType;
-                logHelper.info("Succeeded to down image:" + localFileDirNew);
+                logHelper.info("【"+opt.lessonId+"】","Succeeded to down image:" + localFileDirNew);
 
                 //加密图片
                 LjFileHelper.writeEncryptedStream(localFileDir, localFileDirNew, function ()
@@ -155,12 +160,12 @@ class LjFileHelper
                     if (err)
                     {
                         //删除失败
-                        logHelper.error("Failed to delete image[" + err.message + "]:" + localFileDir);
+                        logHelper.error("【"+opt.lessonId+"】","Failed to delete image[" + err.message + "]:" + localFileDir);
                         throw err;
                     }
                     else
                     {
-                        logHelper.info('Succeeded to delete image:' + localFileDir)
+                        logHelper.info("【"+opt.lessonId+"】",'Succeeded to delete image:' + localFileDir)
                     }
                 })
             });
@@ -185,7 +190,6 @@ class LjFileHelper
         {
             //加密视频存储路径
             let localFileDirNew = filePropObj.folderDir + filePropObj.fileName + "_new" + ".mp4"
-            logHelper.info("Succeeded to down video:" + localFileDirNew);
 
             //删除加密文件
             fs.unlink(localFileDirNew, function (err)
@@ -201,12 +205,38 @@ class LjFileHelper
                     logHelper.info('Succeeded to delete video:' + localFileDir)
                 }
             })
+        }//有声读物处理
+        else if (filePropObj.fileType == ljConst.VIDEO_TYPE_MP3)
+        {
+            //未加密有声读物本地存储地址
+            var localFileDir = filePropObj.folderDir + filePropObj.fileName + "." + filePropObj.fileType;
+
+            //读取有声读物
+            request(fileUrl).pipe(fs.createWriteStream(localFileDir)).on('close', function ()
+            {
+                //加密有声读物存储地址
+                var localFileDirNew = filePropObj.folderDir + filePropObj.fileName + "_new." + filePropObj.fileType;
+
+                //删除文件(加密存储完成后删除未加密文件)
+                fs.unlink(localFileDirNew, function (err)
+                {
+                    if (err)
+                    {
+                        //删除失败
+                        logHelper.erro("【"+opt.lessonId+"】","Failed to delete audio[" + err.message + "]:" + localFileDir);
+                        throw err;
+                    }
+                    else
+                    {
+                        logHelper.info("【"+opt.lessonId+"】",'Succeeded to delete audio:' + localFileDir)
+                    }
+                })
+            });
         }//图片处理
         else
         {
             //加密图片存储地址
             var localFileDirNew = filePropObj.folderDir + filePropObj.fileName + "_new." + filePropObj.fileType;
-            logHelper.info("Succeeded to down image:" + localFileDirNew);
 
             //删除加密文件
             fs.unlink(localFileDirNew, function (err)
@@ -338,6 +368,10 @@ class LjFileHelper
      */
     static getFilePropertyNoMkdir(fileUrl)
     {
+        if(fileUrl == null)
+        {
+            return;
+        }
         /*--文件夹目录-Begin--*/
         var folderDir = ljConst.BASE_DIR;
 
@@ -574,9 +608,7 @@ class LjFileHelper
 
         httpHelper.request(opt, function (error, res, body)
         {
-            logHelper.info(body);
             var retObj = JSON.parse(body);
-            logHelper.debug(retObj);
 
             if (retObj.code == 200)
             {

+ 123 - 35
router/lesson.js

@@ -110,9 +110,8 @@ router.get("/downloadFile", function (req, res, next)
 
     httpHelper.request(opt, function (error, res, body)
     {
-
         let obj = JSON.parse(body);
-
+        console.info(body)
         var lessonJsonObj = JSON.parse(body);
         if (lessonJsonObj.code == 200)
         {
@@ -146,18 +145,43 @@ router.get("/downloadFile", function (req, res, next)
             //遍历课件
             for (var i = 0; i < courseListSize; i++)
             {
-                //资源集合
-                var resourceList = courseList[i].list;
+                var courseObj = courseList[i];
+                if (courseObj.type == ljConst.RES_TYPE_IMAGE || courseObj.type == ljConst.RES_TYPE_VIDEO)
+                {
+                    //资源集合
+                    var resourceList = courseList[i].list;
+                    //资源数
+                    var resourceSize = resourceList.length;
 
-                //资源数
-                var resourceSize = resourceList.length;
+                    for (var j = 0; j < resourceSize; j++)
+                    {
+                        logHelper.debug(resourceList[j].url);
+                        var url = resourceList[j].url;
 
-                for (var j = 0; j < resourceSize; j++)
+                        fileHelper.downloadFile(url, opt);
+                    }
+                }//处理语音
+                else if (courseObj.type == ljConst.RES_TYPE_AUDIO)
                 {
-                    logHelper.debug(resourceList[j].url);
-                    var url = resourceList[j].url;
-
-                    fileHelper.downloadFile(url, opt);
+                    if (courseObj.list.length > 0)
+                    {
+                        var audioObj = courseObj.list[0];
+
+                        var image = audioObj.img;
+                        var audio = audioObj.audio;
+
+                        //下载图片
+                        if (image != null && image.url != "")
+                        {
+                            fileHelper.downloadFile(image.url, opt);
+                        }
+
+                        //下载语音
+                        if (audio != null && audio.url != "")
+                        {
+                            fileHelper.downloadFile(audio.url, opt);
+                        }
+                    }
                 }
             }
             /*课件-End*/
@@ -199,6 +223,19 @@ router.get("/readFile", function (req, res)
         fileDirNew = fileDirStr.replace(/\*/g, '/');
     }
 
+    //判断文件是否存在
+    if (!fs.existsSync(fileDirNew))
+    {
+        ljRetState.code = 1;
+        ljRetState.msg = "文件没有找到"
+        ljRetState.success = false;
+        res.setHeader("Access-Control-Allow-Origin", "*");
+        res.json(ljRetState);
+
+        return false;
+    }
+
+
 
     var fileDir = fileHelper.getFileDir(fileDirNew)
     var fileProp = fileHelper.getFileProperty(fileDir);
@@ -226,6 +263,7 @@ router.get("/delFile", function (req, res)
     var uid = arg.uid;
     var token = arg.token;
     var lessonId = arg.lessonId;
+    console.info(arg);
     //获取参数
     logHelper.debug(arg);
 
@@ -293,8 +331,9 @@ router.get("/delFile", function (req, res)
 
     httpHelper.request(opt, function (error, res, body)
     {
-        let obj = JSON.parse(body);
 
+        let obj = JSON.parse(body);
+        console.info(obj);
         var lessonJsonObj = JSON.parse(body);
         if (lessonJsonObj.code == 200)
         {
@@ -306,36 +345,85 @@ router.get("/delFile", function (req, res)
             //遍历课件
             for (var i = 0; i < courseListSize; i++)
             {
-                //资源集合
-                var resourceList = courseList[i].list;
-
-                //资源数
-                var resourceSize = resourceList.length;
-
-                for (var j = 0; j < resourceSize; j++)
+                var courseObj = courseList[i];
+                //处理图片删除
+                if (courseObj.type == ljConst.RES_TYPE_IMAGE)
                 {
-                    logHelper.debug(resourceList[j].url);
-                    var url = resourceList[j].url;
-                    //fileHelper.downloadFile(url)
+                    //资源集合
+                    var resourceList = courseObj.list;
+                    //资源数
+                    var resourceSize = resourceList.length;
 
-                    var delFileProp = fileHelper.getFilePropertyNoMkdir(url);
-
-                    //未加密文件URL
-                    var file1 = null;
-                    if (delFileProp.fileType == ljConst.VIDEO_TYPE_M3U8)
+                    for (var j = 0; j < resourceSize; j++)
                     {
-                        file1 = delFileProp.folderDir + delFileProp.fileName + "_new.mp4";
+                        var url = resourceList[j].url;
+                        var delFileProp = fileHelper.getFilePropertyNoMkdir(url);
+                        var delFileDir = delFileProp.folderDir + delFileProp.fileName + "_new." + delFileProp.fileType;
+                        //判断文件是否存在
+                        if (fs.existsSync(delFileDir))
+                        {
+                            //删除路径
+                            fs.unlinkSync(delFileDir);
+                        }
                     }
-                    else
+                }//处理视频删除
+                else if (courseObj.type == ljConst.RES_TYPE_VIDEO)
+                {
+                    //资源集合
+                    var resourceList = courseObj.list;
+                    //资源数
+                    var resourceSize = resourceList.length;
+
+                    for (var j = 0; j < resourceSize; j++)
                     {
-                        file1 = delFileProp.folderDir + delFileProp.fileName + "_new." + delFileProp.fileType;
+                        var url = resourceList[j].url;
+                        var delFileProp = fileHelper.getFilePropertyNoMkdir(url);
+                        var delFileDir = delFileProp.folderDir + delFileProp.fileName + "_new.mp4";
+
+                        //判断文件是否存在
+                        if (fs.existsSync(delFileDir))
+                        {
+                            //删除路径
+                            fs.unlinkSync(delFileDir);
+                        }
                     }
-
-                    //判断文件是否存在
-                    if (fs.existsSync(file1))
+                }
+                //处理语音删除
+                else if (courseObj.type == ljConst.RES_TYPE_AUDIO)
+                {
+                    if (courseObj.list.length > 0)
                     {
-                        //删除路径
-                        fs.unlinkSync(file1);
+                        var audioObj = courseObj.list[0];
+
+                        var image = audioObj.img;
+                        var audio = audioObj.audio;
+
+                        //删除图片
+                        if (image != null && image.url == "")
+                        {
+                            var delFileProp = fileHelper.getFilePropertyNoMkdir(url);
+                            var delFileDir = delFileProp.folderDir + delFileProp.fileName + "_new." + delFileProp.fileType;
+                            //判断文件是否存在
+                            if (fs.existsSync(delFileDir))
+                            {
+                                //删除路径
+                                fs.unlinkSync(delFileDir);
+                            }
+                        }
+
+                        //删除语音
+                        if (audio != null && audio.url == "")
+                        {
+                            var delFileProp = fileHelper.getFilePropertyNoMkdir(url);
+                            var delFileDir = delFileProp.folderDir + delFileProp.fileName + "_new.mp3";
+
+                            //判断文件是否存在
+                            if (fs.existsSync(delFileDir))
+                            {
+                                //删除路径
+                                fs.unlinkSync(delFileDir);
+                            }
+                        }
                     }
                 }
             }

+ 1 - 1
test/json.js

@@ -1,7 +1,7 @@
 var fs = require('fs');
 var logHelper = require("../helper/LjLogHelper.js");
 
-var lessonJsonObj = JSON.parse(fs.readFileSync("./audio.json"));
+var lessonJsonObj = JSON.parse(fs.readFileSync("../audio.json"));
 /*课件-Begin*/
 //课程集合
 var courseList = lessonJsonObj.data.list;