首页 > 其他分享 >H5怎么实现文件断点续传

H5怎么实现文件断点续传

时间:2023-10-13 18:56:40浏览次数:35  
标签:断点续传 slice 文件 H5 xhr 服务器 上传

这次给大家带来H5怎么实现文件断点续传,H5怎么文件断点续传的注意事项有哪些,下面就是实战案例,一起来看一下。
HTML5的FILE api,有一个slice方法,可以将BLOB对象进行分割。前端通过FileList对象获取到相应的文件,按照指定的分割方式将大文件分段,然后一段一段地传给后端,后端再按顺序一段段将文件进行拼接。
断点续传原理
目前比较常用的断点续传的方法有两种,一种是通过websocket接口进行文件上传,另一种是通过ajax,两种方法各有千秋,虽然websocket听起来比较高端些,但是除了用了不同的协议外其他的算法基本上都是很相似的,并且服务端要开启ws接口,这里用相对方便的ajax来说明断点上传的思路。
说来说去,断点续传最核心的内容就是把文件“切片”然后再一片一片的传给服务器,但是这看似简单的上传过程却有着无数的坑。
首先是文件的识别,一个文件被分成了若干份之后如何告诉服务器你切了多少块,以及最终服务器应该如何把你上传上去的文件进行合并,这都是要考虑的。
因此在文件开始上传之前,我们和服务器要有一个“握手”的过程,告诉服务器文件信息,然后和服务器约定切片的大小,当和服务器达成共识之后就可以开始后续的文件传输了。
前台要把每一块的文件传给后台,成功之后前端和后端都要标识一下,以便后续的断点。
当文件传输中断之后用户再次选择文件就可以通过标识来判断文件是否已经上传了一部分,如果是的话,那么我们可以接着上次的进度继续传文件,以达到续传的功能。
文件的前端切片
有了HTML5 的 File api之后切割文件比想象的要简单的多。
只要用slice 方法就可以了
var packet = file.slice(start, end);参数start是开始切片的位置,end是切片结束的位置 单位都是字节。通过控制start和end 就可以是实现文件的分块
如:
file.slice(0,1000);
file.slice(1000,2000);
file.slice(2000,3000);
// ......文件片段的上传
上一部我们通过slice方法把文件分成了若干块,接下来要做的事情就是把这些碎片传到服务器上。
这里我们用ajax的post请求来实现
var xhr = new XMLHttpRequest();
var url = xxx // 文件上传的地址 可以包括文件的参数 如文件名称 分块数等以便后台处理
xhr.open('POST', url, true);
xhr.onload = function (e){
// 判断文件是否上传成功,如果成功继续上传下一块,如果失败重试该快
}
xhr.upload.onprogress = function(e){
// 选用 如果文件分块大小较大 可以通过该方法判断单片文件具体的上传进度
// e.loaded 该片文件上传了多少
// e.totalSize 该片文件的总共大小
}
xhr.send(packet);

 

参考文章:http://blog.ncmem.com/wordpress/2023/10/13/h5%e6%80%8e%e4%b9%88%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0/

欢迎入群一起讨论

 

 

标签:断点续传,slice,文件,H5,xhr,服务器,上传
From: https://www.cnblogs.com/songsu/p/17762915.html

相关文章

  • hashcat rule文件夹下 .rule规则文件
    说明官方原文(英文):https://hashcat.net/wiki/doku.php?id=rule_based_attack网友翻译版:https://blog.werner.wiki/hashcat-rule-based-attack/免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。参考、来源:......
  • vue项目中上传文件失败记录
    页面请求报【Failedtoloadresource:net::ERR_CONNECTION_ABORTED】错误,查了下是文件过大导致上传失败,element-ui本身没有大小限制,最后排查是Nginx默认是上传一个不能超过1M大小的文件#设置客户端传文件通过nginx大小client_max_body_size1024m;......
  • hashcat charsets文件夹下 .hcchr自定义字符集
    说明通常我们使用的是英文字符,abc123这些,但是如果遇到俄文、阿拉伯等一些非ASCII码的字符集,每次手动输入不现实。所以就可以保存到.hcchr文件中一、先看看,hashcat提供內建字符集?l=abcdefghijklmnopqrstuvwxyz?u=ABCDEFGHIJKLMNOPQRSTUVWXYZ?d=0123456789?s=......
  • seqkit软件根据染色体名称从fasta文件中批量提取数据
     001、[root@pc1test1]#lsa.fachr.list[root@pc1test1]#cata.fa##测试fasta>chr1tttcccggg>chr2tttgggccc>chr3cccttt>chr4aaaaattt[root@pc1test1]#catchr.list##染色体列表chr2chr4[root@pc1test1]#seqkit-w8......
  • 2023版本Phpstorm的运行和初始文件配置
    1.PHPForWindows:BinariesandsourcesReleases官网下载配置包php-8.0.30-nts-Win32-vs16-x64.zip  2.解压 3.复制php.ini-production,将副本更名为php.ini作为初始文件 4.编辑php.ini文件 a.取消extension_dir的;注释 b.找到配置包中的ext文件路径,赋值给exten......
  • 各个数据库存二进制大文件的性能测试
    1前言​有个项目软件前端将二进制大文件存在了indexDB,每次给后端传文件(需要传到底层C++进行调用)都会导致内存占用飙升,想着使用前后端都能共同操作的数据库来解决这个内存占用的问题,并且希望这个更具尽可能的轻量,可以嵌入到程序中是最好的,通过一个安装包进行安装。2各个数据......
  • Sqoop不能正常导出文件到Mysql数据库的问题解决
    之前在使用sqoop输入以下命令时bin/sqoopexport\--connectjdbc:mysql://node1:3306/journal\--usernameroot\--password123456\--tabletop_courses_by_traffic\--export-dir/user/hive/warehouse/journal.db/top_courses_by_traffic--input-fields-terminated-......
  • 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 _main
    问题描述按照思路写好了C++的程序之后,表面上看起来没什么错误,也没有红点点的出现,但是运行起来,就发现,爆出来这样一个错误:问题解决看了半天,查了半天资料,发现是这里出现了问题(我真的~~~):习惯了首字母大写,这个就当成类来写了,后来突然醒悟,这个是main函数,首字母是要小写:运行成功......
  • Python中的h5py介绍
    Python中的h5py介绍HDF5(HierarchicalDataFormat5)是一种用于存储和组织大量科学数据的文件格式。h5py是Python中的一个库,提供了对HDF5文件的高级封装,使得在Python中处理HDF5文件变得更加简单和高效。本文将介绍h5py的基本概念和使用方法。什么是HDF5文件?HDF5文件是一种用于存储和......
  • Java流(Stream)、文件(File)和IO
    Java流(Stream)、文件(File)和IOJava流(Stream)、文件(File)和IOjava.io包几乎包含了所有操作输入、输出需要的类所有这些流类流类代表了输入源和输出目标Java.io包中的流支持很多种格式比如:基本类型、对象、本地化字符集等等一个流可以理解为一个数据的序列输入流表示从一......