js实现大文件上传——分片上传方法
当前端在开发过程中遇到上传文件需求,如果是上传头像、图片小文件之类的,可以正常按上传流程处理。但是当遇到上传大文件需求时,几个G或者十几个G,那么需要将这么大的文件分割成许多小片段分别上传,这种实现思路称为分片上传。
实现分片上传,精髓就是将文件分割成小片段,此时我们需要用到FormData对象和Bolb对象。
核心代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style> </style>
</head>
<body>
<input type="file" name="file" id="file">
<button id="upload" onClick="upload()">上传</button>
<script>
//设置每个切片大小
let bytesPerPiece = 1024*1024
//上传文件函数
function upload(){
//获取上传文件
let file = document.getElementById('file').files[0];
let start = 0, end, index = 0, filesize = file.size, name = file.name;
//计算切片总数
let totalPieces = Math.ceil(filesize/bytesPerPiece);
while(start < totalPieces){
end = start + bytesPerPiece;
if(end > filesize){
end = filesize
}
let chunk = file.slice(start, end);
let formData = new FormData();
formData.append('file', chunk, filename);
//原生js发请求
// let xhr = new XMLHttpRequest();
// xhr.onreadystatechange = function(){
// if(this.readyState == 4 && this.status == 200){ // }
// }
// xhr.open('post', '/api/upload', true);
// xhr.send(formData);
// 使用jquery,需要将contentType,processData设置为false
// $.ajax({
// url: '/api/upload',
// type: 'post',
// data: formData,
// processData: false,
// contentType: false
// }).success(res=>{ // }).error(err=>{ // })
}
}
</script>
</body>
</html>
附加: 断点续传
理解:断点续传,就是在我们上传过程中由于意外原因断网断电情况让上传终止了,那么上传的是不完整的,我们需要向服务器查询一下相同名字的文件大小,然后将上传位置设置成这个大小即可。
js实现大文件上传——分片上传方法的更多相关文章
- Node + js实现大文件分片上传基本原理及实践(一)
		
_ 阅读目录 一:什么是分片上传? 二:理解Blob对象中的slice方法对文件进行分割及其他知识点 三. 使用 spark-md5 生成 md5文件 四. 使用koa+js实现大文件分片上传实践 回 ...
 - 打造 html5 文件上传组件,实现进度显示及拖拽上传,支持秒传+分片上传+断点续传,兼容IE6+及其它标准浏览器
		
老早就注册了博客园帐号,昨天才发现,连博客都没开,Github也是一样,深觉惭愧,赶紧潜个水压压惊`(*∩_∩*)′ 言归正传.大概许多人都会用到文件上传的功能,上传的库貌似也不少,比如(jQuery ...
 - MP4大文件虚拟HLS分片技术,避免服务器大量文件碎片
		
MP4大文件虚拟HLS分片技术,避免点播服务器的文件碎片 本文主要介绍了通过虚拟分片技术,把MP4文件,映射为HLS协议中的一个个小的TS分片文件,实现了在不实际切分MP4文件的情况下,通过HLS协议 ...
 - js实现大文件分片上传的方法
		
借助js的Blob对象FormData对象可以实现大文件分片上传的功能,关于Blob和FormData的具体使用方法可以到如下地址去查看FormData 对象的使用Blob 对象的使用以下是实现代码, ...
 - js实现大文件上传分片上传断点续传
		
文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...
 - js+php大文件分片上传
		
1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...
 - php实现大文件上传分片上传断点续传
		
前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...
 - 使用webuploader实现大文件上传分片上传
		
本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...
 - PHP + JS 实现大文件分割上传
		
服务器上传文件会有一定的限制.避免内存消耗过大影响性能,在 php.ini 配置文件中,有几个影响参数: upload_max_filesize = 2M //PHP最大能接受的文件大小 post_m ...
 - web实现大文件上传分片上传断点续传
		
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...
 
随机推荐
- python读取Excel指定单元格的值
			
使用openpyxl实现 只支持xlsx文件,不支持xls import openpyxl def read_cell(io, sheet, cell='A2'): """ ...
 - Nacos配置管理
			
一.在Nacos添加公共配置 二.项目中读取方式 1. 引入nacos-config依赖 首先,在要使用 nacos 来管理配置的服务中,引入nacos-config 依赖: <!--nacos ...
 - Nginx基础篇(一)
			
(一)介绍 Nginx 是开源.高性能.高可靠的 Web 和反向代理服务器,也可以作为邮件代理服务器.而且支持热部署,即几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能 ...
 - 富文本编辑器第一次正常显示,第二次渲染失败   -----在使用laravel-admin 时
			
第二次显示 解决方法: 在每次获取富文本编辑器实例的时候,先删除一下,避免之前已经实例化造成的渲染失败
 - Docker部署Springboot+Vue项目
			
1 docker使用nginx部署vue项目 1.1 打包vue项目 npm run build vue项目路径下会增加一个dist文件夹,里面就是网页文件 1.2 使用docker 拉取nginx ...
 - typescript学习  回顾查漏
			
1.在public构造函数上使用on参数是一种速记,它使我们能够自动使用该名称创建属性. class Student { fullName:string; constructor(public fir ...
 - idea中怎么查找替换数据?
			
快捷键全局查询所有:crtl+shift+F 快捷键全局替换所有:crtl+shift+R 1.crtl+f crtl+r 快捷键全局查询所有:crtl+shift+F 快捷键全局替换所有:crtl+ ...
 - UITextView布局不是从0开始的问题
			
///去掉padding UITextView.textContainer.lineFragmentPadding = 0; UITextView.textContainerInset = UIEdg ...
 - Science Word丨快速创建各种数学、物理、化学图形,让老师的工作更轻松!
			
很多老师,尤其是理科老师,在出试卷或做课件时需要绘制图像,很多老师会直接在PPT上绘制,但要画得专业点很是费时费力.ScienceWord提供了大量的数学.物理和化学常用的图形,能快速创建各种数学图形 ...
 - 成品直播源码推荐,java 实现邮件服务
			
成品直播源码推荐,java 实现邮件服务 1. 引入maven 依赖 <!--邮件服务--><dependency> <groupId>org.springf ...