js之文件分段加密、大文件秒加密
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<div>
上传文件 : <input type="file" name="file" id="fileId"/>
<button type="submit" name="btn" value="提交" id="btnId" onclick="check('fileId')"/>
</div>
<!--设置成自己的md5-->
<script src="https://blog-static.cnblogs.com/files/tyler-bog/md5_encrypt.js"></script>
<script>
// 生成MD5的函数
function md5s(str) {
var MD5 = new Hashes.MD5().hex(str)
return MD5
}
// Button按钮点击调用此函数。fileId为上传文件input的id值
function check(fileId, split_num = 32, get_byte = 64) {
var info = new String;
var sum=0;
/*fileId:input上传文件的id
split_num: 需要分割生成MD5的数量,默认32
get_byte: 每段需要取的字节个数,默认64字节
小于2MB的文件直接MD5*/
// 判断 split_num和get_byte 是否为数字
// 定义文件对象
var objFile = document.getElementById(fileId);
// 判断文件书否为空
if (objFile.value == "") {
alert("文件不能为空空");
return false;
}
var blob = objFile.files[0];
// 定义常量 const ,不可修改
// 获取文件的总大小
const size = blob.size;
// 计算每段的大小
const mean_size = Math.floor(size / split_num);
// 判断文件大小,如果小于 split_num * get_byte 就直接MD5
if (size < split_num * get_byte) {
res_md5 = md5s(blob(0,blob.size())); // 得到md5值
console.log(res_md5);
return res_md5
}
} else {
var start = 0; // 定义开始位置
var end = get_byte; // 定义截取结束位置
while (start < size) {
var read = new FileReader(); //创建读取器对象FileReader
blobs = blob.slice(start, end); //创建Blob对象
read.readAsText(blobs); //开始读取文件
start = start + mean_size; // 下一段开始位置
end = start + get_byte; // 定义截取结束位
info += blobs;
res_md5 = md5s(info);
console.log(res_md5);
return res_md5
}
}
}
</script>
</body>
</html>