Procházet zdrojové kódy

修复 tif、tiff 文件预览初始内存太小预览失败的问题

kl před 4 roky
rodič
revize
8f75df15e2

+ 1 - 0
server/src/main/config/freemarker_implicit.ftl

@@ -1,5 +1,6 @@
 [#ftl]
 [#-- @implicitly included --]
+[#-- @ftlvariable name="initializeMemorySize" type="java.lang.Number" --]
 [#-- @ftlvariable name="currentUrl" type="java.lang.String" --]
 [#-- @ftlvariable name="file" type="cn.keking.model.FileAttribute" --]
 [#-- @ftlvariable name="fileName" type="java.lang.String" --]

+ 11 - 0
server/src/main/java/cn/keking/service/impl/TiffFilePreviewImpl.java

@@ -2,8 +2,10 @@ package cn.keking.service.impl;
 
 import cn.keking.model.FileAttribute;
 import cn.keking.service.FilePreview;
+import cn.keking.utils.WebUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.Model;
+import org.springframework.util.StringUtils;
 
 /**
  * tiff 图片文件处理
@@ -14,6 +16,9 @@ import org.springframework.ui.Model;
 public class TiffFilePreviewImpl implements FilePreview {
 
     private final PictureFilePreviewImpl pictureFilePreview;
+    private static final String INITIALIZE_MEMORY_SIZE = "initializeMemorySize";
+    //默认初始化 50MB 内存
+    private static final long INITIALIZE_MEMORY_SIZE_VALUE_DEFAULT = 1024L * 1024 * 50;
 
     public TiffFilePreviewImpl(PictureFilePreviewImpl pictureFilePreview) {
         this.pictureFilePreview = pictureFilePreview;
@@ -22,6 +27,12 @@ public class TiffFilePreviewImpl implements FilePreview {
     @Override
     public String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) {
         pictureFilePreview.filePreviewHandle(url,model,fileAttribute);
+       String fileSize = WebUtils.getUrlParameterReg(url,INITIALIZE_MEMORY_SIZE);
+       if(StringUtils.hasText(fileSize)){
+           model.addAttribute(INITIALIZE_MEMORY_SIZE,fileSize);
+       }else {
+           model.addAttribute(INITIALIZE_MEMORY_SIZE,Long.toString(INITIALIZE_MEMORY_SIZE_VALUE_DEFAULT));
+       }
         return TIFF_FILE_PREVIEW_PAGE;
     }
 }

+ 3 - 0
server/src/main/resources/web/tiff.ftl

@@ -30,6 +30,9 @@
     var xhr = new XMLHttpRequest();
     xhr.responseType = 'arraybuffer';
     xhr.open('GET', $("#currentUrl").val());
+    var config = {};
+    config.TOTAL_MEMORY = ${initializeMemorySize};
+    Tiff.initialize(config)
     xhr.onload = function (e) {
         var tiff = new Tiff({buffer: xhr.response});
         var canvas = tiff.toCanvas();