2015-08-13 76 views
0

我正在構建使用nodejs和express構建的nodejs應用程序。 該應用程序基本上可用作REST URL調用。前端用angularjs編寫。文件讀取合併並使用nodejs創建URL

目前我不得不建立一個可以播放聲音並顯示其文本的應用程序。爲了簡單起見,我們已經從wav文件中提取文本並將其放入另一個文件夾中。

在一個文件夾中,我們有wav文件的集合運行到數千並在同一級別的其他文件夾中,我們有一個包含所有文字

WAV (FOLDER) 
TEXT (FOLDER) 

在WAV文件夾中的文本文件,我有一個文件

2044197581O0140602 - zIgnacio, Ohmar.wav 

在文本文件夾我有一個包含相同的文件及其speect文本

2044197581O0140602-zIgnacio,Ohmar.txt 

這是確切的文件名。問題是我必須建立一個系統,以便所有這些文件可以顯示在前端。並在播放文本時顯示(這裏的時間不重要)。

我使用nodejs。我知道我無法從前端上傳數千個文件。所以它必須從後端完成。

可以有一個地方,我可以將這兩個文件合併到有意義的JSON JS對象中,並使用nodejs返回Object URL。

請建議使用的NodeJS

我寫了這個

function FolderReaderMerger(path,pathToMerge,cb) 
{ 

    log("Reading File/Folder"); 
    fs.readdir(path, function(err, files1) 
    { 
     fs.readdir(pathToMerge, function(err, files2) 
     { 
     log(files1); 
     log(files2); 
     var obj ={}; 
     obj.wav = (files1); 
     obj.wavText = (files2); 
     cb(obj); 

     }); 
    }); 

} 

,但我需要wav文件conplete路徑轉換爲URL,並將其添加到JSON來處理這個架構沒有什麼好的辦法。 sp,我可以擊中該網址並播放該文件瀏覽器端。任何幫助

調用上面的函數

FolderReaderMerger(WAV,TEXT,function(res) 
    { 
     log("COMBINED FILES"); 
     log(res); 
     log(res.length); 
     global.combined = res; 
     }); 

而且一個get URL

app.get("/api/getCombinedFiles",function(req,res) 
{ 

    res.send(global.combined); 

}); 

我能夠從兩個文件夾獲取文件的列表。但我需要播放客戶端的音頻文件

+0

WAV文件名是否真的包含多餘的空格?爲什麼不能只做兩個AJAX請求,一個用於文本文件,一個用於相應的wav文件? – paulpdaniels

+0

這些是實際的文件。我不需要完整的文件使用AJAX作爲fiels運行在千兆字節。所以我打算將它們合併爲一個帶有文本文件的wavfile和一個到boith文件的URL的JSON。所以前端可以流數據或類似的東西 – Siddharth

+0

把文件放在你的靜態文件夾中,並使用你的靜態路徑創建一個url – Subham

回答

0

我已經能夠想出這個。我使用URL發送文件sendFile =「某個文件」,然後節點檢查該文件。如果成功,我開始在客戶端獲取流,並將其直接放入視頻src中。但是我需要更多的控制權。例如當用戶點擊某個時間線時,我可以直接從那裏開始strweaming。

app.get用於獲取存儲文件的文件夾的位置。 剛剛使用express和nodejs

function FolderReaderMerger(path,pathToMerge,cb) 
{ 

    log("Reading File/Folder To Combine : "); 
    fs.readdir(path, function(err, audio) 
    { 
     fs.readdir(pathToMerge, function(err, audioText) 
     { 

     var obj ={}; 
     global.list.audio =audio; 
     global.list.audioText =audioText; 

     obj.audio = audio; 
     obj.audioText = audioText; 

     cb(obj); 

     }); 
    }); 

} 


app.get("/audio",function(req,resp) 
{ 
    log("App Audio File Serv : "); 
    var playFile = req.param("playFile"); 
    var filePath = {}; 
    filePath.status =false; 


    if(playFile!=undefined) 
    { 
    log("Params File : "+playFile); 
    /* log("Requested URL : "+req.url); 
    log("Total Audio Files : "+global.list.audio.length);*/ 
    var i =0; 
    while(i!=global.list.audio.length) 
    { 
     if(playFile==global.list.audio[i]) 
     { 
     log("File Found : "+playFile); 
     //get files location 
     log(app.get("audioPath")+playFile); 
     filePath.status = true; 

     var filePath = app.get("audioPath")+playFile; 
     log("FILE PATH : "+filePath); 

     var stat = fs.statSync(filePath); 
     log(stat); 
     log(stat.size); 
     resp.writeHead(200, { 
      'Content-Type': 'audio/mpeg', 
      'Content-Length': stat.size 
     }); 

     var readStream = fs.createReadStream(filePath); 
     // We replaced all the event handlers with a simple call to readStream.pipe() 
     log("Streaming......."); 
     readStream.pipe(resp); 
     } 
     else 
     { 
     log("Requested Resource Not Found"); 


     } 
     i+=1; 
    } 
    //readStream = fs.createReadStream(app.get("audioPath")); 
    } 
    else 
    { 
     log("Requested Params Not Found"); 
     resp.send(filePath); 
    } 
}); 



http.listen(app.get("PORT"),function() 
{ 
consolelog("--------------------------------------------------------"); 
console.log("Server Started On PORT: "+app.get("PORT")); 
console.log("All NPM Initialized"); 
console.log("Please Wait Checking Connection Status..."); 
console.log("--------------------------------------------------------"); 

    }); 

任何幫助,將不勝感激。

相關問題