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>