Browse Source

客户端影像资料---上传图片超时

qianxb 2 years ago
parent
commit
d5cd390a2d

+ 6 - 0
blade-ops/blade-resource/pom.xml

@@ -115,6 +115,12 @@
             <artifactId>pdfbox</artifactId>
             <version>2.0.20</version>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-business</artifactId>
+            <version>2.9.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>

+ 13 - 2
blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/OssEndpoint.java

@@ -36,7 +36,9 @@ import org.springblade.resource.vo.NewBladeFile;
 import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
+import org.springblade.business.utils.FileUtils;
 
+import java.io.ByteArrayInputStream;
 import java.util.Objects;
 
 /**
@@ -175,8 +177,17 @@ public class OssEndpoint {
 	@SneakyThrows
 	@PostMapping("/upload-file")
 	public synchronized R<NewBladeFile> uploadFile(@RequestParam MultipartFile file){
-		//上传原文件
-		BladeFile bladeFile = ossBuilder.template().putFile(file.getOriginalFilename(), file.getInputStream());
+		//设置大于3M的文件压缩
+		double targetSize = 3 * 1024 * 1024;
+		byte[] bytes = file.getBytes();
+		//压缩文件大小
+		while (bytes.length > targetSize) {
+			float reduceMultiple = 0.5f;
+			bytes = FileUtils.resizeImage2(bytes, reduceMultiple);
+		}
+		ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
+		//上传文件
+		BladeFile bladeFile = ossBuilder.template().putFile(file.getOriginalFilename(),inputStream);
 
 		//处理PDF文件
 		NewBladeFile newBladeFile = new NewBladeFile();

+ 18 - 0
blade-service/blade-business/src/main/java/org/springblade/business/utils/FileUtils.java

@@ -119,6 +119,24 @@ public class FileUtils {
         return bOut.toByteArray();
     }
 
+    /**
+     * 压缩图片2
+     */
+    public static byte[] resizeImage2(byte[] srcImgData, float reduceMultiple) throws IOException {
+        BufferedImage bi = ImageIO.read(new ByteArrayInputStream(srcImgData));
+        int width = (int) (bi.getWidth() * reduceMultiple);
+        int height = (int) (bi.getHeight() * reduceMultiple);
+        Image image = bi.getScaledInstance(width, height, Image.SCALE_SMOOTH);
+        BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+        Graphics g = tag.getGraphics();
+        g.setColor(Color.RED);
+        g.drawImage(image, 0, 0, null);
+        g.dispose();
+        ByteArrayOutputStream bOut = new ByteArrayOutputStream();
+        ImageIO.write(tag, "JPEG", bOut);
+        return bOut.toByteArray();
+    }
+
     /**
      * 图片定位
      */