createMD5.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import crypto from 'crypto';
  2. import fs from 'node:fs';
  3. import SparkMD5 from 'spark-md5';
  4. export function createMD5(filePath) {
  5. return new Promise((res, rej) => {
  6. const hash = crypto.createHash('md5');
  7. const rStream = fs.createReadStream(filePath);
  8. rStream.on('data', (data) => {
  9. hash.update(data);
  10. });
  11. rStream.on('end', () => {
  12. res(hash.digest('hex'));
  13. });
  14. })
  15. }
  16. /**
  17. * 作者:起一个可以中奖的名字
  18. * 链接:https://juejin.cn/post/7142831050052665381
  19. * 来源:稀土掘金
  20. * 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  21. * 计算文件Md5
  22. * 将文件分片逐步计算最终合并得出整个文件md5, 提升计算速度
  23. * @param {*} file
  24. */
  25. // export function computeFileMD5(file) {
  26. // return new Promise((resolve, reject) => {
  27. // let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
  28. // let chunkSize = 2097152; // 按照一片 2MB 分片
  29. // let chunks = Math.ceil(file.size / chunkSize); // 片数
  30. // let currentChunk = 0;
  31. // let spark = new SparkMD5.ArrayBuffer();
  32. // let fileReader = new FileReader();
  33. // fileReader.onload = function (e) {
  34. // console.log('read chunk nr', currentChunk + 1, 'of', chunks);
  35. // spark.append(e.target.result);
  36. // currentChunk++;
  37. // if (currentChunk < chunks) {
  38. // loadNext();
  39. // } else {
  40. // console.log('finished loading');
  41. // let md5 = spark.end(); //最终md5值
  42. // spark.destroy(); //释放缓存
  43. // resolve(md5);
  44. // }
  45. // };
  46. // fileReader.onerror = function (e) {
  47. // console.warn('oops, something went wrong.');
  48. // reject(e);
  49. // };
  50. // function loadNext() {
  51. // let start = currentChunk * chunkSize;
  52. // const end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize;
  53. // fileReader.readAsArrayBuffer(blobSlice.call(file, start, end));
  54. // }
  55. // loadNext();
  56. // })
  57. // }
  58. //
  59. export function computeFileMD5(file) {
  60. return new Promise((resolve, reject) => {
  61. const hash = crypto.createHash('md5');
  62. // 直接将整个 Buffer 更新到 hash
  63. hash.update(file.data);
  64. // 计算哈希值
  65. const md5 = hash.digest('hex');
  66. resolve(md5);
  67. });
  68. }