nodejs版本大文件之断点下载

nodejs版本大文件之断点下载

点点

2021-04-26 20:33 阅读 758 喜欢 0

框架

语言:nodejs 包:express fs

目的

通过nodejs实现一个大文件的断点下载的服务。

代码

由于没啥复杂的,这里直接上代码。 http断点下载是通过range来判断文件的起始位置的。其基本原理就是,在文件的下载断开以后。客户端继续向服务器端请求的时候,http请求的头文件中会多了一个参数“Range”,来标示当前下载的文件所断开的位置。

const express = require('express');
const fs = require('fs');
let app = express();
app.get('/', (req, res, next) => {
 let range = req.headers["range"];
// 下载文件路径
let p = 'workspace.rar';
// 存在 range 请求头将返回范围请求的数据
if (range) {
    // 获取范围请求的开始和结束位置
    let [, start, end] = range.match(/(\d*)-(\d*)/);
    // 错误处理
    let statObj = null;
    try {
        statObj = fs.statSync(p);
    } catch (e) {
        res.end("Not Found");
    }
    // 文件总字节数
    let total = statObj.size;
    // 处理请求头中范围参数不传的问题
    start = start ? parseInt(start) : 0;
    end = end ? parseInt(end) : total - 1;
    // 响应客户端
    res.statusCode = 206;
    res.setHeader("Accept-Ranges", "bytes");
    res.setHeader("Content-Range", `bytes ${start}-${end}/${total}`);
    fs.createReadStream(p, {
        start,
        end
    }).pipe(res);
} else {
    // 没有 range 请求头时将整个文件内容返回给客户端
    fs.createReadStream(p).pipe(res);
}
})
 app.listen(3000, () => {
console.log(`server is running at port 3000`)
 })

测试

可以通过wget命令来测试,-c是启用断点下载。

wget -c -d --limit-rate=2048k -O target "http://localhost:3000"

由于只是一个demo,用来做下载测试的,所以用nodejs做了个简单的,线上的话还是不要用这个了,有很多方案可以解决。

转载请注明出处: http://sdxlp.cn/article/nodejs.html


如果对你有用的话,请赏给作者一个馒头吧 ...或帮点下页面底部的广告,感谢!!

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
当我们在使用微信的时候,通常会拉黑对我们不友好的好友,但是因为一些误会我们想要把好友从微信黑名单中解除,但是因为微信的不断更新,很多用户找不到黑名单,所以想要知道微信黑名单怎么解除?
手机版微信软件被很多小伙伴使用,用来聊天,逛朋友圈等,有的小伙伴为了增加好友,因此想要打开向我推荐通讯录好友功能,但是却不知道如何打开,那么小编就来为小伙伴们介绍一下吧。
iPhone13一经发布就出现了各种小问题,其中最近有很多用户反映,iPhone13Pro系列会造成屏闪,很多用户会觉得长时间使用会造成眼睛的伤害,所以很多用户想要知道这个问题怎么解决,下面就让点点给小伙伴们介绍一下。
在科技和网络发达的现在,以前人们上下班随着从拿纸质卡进行打卡,变成了刷工作卡进行打卡,再到指纹打卡,再到现在更为便利的直接使用像钉钉这样的考勤软件来进行打卡,人们包包里的东西变的越来越少。而最近,有的小伙伴在使用钉钉打卡后,有这样的一个疑惑,就是钉钉电脑版可不可以将考勤记录导出来呢?
在微信中,经过版本更新迭代,推出了置顶聊天折叠功能,帮助我们将过多的置顶聊天折叠,折叠后同样是置顶显示,那怎么折叠置顶聊天呢,下面就和小编一起来看看吧!
如果你平时也不爱听六十秒的语音,或者是因为没带耳机,不方便听语音,那么不妨赶快跟着本文将语音自动转换成文字的方法设置起来,这样一来,不管是不爱听语音,还是不方便听语音,都能够轻松的知道别人想说的是什么了,令日常沟通变得更加便利。
现在智能化的时代,微信与QQ是最流行的聊天软件,但是咱们一直被吃内存而烦恼,个人建议进行备份后,再进行清理,现在小编教小伙伴们如何清理QQ的聊天记录。
微信公众号文章里的视频怎么下载?。看还是有很多人推荐啥工具啊,当然主题也是通过程序来获取内容。