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

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

时间:2023-10-13 10:01:33浏览次数:44  
标签:断点续传 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%e4%b8%ad%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%e5%8a%9f%e8%83%bd/

欢迎入群一起讨论

 

 

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

相关文章

  • 【awk】两文件处理
    实际工作中经常会遇到两个文件中特定列比较的问题,以下是网上查到两文件比较的代码,包括交集、并集和差集。交集awk'NR==FNR{A[$0];next}($0inA)'a.txtb.txt此处A代表前一个文件,前一个$0指的是a.txt中的数据,后一个则指的是b.txt中的数据。 条件NR==FNR成立时,当前读......
  • 使用fluent-ffmpeg将完整视频文件转码切片为.ts .m3u8文件以实现hls流媒体传输
    使用fluent-ffmpeg将完整视频文件转码切片为.ts.m3u8文件以实现hls流媒体传输安装项目内安装:npmiffmpegnpmifluent-ffmpeg外部环境安装:官网下载ffmpeg,将文件bin目录添加为Path系统环境变量C:\Users\lenovo\Desktop\ffmpeg-6.0-essentials_build\ffmpeg-6.0-essential......
  • Win10设置本地用户限制使用指定程序与文件资源
    前言针对特定win10用户登录解决只能访问指定程序和文件,从而保证个人隐私的解决方案。一、新建本地用户账户1、在Windows10系统右键点击左下角的“开始按钮”–》设置--》账户--》将其他人添加到这台电脑。   2.在左侧用户上右键–》点“新用户”–》完成创建操作。......
  • Spring Boot读取resource目录下文件失败解决方案及分析
    背景最近有个需求,就是需要从resources目录下读取文件返回给用户。在idea中运行时,有些resources下文件读取工具类能够正常获取读取到文件。但是通过java–jar的方式去运行jar包,此时resources下文件读取工具类读取文件就失效了。通过查询搜索,了解到了是读取的方式导致文件读取失败......
  • 在java中将InputStream对象转换为File对象(不生成本地文件)
    importorg.apache.commons.io.IOUtils;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;publicclassStreamUtil{staticfinalStringPREFIX="stream2file";//前缀字符串定义文件名;必须至少三个字符......
  • 2023-10-12 javac : 无法将“javac”项识别为 cmdlet、函数、脚本文件或可运行程序的
    找到你的jdk安装路径/bin,复制并扔到环境变量中去即可,如:   ......
  • 【OSS】存放文件后,网页无法访问,控制台报错无法跨域访问
    来源BNDong/Cnblogs-Theme-SimpleMemory/issues/403用自己的oss(阿里云)存了dist,然后按照https://bndong.github.io/Cnblogs-Theme-SimpleMemory/v2/#/Docs/Guide/cdn这里的教程修改了“博客侧边栏公告”中的内容,控制台出现了报错hasbeenblockedbyCORSpolicy:NO'Access-......
  • html5+css3
    一、HTML1、浏览器内核又可以分成两部分:渲染引擎(layoutengineer)和JS引擎(renderingengine)后来的JS的发展独立出来,常用5大浏览器分别是:IE(edge)、Chrome、Firefox、Safari、opera。浏览器内核有那些?分别被使用在那些浏览器?Trident(IE)国内很多双核浏览器其中一核就是trident......
  • 网安--sql注入(文件读写)
    读写的内容:1、用户的信息2、配置信息文件读写注入的条件secure_file_priv限制了mysql导出文件的权限Linux:cat/etc/my.cnfwin:my.ini中的secure_file_privsecure_file_priv=null           代表不能进行文件读写secure_file_priv=文件路径   代表能在该文......
  • Shell(五):文件的排序、合并和分割
    Linux文本处理命令是Shell编程中的常用命令,文本处理包含对文件记录的排序、文件的合并和分割等。1、sort命令sort命令是一种对文件排序的工具,sort命令将输入文件看做由多条记录组成的数据流,而记录由可变宽度的字段组成,以换行符作为定界符。sort命令,可将记录分成多......