欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Node.js断点续传的实现

程序员文章站 2022-03-07 07:59:35
前言平常业务需求:上传图片、excel等,毕竟几m的大小可以很快就上传到服务器。针对于上传视频等大文件几百m或者几g的大小,就需要等待比较长的时间。这就产生了对应的解决方法,对于大文件上传时的暂停、断...

前言

平常业务需求:上传图片、excel等,毕竟几m的大小可以很快就上传到服务器。
针对于上传视频等大文件几百m或者几g的大小,就需要等待比较长的时间。

这就产生了对应的解决方法,对于大文件上传时的暂停、断网、网络较差的情况下,  使用切片+断点续传就能够很好的应对上述的情况

方案分析

切片

就是对上传视频进行切分,具体操作为:

file.slice(start,end):返回新的blob对象

  • 拷贝blob的起始字节
  • 拷贝blob的结束字节

断点续传

每次切片上传之前,请求服务器接口,读取相同文件的已上传切片数
上传的是新文件,服务端则返回0,否则返回已上传切片数

具体解决流程

该demo提供关键点思路及方法,其他功能如:文件限制,lastmodifieddate校验文件重复性,缓存文件定期清除等功能扩展都可以在此代码基础上添加。

html

script

node服务端

upload_file

逻辑分析

前端

首先请求上传查询文件是否第一次上传,或已存在对应的切片

  • 文件第一次上传,则切片从0开始
  • 文件已存在对应的切片,则从切片数开始请求上传

循环切片数组,对每块切片文件进行上传

  • 其中使用了模拟手动暂停请求,当切片数大于90取消请求

服务端

接收查询文件filename,查找临时存储的文件地址,判断是否存在对应上传文件

  • 从未上传过此文件,则返回0,切片数从0开始
  • 已上传过文件,则返回对应切片数

接收上传文件切片,文件存入临时存储目录

  • 通过count和total判断切片是否上传完毕
  • 上传完毕,创建文件保存目录,并创建可写流,进行写入操作
  • 提取对应临时文件放入数组,循环文件目录数组,依次读取并写入文件buffer
  • 写入完毕,关闭可写流。

小结

以上代码涉及到具体的业务流程会有所更改或偏差,这只是其中一种具体实现的方式。
希望这篇文章能对大家有所帮助,如果有写的不对的地方也希望指点一二。

以上代码地址:https://github.com/surprise-ling/uploadfiles

到此这篇关于node.js断点续传的实现的文章就介绍到这了,更多相关node.js 断点续传内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!