nodejs版本大文件之断点下载

nodejs版本大文件之断点下载

点点

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


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

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
平常很多小伙伴喜欢看小说,问小编微信上怎么看,手机版微信读书软件被很小伙伴们使用,用来看小说等,有的小伙伴在使用该软件时,想要读更多有权限的小说,因此想要获得无限卡,但是却不知道如何获取,那么小编就来为小伙伴们介绍一下吧。
苹果手机相册的照片怎么删除不了?为什么苹果手机相册里的照片无法删除?
提供一个比较简单的小工具,或许能给你个灵感呢? 富文本内容存储在数据库,在页面展示的时候,需要向富文本添加一些字符串(比如说:ABCD ,又或者分数等)。
腾讯公司的微信、QQ都是现在十分常用的社交软件,很多的功能,都是可以相互使用的,可以在工作与生活中,增加很多的便利,有些新用户不知道如何将手机微信表情包发送到QQ.
生活中,微信是我们必备的软件,那么微信铃声主要在来新消息、语音/视频通话时提醒我们,可以通过设置来修改铃声,可以自定义铃声,或者使用官方提供的铃声,那具体怎么设置呢?下面就和点点一起来看看吧!
做爬虫或其他的一些应用的时候,如果需要一些短信验证,又没有那么多手机号,又不能放人在那里一直输入的时候?怎么办?
电脑的IP地址是我们在使用时都需要用到的,在连接网络或者是局域网时都可以使用到,所以很多小伙伴在装电脑的时候就需要此IP地址,但是很多小伙伴不知道win10ip地址查询电脑怎么查询?
微信中我们经常是跟自己比较熟悉的人去进行沟通聊天的,经常会有一些不想让别人看到的聊天记录,所以很多小伙伴们想要知道微信怎么删除聊天记录,那么下面就让点点给小伙伴们介绍一下具体的删除教程。