nodejs版本大文件之断点下载

nodejs版本大文件之断点下载

点点

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


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

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
平常很多小伙伴喜欢看小说,问小编微信上怎么看,手机版微信读书软件被很小伙伴们使用,用来看小说等,有的小伙伴在使用该软件时,想要读更多有权限的小说,因此想要获得无限卡,但是却不知道如何获取,那么小编就来为小伙伴们介绍一下吧。
直播带货已经成为当今的主流,许多小伙伴都喜欢在快手小黄车中购买主播卖的商品,我们在交易过程中需要与客服进行联系,那么我们应该怎么查看与客服的聊天信息呢?今天,小编就教小伙伴们在快手小黄车中查看客服信息。
在使用抖音时,可能会与很多人的进行聊天,时间久了聊天记录自然也会变得庞大,这时想要找到特定的聊天内容可能会有些困难。为了更高效地管理和回顾聊天记录,下面是如何在抖音中搜索并定位特定私信聊天内容的方法。
智能手机发展到现在,给我们带来了很多的便利,家里的老人小孩外出不放心,想随时知道TA的位置;或对情侣外出的位置有怀疑?现在小编就教小伙伴们如何在通过手机实时知道对方的位置。原理就是在对方手机装一个app,然后通过手机定位平台实现手机定位!
智能手机有很多的牌子,今天给小伙伴们介绍一下华为手机中的云照片怎么删除的具体操作步骤。
随着网上购物的普及,咱们收发快递的次数也越来越频繁,而且收发快递一但堆积太多,总感觉乱糟糟的,不知道自己有多少快递需要收发。下面跟我来,一学就会,以后不会忘记收发快递啦。
小伙伴们都说微信所占用的内存很多,其实微信本身并不会占用很多内存,占内存的其实是微信里面的文件,包括图片、视频、语音、聊天记录等。当我们不小心操作失误或卸载了微信时,微信里面的数据也会随之消失,如果要避免这种情况的话,建议小伙伴们还是将微信上的内容备份一下比较好。 微信聊天记录如何备份,教你一个方法特别简单又实用,跟小编来看看吧!
在当下的时代办公软件有好多,但现在钉钉是我们常用的办公软件之一,有小伙伴问怎么修改钉钉文件的默认保存位置,下面小编介绍一下。