文件读取合并并使用nodejs

时间:2015-08-13 19:09:54

标签: javascript angularjs node.js express html5-audio

我正在构建一个使用nodejs和express构建的nodejs应用程序。 该应用程序基本上作为REST URL调用。前端是用angularjs写的。

目前我必须构建一个可以播放声音并显示其文本的应用程序。为简单起见,我们从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我可以点击该URL并播放该文件浏览器端。任何帮助

调用上述功能

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

获取网址

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

    res.send(global.combined); 

 });

我可以从两个文件夹中获取文件列表。但我需要在客户端播放音频文件

1 个答案:

答案 0 :(得分:0)

我能够想出这个。我发送文件使用teh URL sendFile =" some file"然后节点检查该文件。如果成功我开始在我的客户端获取流,我把它直接放入视频src。但我需要对此进行更多的控制。例如当用户点击某个时间轴以便我可以直接从那里开始strweaming时。

app.get用于获取存储文件的文件夹的位置。 使用just 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("--------------------------------------------------------");

    });

我们将不胜感激。