如何用Node.js本地流服务器在浏览器仅显示MP4文件
问题:Node.js本地媒体流仅显示MP4文件
我尝试将本地视频流传输至Chrome浏览器,使用了以下server.js代码:
var walk = require('walk'); const app = express() const port = 3000; const ipaddr = "localhost"; app.use(express.static(path.join(__dirname, 'public'))) app.set('view engine', 'ejs'); const videoHomeDir = os.homedir() + `/Videos`; var files = []; var walker = walk.walk(videoHomeDir, { followLinks: false }); walker.on('file', function(root, stat, next) { files.push(root + '/' + stat.name); next(); }); walker.on('end', function() { console.log("GOT ALL VIDEOS") });
代码可正常运行,但会展示文件夹内所有类型的文件(MP4、TXT、JPG等),我希望仅显示MP4文件,请问如何通过Node.js本地媒体流实现这一需求?
解决方案
要只收集MP4文件,你可以在file事件回调中过滤文件扩展名:
方法1:手动拆分文件名判断
修改file事件的处理逻辑,仅当文件扩展名为.mp4(不区分大小写)时才加入数组:
walker.on('file', function(root, stat, next) { const fileExt = stat.name.split('.').pop().toLowerCase(); if (fileExt === 'mp4') { files.push(root + '/' + stat.name); } next(); });
方法2:使用path模块更规范处理
利用Node.js内置的path模块来获取扩展名,同时用path.join做路径拼接更安全(避免手动拼接的路径分隔符问题):
// 确保已引入path模块(你的代码里已经用到了path,应该已经导入) const path = require('path'); // ... walker.on('file', function(root, stat, next) { const fileExt = path.extname(stat.name).toLowerCase(); if (fileExt === '.mp4') { files.push(path.join(root, stat.name)); } next(); });
修改后,files数组只会存储MP4格式的文件,后续页面渲染时就只会展示视频文件了。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

