wenbobowen 4 жил өмнө
parent
commit
9dbba878b6

+ 26 - 9
src/components/input/normalArea.vue

@@ -146,15 +146,16 @@ export default {
       return newStr
     },
     uploadImg(imgData) {
-      var bytes = window.atob(imgData.split(',')[1]);
-      var ab = new ArrayBuffer(bytes.length);
-      var ia = new Uint8Array(ab);
-      for(var i = 0; i < bytes.length; i++){
-          ia[i] = bytes.charCodeAt(i); //这里有点疑惑,ia是怎么改变ab的?注:①
-      }
-      var blob = new Blob([ab], {type: 'image/jpeg'});
-      var fd = new FormData();
-      fd.append('file', blob);
+      // var bytes = window.atob(imgData.split(',')[1]);
+      // var ab = new ArrayBuffer(bytes.length);
+      // var ia = new Uint8Array(ab);
+      // for(var i = 0; i < bytes.length; i++){
+      //     ia[i] = bytes.charCodeAt(i); //这里有点疑惑,ia是怎么改变ab的?注:①
+      // }
+      // var blob = new Blob([ab], {type: 'image/jpeg'});
+      // var fd = new FormData();
+      
+      fd.append('file', base64Url2Blob(imgData));
       fd.append('innerPublic',true);
       const config = {
         headers: {
@@ -176,6 +177,22 @@ export default {
         })
       })
     },
+    base64Url2Blob (url) {
+      // 将base64url通过 , 分割为含有两个元素的数组
+      const temp = url.split(',')
+        // 将图片的base64编码数据解码
+      const bytes = window.atob(temp[1])
+      // 匹配图片的 mime
+      const mime = temp[0].match(/:(.*?);/)[1]
+        // 创建一个类型化数组,该数组的长度与解码后的图片数据长度相同
+      let ia = new Uint8Array(bytes.length)
+        // 变量图片数据的每一位,并将每一位的 Unicode 编码存入类型化数组
+      for (let i = 0; i < bytes.length; i++) {
+        ia[i] = bytes.charCodeAt(i)
+      }
+        // 通过类型化数组创建一个 Blob 对象
+      return new Blob([ia], {type: mime})
+    },
     changeText(e) { // 富文本内容改变
       this.inputValue = e
       this.$emit('update:value', this.inputValue)