nodejs版本大文件之断点下载

nodejs版本大文件之断点下载

点点

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


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

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
直播带货已经成为当今的主流,许多小伙伴都喜欢在快手小黄车中购买主播卖的商品,我们在交易过程中需要与客服进行联系,那么我们应该怎么查看与客服的聊天信息呢?今天,小编就教小伙伴们在快手小黄车中查看客服信息。
小伙伴们在玩华为手机过程中,手机拍照、截图、聊天等都会产生数据文件占用手机内存,当手机空间不足时就会影响小伙伴们的使用体验,那怎么清理华为手机内存空间呢?
易用、简洁且高效的http库
公司报销的时候虽然已经有了电子发票,但是贴票还是需要将发票打印出来贴上,如果只有一两张也就算了,如果几十张.. 找了好多工具、在线版本都不合心意,做个自己喜欢的吧。
我对canvas中rotate其实是一脸蒙逼的... 虽然之前有做过图片旋转,但那是在他人的基础上直接修改的,至于为啥会这样..讲真,还真没注意过,但是今天又需要用到这块了,实在搞不定了,找了各种资料,终于明白了.. 坐标系的问题。
近期很多当红app被央视点名,主要原因是我们个人的信息被过度的无情泄露了,微信聊天中我们可能用到很多私密的东西,比如身份证,银行卡等。即使我们有防范意识,在我们的聊天中删除了从我们手机的图库中删除啦。我们感觉可以放心啦.真的是这样吗?真的可以放心了吗?看一下下面的文章,你会有自己的选择。
日常生活中,我们经常用到微信,微信退了忘记了密码咋办?那么如何才能在不知道原始密码的情况下重置密码呢?
现在的企业基本都会使用钉钉打卡,因为比较指纹机与打脸机来说,钉钉是最便宜的,只需要个蓝牙和咱们的手机就可以啦,那钉钉是需要管理员对员工进行管理的,比如上班人员与离职人员的管理,下面小编就带小伙伴们看一下,离职员工的删除如何处理。