前後端java js 獲取某文件一致的MD5

先上代碼

//java代碼    spring自帶MD5加密
public static void main(String[] args) {
    try {
        File file = new File("F:/tool.zip");
        InputStream inputStream = new FileInputStream(file);
        //使用spring自帶工具
        String fileMd5 = DigestUtils.md5DigestAsHex(inputStream);
        System.out.println(fileMd5);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
//打印: ef41cf6e98483ffec9e0e5a21bee9363
// vue.js 代碼 工具類 fileUtils.js
// npm install spark-md5 
import SparkMD5 from 'spark-md5'

/**
 * 獲取文件MD5
 * @param file 文件
 * @param call 回調函數
 */
export const md5 = ({file, call}) => {
  let fileRaw = file.raw
  let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice
  let fileReader = new FileReader()
  let chunkSize = 5 * 1024 * 1024
  let chunks = Math.ceil(file.size / chunkSize)
  let currentChunk = 0
  let spark = new SparkMD5.ArrayBuffer()
  fileReader.onload = function (e) {
    spark.append(e.target.result)
    currentChunk++
    if (currentChunk < chunks) {
      loadNext()
    } else {
      let fileMd5 = spark.end()
      call(fileMd5)
    }
  }
  fileReader.onerror = function () {
    console.warn('FileReader error.')
  }

  function loadNext () {
    let start = currentChunk * chunkSize
    let end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize
    fileReader.readAsArrayBuffer(blobSlice.call(fileRaw, start, end))
  }
  loadNext()
}
// vue調用
 import {md5} from '@/util/fileUtils'

...
      onFileChange (file,fileList) {
        md5({
          file: file,
          call: (val) => {
            console.log(val)
          }
        })
      }
...

// 打印: ef41cf6e98483ffec9e0e5a21bee9363
#
# Windows dos 自帶命令
#
F:\>certutil -hashfile tool.zip MD5
MD5 的 tool.zip 哈希:
ef41cf6e98483ffec9e0e5a21bee9363
CertUtil: -hashfile 命令成功完成。

折騰了一晚上, 對您有用的話請點個贊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章