hongchuangyanfa 1 vuosi sitten
vanhempi
commit
9dffeccfea

+ 6 - 0
blade-common/pom.xml

@@ -42,6 +42,12 @@
             <groupId>com.aliyun.oss</groupId>
             <artifactId>aliyun-sdk-oss</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.drewnoakes</groupId>
+            <artifactId>metadata-extractor</artifactId>
+            <version>2.16.0</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 102 - 0
blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java

@@ -1,21 +1,35 @@
 package org.springblade.common.utils;
 
 import cn.hutool.core.io.FileUtil;
+import com.drew.imaging.ImageMetadataReader;
+import com.drew.imaging.ImageProcessingException;
+import com.drew.metadata.Metadata;
+import com.drew.metadata.exif.ExifIFD0Directory;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.util.CollectionUtils;
 
+import javax.imageio.IIOImage;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import java.awt.*;
+import java.awt.geom.AffineTransform;
+import java.awt.image.AffineTransformOp;
+import java.awt.image.BufferedImage;
 import java.io.*;
 import java.math.BigDecimal;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.*;
+import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
+import com.drew.metadata.MetadataException;
 
 /**
  * 通用工具类
@@ -322,4 +336,92 @@ public class CommonUtil {
     }
 
 
+
+
+    /**
+     * 图片缩放、压缩、旋转处理
+     * @param imageData
+     * @return
+     * @throws IOException
+     * @throws ImageProcessingException
+     * @throws MetadataException
+     */
+    public static byte[] compressImage(byte[] imageData) throws IOException, ImageProcessingException, MetadataException {
+        // 读取原始图像(处理旋转问题)
+        Metadata metadata = ImageMetadataReader.readMetadata(new ByteArrayInputStream(imageData));
+        if (metadata.containsDirectoryOfType(ExifIFD0Directory.class)) {
+            ExifIFD0Directory exifIFD0Directory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
+            if (exifIFD0Directory.containsTag(ExifIFD0Directory.TAG_ORIENTATION)) {
+                // 获取 Orientation 标签的值
+                int orientation = exifIFD0Directory.getInt(ExifIFD0Directory.TAG_ORIENTATION);
+                // 需要旋转图片
+                BufferedImage originalImage = ImageIO.read(new ByteArrayInputStream(imageData));
+                AffineTransform transform = new AffineTransform();
+                if (orientation == 6) {
+                    transform.rotate(Math.PI / 2, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
+                } else if (orientation == 8) {
+                    transform.rotate(-Math.PI / 2, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
+                }
+                AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
+                originalImage = op.filter(originalImage, null);
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                ImageIO.write(originalImage, "jpg", baos);
+                imageData = baos.toByteArray();
+            }
+        }
+
+        // 缩放图像
+        String formatName = "JPEG";
+        ByteArrayInputStream bais = new ByteArrayInputStream(imageData);
+        BufferedImage originalImage = ImageIO.read(bais);
+        long sizeLimit = 366912; //358KB
+        int width = 768;
+        int height = 1024;
+        Image scaledImage = originalImage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
+        BufferedImage resizedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+        resizedImage.getGraphics().drawImage(scaledImage, 0, 0, null);
+
+        // 压缩图像
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ImageIO.write(resizedImage, formatName, baos);
+
+        if (baos.size() <= sizeLimit) {
+            // 图片大小已经小于等于目标大小,直接返回原始数据
+            return baos.toByteArray();
+        }
+
+        float quality = 0.9f; // 初始化压缩质量
+        int retries = 10; // 最多尝试 10 次
+
+        while (baos.size() > sizeLimit && retries > 0) {
+            // 压缩图像并重新计算压缩质量
+            byte[] data = baos.toByteArray();
+            bais = new ByteArrayInputStream(data);
+            BufferedImage compressedImage = ImageIO.read(bais);
+            baos.reset();
+
+            ImageWriter writer = null;
+            Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName(formatName);
+            if (writers.hasNext()) {
+                writer = writers.next();
+            } else {
+                throw new IllegalArgumentException("Unsupported image format: " + formatName);
+            }
+
+            ImageWriteParam writeParam = writer.getDefaultWriteParam();
+            writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
+            writeParam.setCompressionQuality(quality);
+
+            writer.setOutput(ImageIO.createImageOutputStream(baos));
+            writer.write(null, new IIOImage(compressedImage, null, null), writeParam);
+            writer.dispose();
+
+            float ratio = sizeLimit * 1.0f / baos.size();
+            quality *= Math.sqrt(ratio);
+            retries--;
+        }
+
+        return baos.toByteArray();
+    }
+
 }

+ 6 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/ossre/AliossTemplateRe.java

@@ -174,6 +174,12 @@ public class AliossTemplateRe implements OssTemplateRe {
             this.makeBucket(bucketName);
             String originalName = key;
             key = this.getFileName(key);
+            if(key.indexOf("/")>=0){
+                originalName = key.substring(key.lastIndexOf("/")+1 , key.length());
+            }else{
+                key = this.getFileName(key);
+            }
+
             if (cover) {
                 this.ossClient.putObject(this.getBucketName(bucketName), key, stream);
             } else {

+ 7 - 14
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -1636,7 +1636,6 @@ public class ExcelTabController extends BladeController {
     @ApiOperation(value = "填报页面数据保存", notes = "填报页面数据保存")
     public R<String> saveBussData(@Valid @RequestBody JSONObject dataInfo, BladeUser bladeUser) throws Exception {
         JSONArray dataArray = new JSONArray();
-        System.out.println("1=" + DateUtil.formatDateTime(DateUtil.now()));
         if (dataInfo.containsKey("dataInfo")) { // 节点保存
             JSONObject jsonObject = dataInfo.getJSONObject("dataInfo");
             dataArray = jsonObject.getJSONArray("orderList");
@@ -1662,7 +1661,6 @@ public class ExcelTabController extends BladeController {
             groupIds += "," + jsonObject.getString("tabGroupId");
             ;
         }
-        System.out.println("2=" + DateUtil.formatDateTime(DateUtil.now()));
         /*全加载,或者可以优化成依赖加载*/
         List<TableInfo> tableInfoList = this.excelTabService.getTableInfoList(dataArray);
         if (tableInfoList != null) {
@@ -1698,28 +1696,21 @@ public class ExcelTabController extends BladeController {
 
         try {
             this.excelTabService.formulaFillData(tableInfoList, Long.parseLong(nodeid));
-            // 保存数据到数据库
         } catch (Exception e) {
             e.printStackTrace();
         }
-
+        // 保存数据到数据库
         R info = this.excelTabService.saveOrUpdateInfo(tableInfoList);
         if (!info.isSuccess()) {
             return info;
         }
         try {
-            System.out.println("3=" + DateUtil.formatDateTime(DateUtil.now()));
             //单个 pdf加载
             for (TableInfo tableInfo : tableInfoList) {
-                //if(!tableInfo.isToBeUpdated()){
                 excelTabService.getBussPdfInfo(Long.parseLong(tableInfo.getPkeyId()));
-                //  }
-
             }
-            System.out.println("4=" + DateUtil.formatDateTime(DateUtil.now()));
             // 合并pdf加载
             excelTabService.getBussPdfs(nodeid, classify, contractId, projectId);
-            System.out.println("5=" + DateUtil.formatDateTime(DateUtil.now()));
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -2851,7 +2842,7 @@ public class ExcelTabController extends BladeController {
     @ApiOperationSupport(order = 32)
     @ApiOperation(value = "表单填写图片上传", notes = "表单填写图片上传")
     public R addBussFile(@RequestParam MultipartFile file) {
-        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        /*String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
         //String file_path = "/Users/hongchuangyanfa/Desktop/";//ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
         BladeFile bladeFile = new BladeFile();
         if (file.getSize() >= 1024) {
@@ -2861,9 +2852,11 @@ public class ExcelTabController extends BladeController {
             bladeFile = this.newIOSSClient.uploadFile(file.getOriginalFilename(), imgUrl);
             File imgFile = ResourceUtil.getFile(imgUrl);
             imgFile.delete();
-        } else {
-            bladeFile = this.newIOSSClient.uploadFileByInputStream(file);
-        }
+        } else {*/
+         //   bladeFile = this.newIOSSClient.uploadFileByInputStream(file);
+       // }
+        BladeFile bladeFile = new BladeFile();
+        bladeFile = this.newIOSSClient.uploadFileByInputStream(file);
         return R.data(bladeFile);
     }
 

+ 12 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -927,6 +927,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             return dataMap;
         }
         File file1 = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
+        if(file1.exists()){
+
 
         FileInputStream fileInputStream = new FileInputStream(file1);
         String htmlString = IoUtil.readToString(fileInputStream);
@@ -950,6 +952,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 }
             }
         }
+        }
         return dataMap;
     }
 
@@ -982,6 +985,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         // 匹配关联
         try {
             File file1 = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
+            if(file1.exists()){
+
             String htmlString = IoUtil.readToString(new FileInputStream(file1));
             Document doc = Jsoup.parse(htmlString);
 
@@ -1075,6 +1080,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     }
                 }
             }
+            }
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         }
@@ -1327,10 +1333,14 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                                 }
 
                                                 //https:bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20220819/b53cb6700db369381e3b03d7737bcdec.jpg__16_1
-                                                if (myData.indexOf("https") >= 0 && myData.indexOf("aliyuncs") >= 0) {
+                                                if ((myData.indexOf("https") >= 0 ||myData.indexOf("http") >= 0) && myData.indexOf("aliyuncs") >= 0) {
 
                                                     InputStream imageIn = CommonUtil.getOSSInputStream(myData);
-                                                    byte[] bytes = IOUtils.toByteArray(imageIn);
+
+                                                    byte[] byteNew = IOUtils.toByteArray(imageIn);
+
+                                                    byte[] bytes = CommonUtil.compressImage(byteNew);
+
                                                     // 这里根据实际需求选择图片类型
                                                     int pictureIdx = workbook.addPicture(bytes, 6);
 

+ 1 - 0
pom.xml

@@ -8,6 +8,7 @@
     <version>2.9.1.RELEASE</version>
     <packaging>pom</packaging>
 
+
     <properties>
         <bladex.project.version>2.9.1.RELEASE</bladex.project.version>