Răsfoiți Sursa

perf(图片上传): 上传的图片压缩至200k以内后再进行人脸特征提取

autumnal_wind 9 luni în urmă
părinte
comite
5d3c82f90b

+ 7 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/file/FileUtils.java

@@ -106,6 +106,13 @@ public class FileUtils extends FileUtil {
             return Base64.encode(data);
         }
     }
+    public static byte[] toByte(MultipartFile file) throws Exception {
+        if (ObjectUtil.isEmpty(file)) {
+            throw new Exception("[文件转换错误]-[文件为空]");
+        } else {
+            return file.getBytes();
+        }
+    }
 
     public static byte[] imgCompression(byte[] imageBytes) {
         // 小于1M就不进行压缩里,浪费执行时间

+ 12 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/controller/PtUserAccountController.java

@@ -1,6 +1,7 @@
 package org.dromara.backstage.payment.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.codec.Base64;
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.util.ObjectUtil;
 import jakarta.servlet.http.HttpServletResponse;
@@ -27,6 +28,7 @@ import org.dromara.common.core.domain.R;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.core.utils.file.FileUtils;
 import org.dromara.common.core.utils.file.MimeTypeUtils;
+import org.dromara.common.core.utils.file.PicCompressor;
 import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.core.validate.EditGroup;
 import org.dromara.common.excel.utils.ExcelUtil;
@@ -162,7 +164,16 @@ public class PtUserAccountController extends BaseController {
             }
 
             // 2. 图片人脸识别验证
-            String imgData = FileUtils.toBase64(file);
+            // String imgData = FileUtils.toBase64(file);
+            String imgData ;
+            byte[] sBytes = FileUtils.toByte(file);
+            if(sBytes.length > 200*1024){
+                // 如果图片大于200k,压缩至200k以内
+                byte[] compressed = PicCompressor.compressPicForScale(sBytes, 200);
+                imgData = Base64.encode(compressed);
+            } else {
+                imgData = Base64.encode(sBytes);
+            }
             String locationFlag = defaultConfig.getLocationFlag();
             R<Void> result;
             // 如果是本地部署

+ 12 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/wx/service/impl/WxServiceImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.backstage.wx.service.impl;
 
+import cn.hutool.core.codec.Base64;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.RandomUtil;
@@ -26,6 +27,8 @@ import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.utils.ByteArrayUtilByYC;
 import org.dromara.common.core.utils.StringUtilsByYC;
+import org.dromara.common.core.utils.file.FileUtils;
+import org.dromara.common.core.utils.file.PicCompressor;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.system.api.RemoteDictService;
@@ -160,6 +163,15 @@ public class WxServiceImpl implements IWxService {
             // 过滤掉data:image/jpg;base64,字符串
             imgData = imgData.substring(strIndex + 8);
         }
+        // String imgData ;
+        byte[] sBytes = Base64.decode(imgData);
+        if(sBytes.length > 200*1024){
+            // 如果图片大于200k,压缩至200k以内
+            byte[] compressed = PicCompressor.compressPicForScale(sBytes, 200);
+            imgData = Base64.encode(compressed);
+        } else {
+            imgData = Base64.encode(sBytes);
+        }
         String locationFlag = defaultConfig.getLocationFlag();
         R<Void> result;
         // 如果是本地部署