nodejs版本大文件之断点下载

nodejs版本大文件之断点下载

点点

2021-04-26 20:33 阅读 764 喜欢 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


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

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
在智能化的时代,微信是我们日常生活与工作中必不可少的软件,微信是一款社交聊天软件,有很多的小伙伴们在使用的过程中比较好奇微信上如何登陆QQ呢
现在的企业基本都会使用钉钉打卡,因为比较指纹机与打脸机来说,钉钉是最便宜的,只需要个蓝牙和咱们的手机就可以啦,那钉钉是需要管理员对员工进行管理的,比如上班人员与离职人员的管理,下面小编就带小伙伴们看一下,离职员工的删除如何处理。
智能手机是我们常用的生活必备品,在苹果手机中微信视频通话是一个常用的功能,不过一般的视频是用的原相机,那么如何在苹果手机使用微信视频通话过程中开启视频效果呢?这里为小伙伴们带来分享,看一下有关的设置教程。
在智能手机使用中苹果手机用户量是庞大的,在我们使用苹果手机的时候,很多用户都会使用隔空投送功能,可以轻松的把自己手机的东西投送到另一台设备上,并且没有网络的情况下也可以使用,但是因为很多设备名字都类似,很多小伙伴们找不到另一台手机,想要知道苹果手机隔空投送名字怎么改?
在excel中,有一个叫做VBA的宏功能,通过这个功能,我们能够实现很多数据库中才能实现的功能。如果小伙伴们觉得我们平常看见的登录数据的验证窗口只有采用数据库才能实现的话,那么你就错了,那种功能同样可以使用excel来制作,下面我们可以一起看看具体的方法。
现在最流行的就是在手机上就可以打卡了,早就不用什么打卡机了,还得输入指纹多麻烦,钉钉可以说是现如今大小企业用的最多一款智能移动办公平台了,但是还有不少的人也许还不清楚了解钉钉自动上下班打卡有多方便。
小伙伴们在自驾出远门时,是不是有和我同款的路盲人士呀?基本远行都是不记路,开导航的,那我经常使用的就是高德了,高德有好多的语音,高德地图一条小团团语音包怎么设置?在最近,高德地图上线了一条小团团的导航语音包,很多人都想将自己的导航语音包设置为一条小团团的语音包,但是具体该怎么设置呢,怎么更换为一条小团团语音包,下面就和点点一起来看看吧!
智能手机换手机时,怎么把微信聊天记录导入新手机?微信是我们日常生活中都会使用的社交平台,在聊天的过程中会记录很多的信息,在更换手机时,该怎么将旧手机的聊天内容转移导入到新手机呢?下面就和小编一起来看看吧!