松鼠的博客

导航

统计

js实现分片上传

代码贴过来就能用

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta
http-equiv="X-UA-Compatible"
content="IE=edge"
/>
<meta
name="viewport"
content="width=device-width, initial-scale=1.0"
/>
<title>Document</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/spark-md5/3.0.2/spark-md5.min.js"></script>
</head>
<body>
<input
type="file"
name=""
id=""
/>
<script>
const inp = document.querySelector("input");
inp.addEventListener("change", async function (e) {
const file = inp.files[0];
//没有拿到file对象
if (!file) {
return;
}
//调用工具函数
let chunks = createChunks(file, 1 * 1024 * 1024); //1M 每次分割1M就切割一次
// console.log("chunks", chunks);
const result = await hash(chunks);
console.log("result", result); //拿到当前文件的hash值
});

/**
* 工具函数,用来保存每个切片唯一id
*
*/
function hash(chunks) {
//将hash函数改为异步函数,读取数据需要时间
return new Promise((resolve) => {
//创建md5实例
const spark = new SparkMD5();
//使用递归(读第几个分块)
function _read(i) {
//判断是否已经读完
if (i >= chunks.length) {
resolve(spark.end()); //全部读完结束结束得到一个hash
return;
}
//未读完情况
const blob = chunks[i];
//读取文件
const reader = new FileReader();
//由于读取文件是异步的,可以用
reader.onload = (e) => {
const bytes = e.target.result; //拿到读取到的字节数组
spark.append(bytes); //把一组字节加到运算中
_read(i + 1); //递归调用
};
//读取文件字节数
reader.readAsArrayBuffer(blob); //传入分块
}
//从第一个分块开始读
_read(0);
});
}

/***
* 工具函数
* 参数一:file对象
* 参数二:切片大小
*/
function createChunks(file, chunkSize) {
console.log("chunkSize", chunkSize);
const result = []; // 创建数组获取每一个切片
//循环
for (let i = 0; i < file.size; i += chunkSize) {
// const piece = file.slice(0, 99); //取该文件的0-99字节,返回一个Blob类型对象
result.push(file.slice(i, i + chunkSize));
}
return result;
}
</script>
</body>
</html>

 

参考文章:http://blog.ncmem.com/wordpress/2023/10/09/js%e5%ae%9e%e7%8e%b0%e5%88%86%e7%89%87%e4%b8%8a%e4%bc%a0/

欢迎入群一起讨论

 

 

posted on   Xproer-松鼠  阅读(13)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2020-10-09 dedecms 复制word里面带图文的文章,图片可以直接显示
2020-10-09 CuteEditor 复制word里面带图文的文章,图片可以直接显示
2020-10-09 html编辑器 复制word里面带图文的文章,图片可以直接显示
2020-10-09 百度Web编辑器 复制word里面带图文的文章,图片可以直接显示
2020-10-09 word文档的图片怎么保存到CSDN上
2020-10-09 word文档的图片怎么保存到博客上
2020-10-09 word文档的图片怎么保存到wordpress上
点击右上角即可分享
微信分享提示