国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

Node.JS段點續傳:Nginx配置文件分段下載功能的實現方法

2024-05-06 16:43:01
字體:
來源:轉載
供稿:網友

Html5 提供了一個新的 Range 標簽來實現文件的分段下載。在Node.JS中可以配置這個標簽來實現文件的分段下載。

Header標簽

請求 Request Header: 下載 3744 以后的文件內容

range: bytes=3744-

返回 Response Header: 文件總長 15522643 個字節

accept-ranges': 'bytes'content-range': 'bytes */15522643'

Nginx配置

首先要配置Nginx支持range標簽返回,很簡單添加 add_header Accept-Ranges bytes; 這一行即可

server { listen 80; server_name adksdf.com; location ~ ^/(img/|js/|css/|upload/|font/|fonts/|res/|icon) {  add_header Access-Control-Allow-Origin *;  add_header Accept-Ranges bytes;  root /var/www/...;  access_log off;  expires max; } ...}

啟用以后,如果node.js端發送了含有 range header的請求信息,那么nginx會返回含有range相關的信息:

這是一段完整的Response Header,注意這里的 content-length 不是文件的總長度,而是當前 range 的長度。

{ server: 'nginx', date: 'Wed, 24 Jan 2018 02:43:20 GMT', 'content-type': 'application/zip', 'content-length': '12420187', 'last-modified': 'Tue, 16 Jan 2018 12:09:47 GMT', connection: 'close', etag: '"5a5deb8b-ecdb53"', expires: 'Thu, 31 Dec 2037 23:55:55 GMT', 'cache-control': 'max-age=315360000', 'access-control-allow-origin': '*', 'accept-ranges': 'bytes', 'content-range': 'bytes 3102456-15522642/15522643' }

可以根據這個header中的content-range來獲取文件的總大小。

Node.JS實現

這段示例先檢測本地下了一半的文件,然后以 'r+' 讀寫模式創建文件流,并將response流寫入文件。

這里將表態文件添加 range 的支持。

var reqOptions = { url: packageUrl, headers: {} }var filepath  = '/path/to/your/part/file'var fileOptions = {}fs.stat(filepath, function(err, states) { if (states) {  //Range: bytes=3744-  reqOptions.headers['range'] = 'bytes=' + states.size + '-'  fileOptions = { start: states.size, flags: 'r+' } } //創建 http 對象方法 var reqUrl = reqOptions.url var urlObj = url.parse(reqUrl) var options = {   hostname : urlObj.hostname  , port   : urlObj.port  , path   : urlObj.pathname  , headers  : reqOptions.headers || {} } var req = http.request(options, function(res) {  var receives  = []  var err     = null  var statusCode = res.statusCode  var headers   = res.headers  var ws = fs.createWriteStream(filepath, fileOptions)  ws.on('error', function(e) {   console.log('ws error', e)  })  res.on('data', function(chrunk) {   ws.write(chrunk)  })  res.on('error', function(err) {   ws.end()  })  res.on('end', function() {   ws.end()  }) }) req.on('error', function(e) {  cb && cb(e, null, {}) }) req.end() ...})

返回Header

在請求nginx可能會返回其他status code,比如說 206或416,含意如下:

206 Partial Content

返回的是部分文件內容

416 Requested Range Not Satisfiable

請求的range超過文件尺寸

總結

以上所述是小編給大家介紹的Node.JS段點續傳:Nginx配置文件分段下載功能的實現方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巫山县| 蒙城县| 寻乌县| 望都县| 东明县| 喜德县| 新河县| 万山特区| 天津市| 津南区| 鸡西市| 新宁县| 游戏| 大化| 柘荣县| 阿克陶县| 顺平县| 昌吉市| 昭平县| 肇州县| 元谋县| 宿迁市| 盐城市| 安仁县| 伊川县| 新营市| 阜康市| 安溪县| 常山县| 西宁市| 尚志市| 彰化县| 新河县| 上饶县| 金坛市| 四子王旗| 洛宁县| 巴南区| 禄劝| 大方县| 葵青区|