From 7c0603315e57e3765270a8ac6b310b5a32af5a40 Mon Sep 17 00:00:00 2001
From: zqy <2522236926@qq.com>
Date: 星期五, 02 一月 2026 15:11:13 +0800
Subject: [PATCH] 新增压缩图 和 视频封面 都返回base64

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java |  241 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 235 insertions(+), 6 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
index 879ead8..308d8e7 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -5,13 +5,18 @@
 import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.HashMap;
+import java.nio.file.StandardCopyOption;
+import java.util.*;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import javax.imageio.IIOImage;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.stream.MemoryCacheImageOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.websocket.server.PathParam;
@@ -20,6 +25,7 @@
 import com.ruoyi.common.utils.RenamedMultipartFile;
 import com.ruoyi.common.utils.uuid.UUID;
 import com.ruoyi.service.DownLoadFileService;
+import com.ruoyi.service.impl.VideoProcessService;
 import lombok.Data;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,10 +41,27 @@
 import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.framework.config.ServerConfig;
+import springfox.bean.validators.plugins.schema.NotNullAnnotationPlugin;
+
+import javax.imageio.ImageIO;
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import java.util.Base64;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
 
 /**
  * 閫氱敤璇锋眰澶勭悊
- * 
+ *
  * @author ruoyi
  */
 @RestController
@@ -52,12 +75,55 @@
     @Autowired
     private DownLoadFileService downLoadFileService;
 
+
+    @Autowired
+    private VideoProcessService videoProcessService;
+
     private static final String FILE_DELIMETER = ",";
 
     private static final Pattern CHINESE_PATTERN = Pattern.compile("[\u4e00-\u9fa5]");
 
+    // 缂╃暐鍥鹃厤缃�
+    @Value("${thumbnail.default-width:300}")
+    private int defaultThumbnailWidth;
 
-//    @GetMapping("/downloadFile")
+    @Value("${thumbnail.default-height:200}")
+    private int defaultThumbnailHeight;
+
+    @Value("${thumbnail.quality:0.8}")
+    private double thumbnailQuality;
+
+    @Value("${thumbnail.cache-dir:./cache/thumbnails}")
+    private String thumbnailCacheDir;
+
+
+    @Value("${thumbnail.max-width:1920}")
+    private int maxThumbnailWidth;
+
+    @Value("${thumbnail.max-height:1080}")
+    private int maxThumbnailHeight;
+
+    @Value("${thumbnail.format:jpg}")
+    private String thumbnailFormat;
+
+    @Value("${thumbnail.keep-aspect-ratio:true}")
+    private boolean keepAspectRatio;
+
+    // 鏀寔鐨勫浘鐗囨牸寮�
+    private static final String[] IMAGE_FORMATS = {"jpg", "jpeg", "png", "gif", "bmp", "webp"};
+
+    // 鏀寔鐨勮棰戞牸寮�
+    private static final String[] VIDEO_FORMATS = {"mp4", "avi", "mov", "wmv", "flv", "mkv", "webm"};
+    @Autowired
+    private NotNullAnnotationPlugin notNullPlugin;
+
+    @Anonymous
+    @GetMapping("/generateThumbnail")
+    public AjaxResult generateThumbnail(@PathParam(value = "url") String url) throws Exception {
+
+        return AjaxResult.success( );
+    }
+    //    @GetMapping("/downloadFile")
 //    public void fileDownload(@PathParam("path") String path, HttpServletResponse response)
 //    {
 //        path=path.substring(8);
@@ -154,7 +220,55 @@
      * 閫氱敤涓婁紶璇锋眰锛堝涓級
      */
     @PostMapping("/uploads")
-    public AjaxResult uploadFiles(@RequestParam("files") List<MultipartFile> files) throws Exception {
+    public AjaxResult uploadFiles(@RequestParam("files")  List<MultipartFile> files) throws Exception
+    {
+        //System.out.println("99999999999999999999999990000000000000000");
+        try
+        {
+            // 涓婁紶鏂囦欢璺緞
+            String filePath = RuoYiConfig.getUploadPath();
+            List<String> urls = new ArrayList<String>();
+            List<String> fileNames = new ArrayList<String>();
+            List<String> newFileNames = new ArrayList<String>();
+            List<String> originalFilenames = new ArrayList<String>();
+            // System.out.println("99999999999999999999999990000000000000000");
+            //  System.out.println(files);
+            //  System.out.println(files.size());
+
+            for (MultipartFile file : files)
+            {
+                // 涓婁紶骞惰繑鍥炴柊鏂囦欢鍚嶇О
+                String filename = "";
+                //   System.out.println("1122123330+++++++++++++++++++++++++++++");
+
+                String fileName = FileUploadUtils.upload(filePath, file, filename);
+                String url = serverConfig.getUrl() + fileName;
+                urls.add(url);
+                fileNames.add(fileName);
+                newFileNames.add(FileUtils.getName(fileName));
+                originalFilenames.add(file.getOriginalFilename());
+            }
+            AjaxResult ajax = AjaxResult.success();
+            //  System.out.println("99999999999999999999999990000000000000000");
+
+            ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
+            ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
+            ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
+            ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
+            //  System.out.println("1122123330+++++++++++++++++++++++++++++");
+            return ajax;
+        }
+        catch (Exception e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 閫氱敤涓婁紶璇锋眰锛堝涓級 灏嗕腑鏂囦慨鏀逛负鍏朵粬
+     */
+    @PostMapping("/noChinese/uploads")
+    public AjaxResult noChineseUploadFiles(@RequestParam("files") List<MultipartFile> files) throws Exception {
         //System.out.println("99999999999999999999999990000000000000000");
         try {
             // 涓婁紶鏂囦欢璺緞
@@ -396,4 +510,119 @@
         }
 
     }
-}
\ No newline at end of file
+
+
+
+    /**
+     * 鍘嬬缉鍥剧墖鎴栨彁鍙栬棰戝皝闈㈠苟杩斿洖Base64
+     *
+     * @param file 鍥剧墖鎴栬棰戞枃浠�
+     * @param width 鐩爣瀹藉害锛岄粯璁�100
+     * @param height 鐩爣楂樺害锛岄粯璁�100
+     * @param quality 鍥剧墖璐ㄩ噺 0.1-1.0锛岄粯璁�0.8
+     * @return Map鍖呭惈鍘嬬缉缁撴灉鍜孊ase64
+     */
+    @Anonymous
+    @PostMapping(value = "/zip", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public Map<String, Object> compressMediaToBase64(
+        @RequestParam(value = "file", required = false) MultipartFile file,
+        @RequestParam(value = "filePath", required = false) String filePath,
+        @RequestParam(value = "width", defaultValue = "0") int width,
+        @RequestParam(value = "height", defaultValue = "0") int height,
+        @RequestParam(value = "quality", defaultValue = "0.8") float quality) {
+        Map<String, Object> result = new HashMap<>();
+
+        File trueFile;
+        boolean deleteY = true;
+
+        try {
+            // 楠岃瘉鏂囦欢
+            if ((file == null || file.isEmpty()) && filePath == null ) {
+                result.put("success", false);
+                result.put("message", "鏂囦欢涓嶈兘涓虹┖");
+                return result;
+            }
+
+            if ((file == null || file.isEmpty())){
+                deleteY = false;
+                String fileUel = RuoYiConfig.getProfile() + filePath.replace("/profile","");
+                trueFile = new File(fileUel);
+            }else {
+                trueFile = videoProcessService.convertToFile(file);
+            }
+            String fileName = trueFile.getName();
+            if (fileName.isEmpty() && filePath == null) {
+                result.put("success", false);
+                result.put("message", "鏂囦欢鍚嶄笉鑳戒负绌�");
+                return result;
+            }
+
+            System.out.println("-----------"+fileName);
+
+            // 鑾峰彇鏂囦欢鎵╁睍鍚�
+            String extension = getFileExtension(fileName).toLowerCase();
+            System.out.println("-----------"+extension);
+
+            // 鍒ゆ柇鏂囦欢绫诲瀷
+            if (isImageFile(extension)) {
+                // 澶勭悊鍥剧墖鏂囦欢
+                return videoProcessService.processImage(trueFile, width, height, quality, extension,deleteY);
+            } else if (isVideoFile(extension)) {
+                // 澶勭悊瑙嗛鏂囦欢
+                return videoProcessService.processVideo(trueFile,width,height,quality,extension,deleteY);
+            } else {
+                result.put("success", false);
+                result.put("message", "涓嶆敮鎸佺殑鏂囦欢鏍煎紡锛�" + extension);
+                return result;
+            }
+
+        } catch (Exception e) {
+            log.error("鏂囦欢澶勭悊澶辫触", e);
+            result.put("success", false);
+            result.put("message", "澶勭悊澶辫触: " + e.getMessage());
+            return result;
+        }
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁鏄浘鐗囨枃浠�
+     */
+    private boolean isImageFile(String extension) {
+        for (String format : IMAGE_FORMATS) {
+            if (format.equalsIgnoreCase(extension)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁鏄棰戞枃浠�
+     */
+    private boolean isVideoFile(String extension) {
+        for (String format : VIDEO_FORMATS) {
+            if (format.equalsIgnoreCase(extension)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鑾峰彇鏂囦欢鎵╁睍鍚�
+     */
+    private String getFileExtension(String fileName) {
+        if (StringUtils.isEmpty(fileName)) {
+            return "";
+        }
+
+        int lastDot = fileName.lastIndexOf('.');
+        if (lastDot > 0 && lastDot < fileName.length() - 1) {
+            return fileName.substring(lastDot + 1).toLowerCase();
+        }
+        return "";
+    }
+
+
+
+}

--
Gitblit v1.9.1