首页 > 编程语言 >javascript之分片上传,断点续传的实际项目实现详解

javascript之分片上传,断点续传的实际项目实现详解

时间:2023-10-19 09:55:23浏览次数:48  
标签:断点续传 formData javascript start file 分片 上传 append

首先,我们需要了解什么是分片上传和断点续传。

分片上传是将大文件分成多个小块进行上传,每个小块可以独立上传,从而提高上传速度和稳定性。而断点续传是指在上传大文件时,当上传过程中因断网或其他原因中断,再次上传时可以不用重头开始,而是从中断的地方继续上传。

接下来是分片上传和断点续传的具体实现步骤:

  1. 切分文件。将大文件按照指定的大小切分成多个小块,一般大小在5MB~10MB之间比较合适。可以使用 FileReader API 读取文件内容,使用 Blob 对象切割文件。
function sliceFile(file, sliceSize) {
  const chunks = [];
  let start = 0;
  let end;
  while (start < file.size) {
    end = Math.min(start + sliceSize, file.size);
    chunks.push({ file: file.slice(start, end), start, end });
    start += sliceSize;
  }
  return chunks;
}
  1. 上传小块。将切分的小块一个一个地上传到服务器,可以使用 XMLHttpRequest 或 fetch API 实现。可以使用 FormData 对象将文件数据上传到服务器。
function uploadChunk(serverUrl, chunkData) {
  const formData = new FormData();
  formData.append('file', chunkData.file);
  formData.append('start', chunkData.start);
  formData.append('end', chunkData.end);
  return fetch(serverUrl, {
    method: 'POST',
    body: formData,
  });
}
  1. 合并文件。当所有小块上传完成后,需要将文件块合并成一个完整的文件,可以使用 Node.js 服务器将文件块合并。在客户端上传时需要携带上传唯一标识以备后续合并。
function mergeChunks(serverUrl, file, chunks, fileHash) {
  const formData = new FormData();
  formData.append('file', file);
  formData.append('chunks', chunks.length);
  formData.append('fileHash', fileHash);
  return fetch(serverUrl, {
    method: 'POST',
    body: formData,
  });
}
  1. 实现断点续传。如果在上传过程中意外中断,可以记录已上传的小块和未上传的小块,再次上传时从未上传的小块开始上传,已上传的小块可以不用重复上传。可以使用 IndexedDB 或 Web SQL 数据库记录上传进度,避免上传过程中出现异常导致数据丢失。

 

参考文章:http://blog.ncmem.com/wordpress/2023/10/19/javascript%e4%b9%8b%e5%88%86%e7%89%87%e4%b8%8a%e4%bc%a0%ef%bc%8c%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0%e7%9a%84%e5%ae%9e%e9%99%85%e9%a1%b9%e7%9b%ae%e5%ae%9e%e7%8e%b0%e8%af%a6%e8%a7%a3/

欢迎入群一起讨论

 

标签:断点续传,formData,javascript,start,file,分片,上传,append
From: https://www.cnblogs.com/songsu/p/17774018.html

相关文章

  • 在JavaScript中,`!!`(不是not)操作符的作用是什么?
    内容来自DOChttps://q.houxu6.top/?s=在JavaScript中,!!(不是not)操作符的作用是什么?我看到了一些代码,似乎使用了我不知道的操作符,形式为两个感叹号,就像这样:!!。有人能告诉我这个操作符是做什么的吗?我看到这个操作符的上下文是:this.vertical=vertical!==undefined?!!ver......
  • Java如何实现HTTP断点续传功能
    其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已,本文将详细介绍Java如何实现HTTP断点续传功能,需要的朋友可以参考下 (一)断点续传的原理其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发......
  • JavaScript高级程序设计(第3版)pdf电子版Nicholas C. Zakas
    JavaScript高级程序设计(第3版)pdf电子版作者:[美]NicholasC.Zakas原作名:ProfessionalJavaScriptforWeb出版年:2012-3-29ISBN:9787115275790链接提取码:jz6rJavaScript最基础的书籍。......
  • Http断点续传要点
    在http断点续传的过程中,主要有以下几个方面要注意:1,新建一个temp文件,记录断点的位置,也就是上次下载的数量。2,采用RandomAccessFile来进行文件读写,RandomAccessFile相当于是一个文件输入输出流的结合。提供了一些在文件中操作位置的方法,比如定位用的getFilePointer(),在文件里移......
  • HTTP文件断点续传原理解析(源码)
    生活中,有许多事物,在没有被揭开面纱之前,我们往往会觉得很神秘很高深,认为它一定很难,进而望而却步,失去了解它的机会。然而,很多事,只要我们自己能沉下心来,细细研究,那些神秘高深的,也会变得简单明了。"HTTP文件断点续传"就是这样一个好例子,深入了解背后之理,“HTTP文件断点续传原理”其实......
  • HTTP——断点续传(分块传输)
    HTTP——断点续传(分块传输)断点续传:指的是在上传/下载时,将任务(一个文件或压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传/下载,如果碰到网络故障,可以从已经上传/下载的部分开始继续上传/下载未完成的部分,而没有必要从头开始上传/下载。可以节省时间,提高速度。断点续传......
  • JavaScript中'??'和'?.'
     ??空值合并运算符判断一直变量是否为'null'/'undefined',进行不同的返回值处理console.log(1??2)//1console.log(null??2)//2console.log(undefined??2)//2console.log(1??2??3)//1console.log(null??2??3)//2console.log(null??null??3)//3......
  • JavaScript的数字运算不准的问题
    JavaScript的运算问题存在两方面:第一个表示不准问题:打开浏览器按F12,在Console里,输入0.1+0.2=0.30000000000000004输入91.25*0.7=63.87499999999999 解决这个问题,要用第三方库math.js或decimal.js constmath=require('mathjs');console.log(math.add(0.1,0.2));......
  • iframe实现与父页面跨域隔离的JavaScript 代码沙箱
    这篇文章主要介绍了使用iframe实现与父页面跨域隔离的JavaScript代码沙箱,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪目录正文1.iframe2.dataURL3.将JavaScript代码变成dataURL4.如果需要获取执行结果的话,基于postMessage定制通信机制正文假......
  • JavaScript中高阶函数的巧妙运用
    JavaScript中的高阶函数是指可以接受其他函数作为参数或者返回一个函数作为结果的函数,本文介绍了JS中一些高阶函数的妙用,希望对大家有所帮助目录1.接受函数作为参数的高阶函数2.返回函数的高阶函数3.同时接受和返回函数的高阶函数JavaScript中的高阶函数是指可以接受其他函数作为参......