分享好友 最新动态首页 最新动态分类 切换频道
nodeJs + js 大文件分片上传
2024-12-27 10:15

一、准备文件上传的条件:

nodeJs + js 大文件分片上传

1、安装nodejs环境

2、安装vue环境

3、验证环境是否安装成功

二、实现上传步骤

1、前端部分使用 vue-cli 脚手架,搭建一个 demo 版本,能够实现简单交互:

2、安装 axios 实现与后端交互:

3、后端使用 node-koa 框架:

4、前端实现上传请求:

5、node 接收文件接口:

以上全部过程就实现了一个简单的文件上传功能。

 

 

 

这种实现方式上传功能对于小文件来说没什么问题,但当需求中碰到大文件的时候,能解决上传中遇到的各种问题,比如网速不好时、上传速度慢、断网情况、暂停上传、重复上传等问题。想要解决以上问题则需要优化前面的逻辑。

1、分片逻辑如下:

  • 由于前端已有 Blob Api 能操作文件二进制,因此最核心逻辑就是前端运用 Blob Api 对大文件进行文件分片切割,将一个大文件切成一个个小文件,然后将这些分片文件一个个上传。
  • 现在的 http 请求基本是 1.1 版本,浏览器能够同时进行多个请求,这将用到一个叫 js 异步并发控制的处理逻辑。
  • 当前端将所有分片上传完成之后,前端再通知后端进行分片合并成文件。

2、在进行文件分片处理之前,先介绍下 js 异步并发控制:

js 异步并发控制的逻辑是:运用 Promise 功能,定义一个数组 fetchArr,每执行一个异步处理往 fetchArr 添加一个异步任务,当异步操作完成之后,则将当前异步任务从 fetchArr 删除,则当异步 fetchArr 数量没有达到最大数的时候,就一直往 fetchArr 添加,如果达到最大数量的时候,运用 Promise.race Api,每完成一个异步任务就再添加一个,当所有最后一个异步任务放进了 fetchArr 的时候,则执行 Promise.all,等全部完成之后则执行回调函数。

上面这逻辑刚好适合大文件分片上传场景,将所有分片上传完成之后,执行回调请求后端合并分片。

前端改造:

1、定义一些全局参数:

2、文件分割方法:

以上方式的处理逻辑:定义一个切片缓存数组,当文件进行分片之后,将缓存所有的分片信息、根据最大分片大小计算分片数量、计算整个文件的 hash (spark-md5) 值,这将意味着,只要文件内容不变,这 hash 值也将不变,这涉及到后面的秒传功能、然后进行文件分片。

 3、改造上传方法:

 注意:以上代码中设置当文件大小大于分片大小的5倍进行分片上传。

4、定义分片上传请求(sendRequest)和合并请求(chunkMerge):

 5、分片请求将结合上面提到的 JS 异步并发控制:

 6、切片上传请求:

 7、切片合并请求:

前端处理文件分片逻辑代码已完成

后端处理

后端部分就只新增两个接口:分片上传请求和分片合并请求:

1、分片上传请求:

2、分片合并请求:

切片上传成功与文件合并截图:

 

1、前端暂停,续传功能:

2、js 新增主动暂停和续传方法,比较简单,这里没有做停止正在执行的请求:

前端大文件的分片上传就差不多了。还可以优化的一点,在进行文件 hash 求值的时候,大文件的 hash 计算会比较慢,这里可以加上 html5 的新特性,用 Web Worker 新开一个线程进行 hash 计算。

 

GitHub:https://github.com/554246839/file-upload

最新文章
都江堰seo优化价格【百度都江堰】
文章都江堰seo优化价格【百度都江堰】由网友旧时月色投稿,希望给你工作学习带来帮助。在当今数字化时代,搜索引擎优化(SEO)对于企业和个人的在线存在至关重要,都江堰作为一个充满活力和发展潜力的城市,也有许多企业和个人希望通过 SEO
构建个人投资组合网站:从基础到进阶
在数字时代,个人投资组合网站成为展示工作成果、技能和专业身份的不可或缺的平台。构建这样的网站不仅可以增强职业形象,还能在求职和客户互动中发挥关键作用。本章将引导你从零开始,详细探讨构建个人投资组合网站的整
谷歌浏览器ipad版
谷歌浏览器ipad版是专门针对苹果ipad设备而开发的一款平板电脑浏览器,全新的外观融入了Material Design设计元素,图形更醒目、操作更流畅、触感更灵敏,能够带给用户流畅的上网体验。另外本款google chrome浏览器ipad版同时还具备网页翻译
连城网站排名优化费用是如何计算的?
连城目前的关键词排名方式有哪些?连城目前关键词排名主要分为竞价排名和自然排名。1、连城关键词自然排名,指的是通过各种搜索引擎优化(seo)方式,使您网站的关键词在搜索引擎自然排名中靠前。2、连城关键词竞价排名,通过对搜索引擎充
请问小红书如何设定推广目标以实现精准引流与品牌爆发?
小红书作为一个集社交、内容分享与电商于一体的平台,为品牌提供了广阔的营销空间。要实现精准引流与品牌爆发,设定明确的推广目标并制定相应的营销策略至关重要。以下是一份详细的小红书营销攻略:一、设定推广目标提升品牌知 名度:通过
百度推出惊雷算法:严厉打击快速排名,对SEO有什么影响?
百度资源搜索平台于11月20日零点发布惊雷算法通知,为什么选择这个时间节点,可能希望有一个全新的起点吧,另外一个原因站长们都是夜猫子,这个时间点,可能大家访问频率比较高。  还是言归正传,百度惊雷算法都说了什么?  百度搜索将于
颜姓股民向ST亚联发起索赔 章祥兵律师接受咨询
  12月16日消息,新浪股民维权平台今日收到颜姓股民针对(维权)的维权申请,目前该维权咨询已被章祥兵律师接受。新浪股民维权平台将关注该股民的索赔进程,相关维权持续征集中。  新浪股民维权平台目前有14名专业律师可代理该公司维权
超逼真美女写真生成:最强AI工具评测与实用攻略
5. DeepArt DeepArt是另一个输出高质量逼真图像的强大工具。它利用深度学习算法,将图片转化为艺术画作,风格多样,结果令人惊艳。尽管种类选择丰富,但其绘制时间相对较长,用户需要耐心等待。总的来说,各个工具各有优劣,用户可以根据个
谷歌商店国际服(Google Play 商店)
谷歌商店国际服免费下载,一款为玩家带来丰富多样紫云的手机应用商城。在这里,玩家动动手指即可搜索到自己感兴趣的。类型丰富,超多的资源实时推送,免费分享,一键即可下载畅玩。绿色安全,无广无毒,随时随地查看,乐趣满满。1、谷歌商
筑梦青春志在四方 规划启航职引未来——第二届全国大学生职业规划大赛成长赛道校内选拔总决赛圆满完成
2024筑梦青春志在四方规划启航职引未来为了增强我校学生职业规划意识,指导学生及早做好就业准备,以择业新观念打开就业新天地,促进高质量充分就业。2024年12月12日,我校举办了第二届全国大学生职业生涯规划大赛成长赛道校内选拔总决赛。
相关文章
推荐文章
发表评论
0评