龙空技术网

nodejs版本大文件之断点下载

蚂蚁飞上天 103

前言:

此时你们对“c语言断点什么意思”都比较关心,大家都需要学习一些“c语言断点什么意思”的相关知识。那么小编在网摘上搜集了一些关于“c语言断点什么意思””的相关文章,希望我们能喜欢,咱们快快来了解一下吧!

框架

语言: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 ";

由于只是一个demo,用来做下载测试的,所以用nodejs做了个简单的,线上的话还是不要用这个了,有很多方案可以解决。

标签: #c语言断点什么意思