原生JS实现大文件分片
为了实现断点续传,研究了js的文件分片
实现断点续传的步骤
- 文件分片按顺序上传,上传第一个后文件名md5加密保存到rdis的key,value保存为上传的index,
- 然后下面每次上传成功就更新对应的value,保持最新的
- 第一次上传时,查询redis是否已经存在相同的key,如果相同就跳到保存的index的下一个上传
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Title</title>
</head>
<body>
<div>
<!-- 获取文件 -->
<input type="file" name="选择文件" id="file-upload" />
<!-- 点击执行 -->
<input type="button" value="确定" onclick="update(0)" />
<br />
<input type="text" id="显示" />
</div>
<script>
// 切片大小
const chunkSize = 1024 * 1024 * 1 // 确定分片大小
const xml = new XMLHttpRequest() // ajax请求
function update(index) {
// index是上传标记的序列
const file = document.getElementById('file-upload').files[0] // 获取文件
console.log('file', file)
// 获取文件的名字和拓展名
const lastPoint = file.name.lastIndexOf('.')
const filename = file.name.slice(0, lastPoint)
const ext = file.name.slice(lastPoint + 1)
console.log('filename', filename)
console.log('ext', ext)
const star = index * chunkSize // 切片的起点
// 判断起点是否已经超过文件的长度,超过说明已经
if (star > file.size) {
return
}
const bool = file.slice(star, star + chunkSize) // slice(分割起点,分割终点)是js切割文件的函数,
console.log('bool', bool)
const boolname = `${filename}-${index}-${ext}`
console.log('boolname', boolname