js获取文件MD5值总结
使用HTML5 FileReader API方法实现
使用spark-md5,使用说明,这是一个使用HTML5 FileReader API实现的计算文件MD5库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
function uGetFileMd5(file, chunkSize) { const SparkMD5 = require('spark-md5') return new Promise((resolve, reject) => { let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice; let chunks = Math.ceil(file.size / chunkSize); let currentChunk = 0; let spark = new SparkMD5.ArrayBuffer(); let fileReader = new FileReader();
fileReader.onload = function (e) { spark.append(e.target.result); currentChunk++; if (currentChunk < chunks) { loadNext(); } else { let md5 = spark.end(); resolve(md5); } };
fileReader.onerror = function (e) { reject(e); };
function loadNext() { let start = currentChunk * chunkSize; let end = start + chunkSize; if (end > file.size) { end = file.size; } fileReader.readAsArrayBuffer(blobSlice.call(file, start, end)); }
loadNext(); }); }
|
使用wasm方法实现
这里用到hash-wasm的库,github地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| const chunkSize = 64 * 1024 * 1024; const fileReader = new FileReader(); let hasher = null;
function hashChunk(chunk) { return new Promise((resolve, reject) => { fileReader.onload = async(e) => { const view = new Uint8Array(e.target.result); hasher.update(view); resolve(); };
fileReader.readAsArrayBuffer(chunk); }); }
const readFile = async(file) => { if (hasher) { hasher.init(); } else { hasher = await hashwasm.createMD5(); }
const chunkNumber = Math.floor(file.size / chunkSize);
for (let i = 0; i <= chunkNumber; i++) { const chunk = file.slice( chunkSize * i, Math.min(chunkSize * (i + 1), file.size) ); await hashChunk(chunk); }
const hash = hasher.digest(); return Promise.resolve(hash); };
const fileSelector = document.getElementById("file-input"); const resultElement = document.getElementById("result");
fileSelector.addEventListener("change", async(event) => { const file = event.target.files[0];
resultElement.innerHTML = "Loading..."; const start = Date.now(); const hash = await readFile(file); const end = Date.now(); const duration = end - start; const fileSizeMB = file.size / 1024 / 1024; const throughput = fileSizeMB / (duration / 1000); resultElement.innerHTML = ` Hash: ${hash}<br> Duration: ${duration} ms<br> Throughput: ${throughput.toFixed(2)} MB/s `; });
|
参考网站
Reading Files Using The HTML5 FileReader API
FileReader
WebAssembly/wasm WebAssembly
How to calculate md5 hash of a file using javascript
最后更新时间: