فهرست منبع

压缩上传图片

Administrator 9 ماه پیش
والد
کامیت
bf2072f0fc

+ 7 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java

@@ -11,6 +11,7 @@ import javax.servlet.http.HttpServletResponse;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.common.utils.IdCardUtil;
+import com.ruoyi.common.utils.ImageSizeUtil;
 import com.ruoyi.common.utils.ThumbnailUtil;
 import com.ruoyi.system.domain.vo.UploadVo;
 import net.lingala.zip4j.ZipFile;
@@ -105,10 +106,15 @@ public class CommonController {
      * 按照项目编号创建文件夹通用上传请求(单个)
      */
     @PostMapping("/uploadNew")
-    public AjaxResult uploadNewFile(@RequestParam("file") MultipartFile file, @RequestParam("loanApplicationNumber") String loanApplicationNumber, @RequestParam("fileName") String originalFilename) throws Exception {
+    public AjaxResult uploadNewFile(@RequestParam("file") MultipartFile multipartFile, @RequestParam("loanApplicationNumber") String loanApplicationNumber, @RequestParam("fileName") String originalFilename) throws Exception {
         try {
+            //压缩图片
+            MultipartFile file = ImageSizeUtil.compressImg(multipartFile);
             // 上传文件路径
             String filePath = RuoYiConfig.getUploadPath();
+            if ("其他附件".equals(originalFilename)) {
+                originalFilename = file.getOriginalFilename();
+            }
             // 上传并返回新文件名称
             String fileName = FileUploadUtils.uploadLoanApplicationNumber(filePath, file, loanApplicationNumber, originalFilename);
             String url = serverConfig.getUrl() + fileName;

+ 11 - 0
ruoyi-common/pom.xml

@@ -17,6 +17,17 @@
 
 
     <dependencies>
+        <!--thumbnailator 压缩工具-->
+        <dependency>
+            <groupId>net.coobird</groupId>
+            <artifactId>thumbnailator</artifactId>
+            <version>0.4.8</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-fileupload</groupId>
+            <artifactId>commons-fileupload</artifactId>
+            <version>1.3.1</version>
+        </dependency>
         <!--图片识别文字-->
         <dependency>
             <groupId>net.sourceforge.tess4j</groupId>

+ 93 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/ImageSizeUtil.java

@@ -0,0 +1,93 @@
+package com.ruoyi.common.utils;
+
+import net.coobird.thumbnailator.Thumbnails;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+import java.io.*;
+
+/**
+ * 获取图片尺寸和截图 工具类
+ *
+ * @author zhangxiaoyan
+ */
+public class ImageSizeUtil {
+    /**
+     * 压缩图片 并返回MultipartFile
+     * @param multiFile
+     * @return
+     * @throws Exception
+     */
+    public static MultipartFile compressImg(MultipartFile multiFile) {
+        // 压缩图片
+        InputStream inputStream = null;
+        ByteArrayOutputStream bos = null;
+        MultipartFile multipartFile = null;
+        InputStream fileInput= null;
+        try {
+            inputStream = multiFile.getInputStream();
+            bos = new ByteArrayOutputStream();
+            // 压缩图片核心代码
+            Thumbnails.of(inputStream).scale(0.3f).outputQuality(1f).toOutputStream(bos);
+            fileInput = new ByteArrayInputStream(bos.toByteArray());
+            // 转换 MultipartFile
+            String fieldName = multiFile.getName();
+            String fileName = multiFile.getOriginalFilename();
+            String contentType = multiFile.getContentType();
+            multipartFile = getMulFileByFile(fileInput, fieldName, contentType, fileName);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (inputStream != null){
+                    inputStream.close();
+                }
+                if (bos != null){
+                    bos.close();
+                }
+                if (fileInput != null){
+                    fileInput.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+
+            }
+        }
+        return multipartFile;
+    }
+
+    public static MultipartFile getMulFileByFile(InputStream fis,String fieldName,String contentType,String fileName) {
+        FileItem fileItem = createFileItem(fis,fieldName,contentType,fileName);
+        MultipartFile mfile = new CommonsMultipartFile(fileItem);
+        return mfile;
+    }
+
+    public static FileItem createFileItem(InputStream fis,String fieldName,String contentType,String fileName){
+        FileItemFactory factory = new DiskFileItemFactory(16, null);
+        FileItem item = factory.createItem(fieldName, contentType, false,fileName);
+        int bytesRead = 0;
+        byte[] buffer = new byte[8192];
+        try
+        {
+            OutputStream os = item.getOutputStream();
+            while ((bytesRead = fis.read(buffer, 0, 8192))!= -1)
+            {
+                os.write(buffer, 0, bytesRead);
+            }
+            os.close();
+            fis.close();
+        }
+        catch (IOException e)
+        {
+            e.printStackTrace();
+        }
+        return item;
+    }
+}
+
+