美文网首页
NodeJs实现http 断点续传206

NodeJs实现http 断点续传206

作者: helloyoucan | 来源:发表于2020-09-25 11:37 被阅读0次
    const http = require('http');
    const fs = require('fs');
    const filePath = './1.mp4';
    const server = http.createServer((req, res) => {
        const range = req.headers.range
        if (range) {
            const stat = fs.statSync(filePath);
            const fileSize = stat.size;
            const rangeList = range.replace("bytes=", "").split('-');
            const bufferSize = 1024 * 1024 * 2;//每次传输的字节数,或设置未为fileSize,让客户端尽可能长的获取字节数
            let startPos = parseInt(rangeList[0], 10);
            let endPos = startPos + bufferSize;
            if (endPos >= fileSize) {
                endPos = fileSize - 1;
            } 
            const ContentLength = endPos - startPos + 1;
            res.setHeader('Accept-Ranges', 'bytes');
            res.setHeader('Content-Range', 'bytes ' + startPos + '-' + endPos + '/' + fileSize);
            res.setHeader('Content-Length', ContentLength);
            if (endPos == fileSize - 1) {
                res.writeHead(206, 'Partial Content', {
                    'Content-Type': 'video/mp4',
                });
            } else {
                res.writeHead(206, 'Partial Content', {
                    'Content-Type': 'application/octet-stream',
                });
            }
            var fReadStream = fs.createReadStream(filePath, {
                encoding: 'binary',
                bufferSize:bufferSize,
                start:startPos,
                end:endPos
            });
            fReadStream.on('data', function (chunk) {
                res.write(chunk, 'binary');
            });
            fReadStream.on('end', function () {
                res.end();
            });
        } else {
            res.end();
        }
    });
    server.listen(3001);
    console.log('server.listen(3001)')
    

    相关文章

      网友评论

          本文标题:NodeJs实现http 断点续传206

          本文链接:https://www.haomeiwen.com/subject/ltffuktx.html