nodejs版本大文件之断点下载

nodejs版本大文件之断点下载

点点

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


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

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
如果只有一两个,我们可以通过高版本的powerpoint软件直接打开ppt然后另存为pptx格式即可,但是如果是几百上千个文件,估计大部分人都会来找工具了。
相信小伙伴们都有发生过这样的事情,由于群聊消息太多,于是就习惯性的把聊天窗口给关闭了,但是在关闭之前却忘记了将群保存到通讯录里,在次想入群聊天的时候,却怎么也无法找到入口了,除非是有人在群里发消息,只有这样才可以看到群聊,真的是太难受了。
通讯工具有很多,微信账号作为我们实时通讯最常用的软件账号,但是有很多小伙伴们会遇到各种体验不好的可能,所以会想要注销自己的微信账号,其中很多小伙伴们想要知道如何注销微信账号,如何注销微信账号?
微信是我们常用的交流工具,我们在平时聊天中会发送图片产生内存过大的问题,很多小伙伴对此非常头疼,那么我们该怎样处理哪,点点告诉小伙伴们在电脑端怎么去查看导出并删除的方法。
在日常生活中微信作为现在使用最多的即时通讯软件之一,微信电脑版,截图应该是小伙伴们使用比较多需要经常用到的功能了,但对于那些不常使用电脑版微信的朋友,怎么使用微信截图还是不太清楚?
电脑办公的时候经常用到微信,但是一个微信却又满足不了大部分人的需求,电脑版微信是默认不能多开的,比如一些宝妈在家里做微商,但是一个微信肯定无法满足需求,电脑版微信多开需求就孕育而生,今天这个教程就是为小伙伴们解决这个令人头疼的问题。
小伙伴们在使用QQ的过程中,无法避免误删了一些重要的聊天记录,而使用QQ的大多数原因都是因为微信无法传送大存储量的文件,所以很多小伙伴们都会利用QQ来传送文件,手机QQ聊天记录删除了怎么恢复?
现在时下qq是很多年轻的小伙伴重要的交流工具,很多热恋的情侣,整天没日没夜私发双方的照片。可也因为一点小事提了分手,可求原谅太难了!一没有保存对方照片不知道如何是好?但是小编带你如何解决这些疑惑。