我正在构建一个使用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);
});
我可以从两个文件夹中获取文件列表。但我需要在客户端播放音频文件
答案 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("--------------------------------------------------------");
});
我们将不胜感激。