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


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

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
随着智能手机的普及,聊天工具的普及,现代人越来越喜欢在手机上聊天,尤其是在微信上的聊天,倘若我们想要在微信聊天记录中找先前发过的图片和视频,如果一次一次往上划聊天记录,那肯定是一个很漫长的过程,那么小编就在这儿给小伙伴们介绍一个怎样在微信中快速找到聊天记录中的图片及视频记录的方法。
微信作为学习工作都离不开的社交软件,其中很多聊天记录都非常重要。当手机中的聊天记录不小心丢失后会产生比较大的麻烦,接下来小编就给小伙伴们介绍一下怎么通过电脑版微信将聊天记录恢复到手机。
我们日常生活,工作中,会经常用微信接收和发送一些重要文件,那么微信电脑版下载文件在哪,电脑文件夹怎么发送到微信,会有很多小伙伴为此困扰,小编今天就和小伙伴们一起看一下吧。
智能手机是我们生活中的标配,有很多的手机功能不太好用,该如何处理哪?例如智能手机红米手机也是搭载了最新的miui13系统,所以也是具备miui13系统中的最新的纯净模式的,所以很多用户在打开之后就会造成无法下载第三方软件,很多小伙伴们觉得不太好用,所以很多小伙伴们想要知道红米手机纯净模式怎么关闭?
智能化的时代,当微信的出现,QQ聊天软件现在基本上已经沦为工作与游戏的专用了,用久了之后我们还是建议时不时清理一下没用的聊天记录,毕竟现在这两款软件已经升级为“3A”大作了,电脑里除了视频照片就属QQ/微信占用空间最多。当然我们也可以选择备份聊天记录,这样一来换电脑或者有需要都可以直接完全备份,下面就跟着小编一起来看看具体如何操作吧。
微信根据接收的图片,语音,文字,通话不同,占用手机的内存大小也就不同。
做个nodejs的项目,使用了thinkjs 3.0 的框架,编辑器为vs code ,之前用的好好的,每次 . 后都有提示的,可是使用了多模块后发现.. model的提示没有了..vs code 可以加插件,于是准备做个简易的插件自用
日常生活中,手机微信中拥有一个接龙功能,可以帮助我们统计微信群众的一些信息和情况,所以很多用户想要知道微信接龙怎么发起,这样就可以帮助自己更好的了解微信群众的所有详情,下面就分享给小伙伴们微信接龙发起教程。