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,微信,钉钉。有时候想要保存一些微信聊天记录,要如何才能永久储存呢?办法有很多,这个方法是最省钱省事保存最久的,可以将它们导入到word中,下面是具体办法,小编带小伙伴走一遭!
很多时候我们拿到新手机或者是更新全新的系统之后,都会或多或少新增一些功能,其中很多用户在使用小米手机的时候想要知道MIUI13怎么设置锁屏密码,这样可以保证手机的安全,下面就让小编给小伙伴们介绍一下。
当我们使用手机微信办公、学习下载需要的文件时,下载的文件会存储在什么位置呢,如何在手机文件管理中找到下载的文件存储位置,下面就和小编一起来看看吧!
为实现华为手机与电脑的文件传输与共享,以下需要在手机和电脑上所做的设置是一次性的,在最初使用前设置好即可,以后使用时无需再次设置。
生活与工作中,我们在使用微信时,肯定需要发送比较大(不能发送超过100mb的视频)的视频文件,很早的时候都是用QQ与微信的互传,这样就是有点麻烦,点点这期跟小伙伴们分享一个比较简单的方法。
电视是每家必备的生活用品,智能电视现在越来越普遍,智能电视不仅可以看电视、电影、综艺之外,还可以安装一些软件,从而在电视上玩游戏、办公等等,大家常知的方式是用U盘安装,那如果没有U盘该怎么给电视安装软件呢,下面就和点点一起来看看吧!
爬虫与反爬一直在不停的斗争,手段层次不穷。字体反爬算是常见的一种手段,大抵的思路是通过字体文件将浏览器渲染结合起来,让浏览器看到的内容与肉眼看到的内容不一致,达成一定的反爬目的。
这几天很多小伙伴们私信点点,问点点这个问题,今天点点就给小伙伴们写了一篇关于安卓系统和苹果系统怎么查看微信撤回消息的文章,希望小伙伴们喜欢,不过好奇害死猫啊!要慎重的去看这个事情。