nodejs版本大文件之断点下载

nodejs版本大文件之断点下载

点点

2021-04-26 20:33 阅读 717 喜欢 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应该没有不知道的吧,作为国内最常使用的即时通讯软件之一,QQ仍然还是很多小伙伴们日常交友聊天的必用软件。但如果是在电脑上使用QQ接收文件,这些接收的QQ文件在电脑哪个文件夹中呢?
微信是目前非常流行的社交软件,相信小伙伴们在目前的生活以及工作中,一定已经变成了必不可少的一款工具吧。而在使用微信进行聊天沟通时,添加好友也成为了和新朋友进行沟通前所必须要做的一件事情。
在很久之前,微信为所有用户带来了年账单功能,小伙伴们可以随时通过年账单统计看到自己在指定的年份、月份看到消费账单支出,以及对应的支付分类,现在稍微有点改动,不过影响不大,那具体怎么看微信年账单统计呢,下面就和涂涂一起来看看吧!
易用、简洁且高效的http库
现在最流行的就是在手机上就可以打卡了,早就不用什么打卡机了,还得输入指纹多麻烦,钉钉可以说是现如今大小企业用的最多一款智能移动办公平台了,但是还有不少的人也许还不清楚了解钉钉自动上下班打卡有多方便。
在日常生活中,每个人都有自己的风格,例如电脑微信图标,很多小伙伴们喜欢把任务栏的图标隐藏起来,变得更加简约。一定会有多数小伙伴还不知道如何去隐藏微信图标吧,和如何修改微信电脑版的标签与权限呢?
点点在使用电脑时,基本上都是在使用QQ输入法,可有的时候突然就不见了,非常难受,经过不停的实验终于摸索出来了,现在分享出来,希望可以为小伙伴们节省时间,更加高效的生活与工作。当我们在电脑上使用QQ输入法时,QQ输入法不见了隐藏了怎么办?电脑QQ输入法不见了怎么调出来?下面就和点点一起来看看吧!
现在有很多企业都在使用钉钉办公,有些小伙伴们不知道电脑钉钉怎么设置OA审批人员,接下来小编就给小伙伴们介绍一下具体的操作步骤。