Ver código fonte

获取上传文件的md5

刘洋 1 ano atrás
pai
commit
928db91c3e
3 arquivos alterados com 35 adições e 11 exclusões
  1. 1 0
      package.json
  2. 3 2
      src/components/global/my-upload/index.vue
  3. 31 9
      src/utils/crypto.js

+ 1 - 0
package.json

@@ -33,6 +33,7 @@
     "pinia": "^2.0.27",
     "pinia-plugin-persistedstate": "^3.2.0",
     "qs": "^6.11.2",
+    "spark-md5": "^3.0.2",
     "tdesign-vue-next": "^1.4.2",
     "tvision-color": "^1.5.0",
     "unplugin-vue-setup-extend-plus": "^1.0.0",

+ 3 - 2
src/components/global/my-upload/index.vue

@@ -80,10 +80,11 @@ const upload = async (files) => {
   let formData = new FormData();
 
   const file = files[0].raw;
+  const md5 = await getFileMD5(file);
+  console.log('md5', md5);
+
   formData.append('file', file);
   formData.append('type', 'FILE');
-  const md5 = await getFileMD5(file);
-  console.log(md5);
 
   const res = await uploadFiles(formData, md5).catch(() => {});
   console.log('res', res);

+ 31 - 9
src/utils/crypto.js

@@ -5,6 +5,7 @@ import AES from 'crypto-js/aes';
 import SHA1 from 'crypto-js/sha1';
 import MD5 from 'crypto-js/md5';
 import { cookie } from '@/utils/tool';
+import SparkMD5 from 'spark-md5';
 
 if (!cookie.get('deviceId')) {
   cookie.set('deviceId', MD5(Math.random() + '-' + Date.now()));
@@ -60,16 +61,37 @@ export const getMD5 = (content) => {
   return MD5(content);
 };
 
-export const getFileMD5 = (file) => {
-  return new Promise((resolve, reject) => {
-    const reader = new FileReader();
-    reader.onloadend = function () {
-      const arrayBuffer = reader.result;
-      resolve(MD5(arrayBuffer).toString());
+// export const getFileMD5 = (file) => {
+//   return new Promise((resolve, reject) => {
+//     const reader = new FileReader();
+//     reader.onloadend = function () {
+//       const arrayBuffer = reader.result;
+//       resolve(MD5(arrayBuffer).toString());
+//     };
+//     reader.onerror = function (err) {
+//       reject(err);
+//     };
+//     reader.readAsArrayBuffer(file);
+//   });
+// };
+
+export const getFileMD5 = (dataFile) => {
+  return new Promise((rs, rj) => {
+    var fileReader = new FileReader();
+    var spark = new SparkMD5(); //创建md5对象(基于SparkMD5)
+    if (dataFile.size > 1024 * 1024 * 10) {
+      var data1 = dataFile.slice(0, 1024 * 1024 * 10); //将文件进行分块 file.slice(start,length)
+      fileReader.readAsBinaryString(data1); //将文件读取为二进制码
+    } else {
+      fileReader.readAsBinaryString(dataFile);
+    }
+    fileReader.onload = function (e) {
+      spark.appendBinary(e.target.result);
+      var md5 = spark.end();
+      rs(md5);
     };
-    reader.onerror = function (err) {
-      reject(err);
+    fileReader.onerror = function (err) {
+      rj(err);
     };
-    reader.readAsArrayBuffer(file);
   });
 };