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

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:20:48
字體:
來源:轉載
供稿:網友

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,含意如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 增城市| 新源县| 罗定市| 临汾市| 淳化县| 陵川县| 榕江县| 泰兴市| 富阳市| 平度市| 从江县| 阿克苏市| 武夷山市| 三门峡市| 徐州市| 利辛县| 舟曲县| 周至县| 湖北省| 富蕴县| 连江县| 乃东县| 浙江省| 宣城市| 大渡口区| 玉环县| 钦州市| 寿光市| 凤冈县| 苗栗市| 宜良县| 鹤山市| 绥江县| 金华市| 且末县| 灵山县| 江油市| 陆河县| 井研县| 项城市| 鄂尔多斯市|