首页 > 其他分享 >HTML5中怎么实现文件断点续传功能

HTML5中怎么实现文件断点续传功能

时间:2023-11-17 10:32:33浏览次数:39  
标签:断点续传 slice 文件 xhr HTML5 服务器 上传

HTML5中怎么实现文件断点续传功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

断点续传原理

目前比较常用的断点续传的方法有两种,一种是通过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/html5中怎么实现文件断点续传功能/


 

标签:断点续传,slice,文件,xhr,HTML5,服务器,上传
From: https://blog.51cto.com/u_14023400/8437582

相关文章

  • 大文件断点续传上传
    最近接到一个新的需求,需要上传2G左右的视频文件,用测试环境的OSS试了一下,上传需要十几分钟,再考虑到公司的资源问题,果断放弃该方案。一提到大文件上传,我最先想到的就是各种网盘了,现在大家都喜欢将自己收藏的「小电影」上传到网盘进行保存。网盘一般都支持断点续传和文件秒传功能,减少......
  • 通过Java实现文件断点续传功能
    用户上传大文件,网络差点的需要历时数小时,万一线路中断,不具备断点续传的服务器就只能从头重传,而断点续传就是,允许用户从上传断线的地方继续传送,这样大大减少了用户的烦恼。本文将用Java语言实现断点续传,需要的可以参考一下什么是断点续传用户上传大文件,网络差点的需要历时数小时,万......
  • webuploader实现大文件断点续传
    前端代码(基于Yii框架,逻辑可供参考)   <script>    varfileMd5; //文件MD5    varfileObj; //文件对象    varstate='pending'; //状态    WebUploader.Uploader.register({      "before-send":"beforeSend......
  • 未预编译文件“/default.aspx”,因此不能请求该文件
    未预编译文件“/default.aspx”,因此不能请求该文件。说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息:System.Web.HttpException:未预编译文件“/default.aspx”,因此不能请求该文件。 ......
  • 相机突然断电,保存的DAT视频文件如何修复
    3-7本文主要解决因相机突然断电导致拍摄的视频文件损坏的问题。在平常使用相机拍摄视频,比如用单反相机、无人机拍摄视频的时候,如果电池突然断电,或者突然炸机了,就非常有可能会得到一个损坏的视频文件,比如会产生下图中左边的这种文件,这种文件打不开,如果你是做生意的,比如搞婚庆拍摄的,......
  • 电脑版微信图片保存在哪个文件夹,如何一次性全选保存
     8-7电脑版的微信聊天,接收到图片后,会保存到微信的个人数据文件夹中,但是有个问题是这些图片都是加密保存的,普通情况下,确实无法人工去取出来,但是下面有方法可以快速将这些图片在脱离微信的情况下,批量取出来。首先是基础信息获取一、首页找到微信的个人数据文件夹,在电脑版微信登录后,......
  • VS Code中C开发多源文件的编译设置
    1.引言C开发中,通常需要编译多个文件,本文将简要介绍在VSCode中进行C开发时如何编译多个文件。实例工程结构如图所示:其中,main.c文件内容如下:#include"stdio.h"/*Includings*/#include"umath.h"#include"ucmplx.h"intmain(void){/*Testumath.c*/floa......
  • [EFI]Surface Pro 4电脑 Hackintosh 黑苹果引导文件
    硬件型号驱动情况主板SurfacePro4处理器IntelCorei5-6300U2.5GHz已驱动内存16GBDDR42400Mhz已驱动硬盘SamsungSSD860EVO250GMedia(InstallonSSDExternal)已驱动显卡IntelHDGraphics5202GBmacOS13以上自行添加显卡补丁声卡RealtekALC3269(id3)已驱动网卡无无无......
  • 网路文件共享服务
    网路文件共享服务存储类型直连式存储(DNS)网络附加存储(NAS)(存储和管理空间都在远程)(FTP,NFS)存储区域网络(SAN)(可以使用空间,管理也是你来管理)应用场景DNS:适用于数据量不大,对磁盘访问速度要求高的中小企业NAS:多适用于文件服务器,用来存储非结构化数据,虽然受限于以太网的速度,但是......
  • linux下使用命令行工具alidrive上传文件到阿里云盘
    linux下使用命令行工具alidrive上传文件到阿里云盘下载alidrive,并解压wgethttps://github.com/aoaostar/alidrive-uploader/releases/download/v2.2.1/alidrive_uploader_v2.2.1_linux_amd64.tar.gztar-xvfalidrive_uploader_v2.2.1_linux_amd64.tar.gz修改配置文件重......