js實(shí)現(xiàn)低內(nèi)存,超快速,較安全的計(jì)算超大文件摘要算法設(shè)計(jì)
一、基礎(chǔ)概念
Blob: 前端的一個(gè)專門用于支持文件操作的二進(jìn)制對(duì)象
ArrayBuffer:前端的一個(gè)通用的二進(jìn)制緩沖區(qū),類似數(shù)組,但在API和特性上卻有諸多不同
Buffer:Node.js提供的一個(gè)二進(jìn)制緩沖區(qū),常用來處理I/O操作
二、整體思路
File,通過slice,切片成Blob塊;
FileReader,異步讀取每片Blob,readAsArrayBuffer;
使用支持增量追加和ArrayBuffer的摘要算法庫進(jìn)行逐片計(jì)算追加摘要。
三、好處
四、代碼示例
五、摘要算法庫選型
| 名稱 | arrayBuffer支持 | 追加支持 | npm地址 |
| spark-md5 | 支持 | 是 | https://www.npmjs.com/package/spark-md5 |
| crypto-js/sha256 | 否,支持crypto定義的wordArray類型 | 否 | https://www.npmjs.com/package/crypto-js |
| sha.js | 否,支持buffer,對(duì)nodejs友好 | 是 | https://www.npmjs.com/package/sha.js |
| js-sha256 | 是 | 是 | https://www.npmjs.com/package/js-sha256 |
| sha3-js | 是 | 是 | https://www.npmjs.com/package/js-sha3 |
六、推薦
參考
html5 - javascript FileReader - parsing long file in chunks - Stack Overflow
File | MDN
Streams API | MDN
WritableStream | MDN
A Guide to Faster Web App I/O and Data Operations with Streams - Blog | SitePen
ArrayBuffer - ECMAScript 6入門
Streams Standard
The Basics of Web Workers - HTML5 Rocks
WEB WORKER配合FILE API,加速前端秒傳讀取MD5
node如何實(shí)現(xiàn)大文件上傳
HTML5 File API 配合 Web Worker 計(jì)算大文件 SHA3 Hash 值?
評(píng)論
圖片
表情


