Node.JS实现段点续传配置文件的分段下载

这次给大家带来Node.JS实现段点续传配置文件的分段下载,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超过文件尺寸                                        

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

vue.js底部导航栏的子路由不显示怎么处理

JS如何实现随机切换微信号

以上就是Node.JS实现段点续传配置文件的分段下载的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2773722.html

(0)
上一篇 2025年3月8日 13:57:25
下一篇 2025年3月8日 13:57:32

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue.js底部导航栏的子路由不显示怎么处理

    这次给大家带来vue.js底部导航栏的子路由不显示怎么处理,处理vue.js底部导航栏子路由不显示的注意事项有哪些,下面就是实战案例,一起来看一下。 最近利用vue第三方UI MuseUI开发webapp,然后在导航栏这里出现了问题,我需要…

    编程技术 2025年3月8日
    100
  • vue.js中怎么导入css库

    这次给大家带来vue.js中怎么导入css库,vue.js中导入css库的注意事项有哪些,下面就是实战案例,一起来看一下。 1.安装以下模块,让webpack可以解析css文件 cnpm install style-loader –sav…

    编程技术 2025年3月8日
    200
  • Vue.js怎样实现图片可以随意拖动摆放

    相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章! 推荐阅读: 这次给大家带来Vue.js怎样实现图片可以随意拖动摆放,Vue.js实现图片可以随意拖动摆放的注意事项有哪些,下面就是实战案例,一起来看一下。 主要代码如…

    编程技术 2025年3月8日
    200
  • js怎样实现中文拼音的A-Z排序

    这次给大家带来js怎样实现中文拼音的A-Z排序,js实现中文拼音的A-Z排序的注意事项有哪些,下面就是实战案例,一起来看一下。 实现中文按照A-Z的方法,可以在vue的methods里面写入: methods:{ pySort:functi…

    编程技术 2025年3月8日
    200
  • vue.js移动数组位置并实时更新视图

    这次给大家带来vue.js移动数组位置并实时更新视图,vue.js移动数组位置并实时更新视图的注意事项有哪些,下面就是实战案例,一起来看一下。 使用vue.js v-for绑定若干个选项,需要对选项进行排序上下移动操作。 需要对option…

    编程技术 2025年3月8日
    200
  • angular4的JS内存溢出问题如何解决

    这次给大家带来angular4的JS内存溢出问题如何解决,解决angular4的JS内存溢出问题注意事项有哪些,下面就是实战案例,一起来看一下。 最近在写基于angular4的项目的时候,在build –prod的时候,突然措手…

    编程技术 2025年3月8日
    200
  • vue配置怎么请求本地的json数据

    这次给大家带来vue配置怎么请求本地的json数据,vue配置请求本地的json数据的注意事项有哪些,下面就是实战案例,一起来看一下。 在build文件夹下找到webpack.dev.conf.js文件,在const portfinder …

    编程技术 2025年3月8日
    200
  • JS如何实现JSON数组内的去重算法

    这次给大家带来js如何实现json数组内的去重算法,js实现json数组的重算法的注意事项有哪些,下面就是实战案例,一起来看一下。 需求描述:去除JSON数组中paymode字段相同的项,并将paymoney累加。 paylist:[{pa…

    编程技术 2025年3月8日
    200
  • JS的深浅拷贝使用步奏的详解

    这次给大家带来JS的深浅拷贝使用步奏详解,使用JS深浅拷贝的注意事项有哪些,下面就是实战案例,一起来看一下。 说到深浅拷贝,必须先提到的是JavaScript的数据类型,之前的一篇文章JavaScript基础心法——数据类型说的很清楚了,这…

    编程技术 2025年3月8日
    200
  • js数据类型的使用详解

    这次给大家带来js数据类型的使用详解,js数据类型使用的注意事项有哪些,下面就是实战案例,一起来看一下。 由于自己是野生程序员,在刚开始学习程序设计的时候没有在意内存这些基础知识,导致后来在提到“什么什么是存在栈中的,栈中只是存了一个引用”…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论