You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:00:23