日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

框架

語言: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
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定