nodejs版本大文件之断点下载

框架语言: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做了个简单的 , 线上的话还是不要用这个了 , 有很多方案可以解决 。

【nodejs版本大文件之断点下载】


    推荐阅读