風雲論壇后台开发 → 浏览:帖子主题
* 帖子主题:Node.js 实现支持客户端多点下载
風雲 (ID: 3)
头衔:论坛版主
等级:天使
积分:1474
发帖:66
来自:保密
注册:2022/3/30 15:28:53
造访:2024/7/15 10:02:25
[ 第 1 楼 ] 回复
示例代码如下:
    // 静态文件处理
    ,file(site) {
        // 判断是否 ASP
        if(/\.asp$/i.test(site.env.URL)) return this.asp(site);
        var file = path.join(site.host.root, site.env.URL);
        stat = fs.statSync(file);
        var headers = { "Content-Type": getMime(path.extname(file)) };
        var output = (code, arg) => {
            headers["Last-Modified"] = stat.mtime.toUTCString();
            site.res.writeHead(code, headers);
            if(site.req.method == "HEAD") return site.res.end();
            fs.createReadStream(file, arg || {}).pipe(site.res)
        };
        var rangeHeader = site.req.headers.range;
        // 没有 Range 头时
        if(!rangeHeader) {
            headers["Content-Length"] = stat.size;
            headers["Cache-Control"] = "max-age=2592000";
            return output(200);
        }
        // 存在 Range 头时
        var [ start, end ] = rangeHeader.match(/(\d+)/g) || [];
        if(!start) start = 0;
        if(!end) end = stat.size - 1;
        var contentLength = end - start + 1;
        headers["Content-Range"] = `bytes ${start}-${end}/${stat.size}`;
        headers["Accept-Ranges"] = "bytes";
        headers["Content-Length"] = contentLength;
        output(206, { start: start - 0, end: end - 0 });
    }
2024/2/2 11:38:18 IP:已设置保密
風雲 (ID: 3)
头衔:论坛版主
等级:天使
积分:1474
发帖:66
来自:保密
注册:2022/3/30 15:28:53
造访:2024/7/15 10:02:25
[ 第 2 楼 ] 回复
根据 Range 头实现多点下载,以优化下载性能。同时实现的功能包括:断点续传及视频拖动播放。
2024/2/2 11:40:44 IP:已设置保密
分页: 1, 共 1 页
快速回复主题
账号/密码
用户: 没有注册? 密码:
评论内容