diff --git a/jodconverter-web/pom.xml b/jodconverter-web/pom.xml
index fb02e292..3df47a57 100644
--- a/jodconverter-web/pom.xml
+++ b/jodconverter-web/pom.xml
@@ -160,11 +160,6 @@
xstream
1.4.15
-
- com.google.guava
- guava
- 19.0
-
com.googlecode.concurrentlinkedhashmap
concurrentlinkedhashmap-lru
diff --git a/jodconverter-web/src/main/java/cn/keking/model/FileAttribute.java b/jodconverter-web/src/main/java/cn/keking/model/FileAttribute.java
index f5dd8abc..470208d9 100644
--- a/jodconverter-web/src/main/java/cn/keking/model/FileAttribute.java
+++ b/jodconverter-web/src/main/java/cn/keking/model/FileAttribute.java
@@ -9,13 +9,10 @@ import cn.keking.config.ConfigConstants;
public class FileAttribute {
private FileType type;
-
private String suffix;
-
private String name;
-
private String url;
-
+ private String fileKey;
private String officePreviewType = ConfigConstants.getOfficePreviewType();
public FileAttribute() {
@@ -36,6 +33,14 @@ public class FileAttribute {
this.officePreviewType = officePreviewType;
}
+ public String getFileKey() {
+ return fileKey;
+ }
+
+ public void setFileKey(String fileKey) {
+ this.fileKey = fileKey;
+ }
+
public String getOfficePreviewType() {
return officePreviewType;
}
diff --git a/jodconverter-web/src/main/java/cn/keking/model/FileType.java b/jodconverter-web/src/main/java/cn/keking/model/FileType.java
index b6ce0df3..aab0bd1c 100644
--- a/jodconverter-web/src/main/java/cn/keking/model/FileType.java
+++ b/jodconverter-web/src/main/java/cn/keking/model/FileType.java
@@ -5,7 +5,7 @@ package cn.keking.model;
* Content :文件类型,文本,office,压缩包等等
*/
public enum FileType {
- picture("picturefilepreviewimpl"),
+ picture("pictureFilePreviewImpl"),
compress("compressFilePreviewImpl"),
office("officeFilePreviewImpl"),
simText("simTextFilePreviewImpl"),
diff --git a/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceJDKImpl.java b/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceJDKImpl.java
index 55c960aa..ef63ee63 100644
--- a/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceJDKImpl.java
+++ b/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceJDKImpl.java
@@ -5,7 +5,10 @@ import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap;
import com.googlecode.concurrentlinkedhashmap.Weighers;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import javax.annotation.PostConstruct;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ArrayBlockingQueue;
@@ -21,15 +24,78 @@ import java.util.concurrent.BlockingQueue;
public class CacheServiceJDKImpl implements CacheService {
private Map pdfCache;
-
private Map> imgCache;
-
private Map pdfImagesCache;
-
private static final int QUEUE_SIZE = 500000;
-
private final BlockingQueue blockingQueue = new ArrayBlockingQueue<>(QUEUE_SIZE);
+ @PostConstruct
+ public void initCache(){
+ initPDFCachePool(CacheService.DEFAULT_PDF_CAPACITY);
+ initIMGCachePool(CacheService.DEFAULT_IMG_CAPACITY);
+ initPdfImagesCachePool(CacheService.DEFAULT_PDFIMG_CAPACITY);
+ }
+
+ @Override
+ public void putPDFCache(String key, String value) {
+ pdfCache.put(key, value);
+ }
+
+ @Override
+ public void putImgCache(String key, List value) {
+ imgCache.put(key, value);
+ }
+
+ @Override
+ public Map getPDFCache() {
+ return pdfCache;
+ }
+
+ @Override
+ public String getPDFCache(String key) {
+ return pdfCache.get(key);
+ }
+
+ @Override
+ public Map> getImgCache() {
+ return imgCache;
+ }
+
+ @Override
+ public List getImgCache(String key) {
+ if(StringUtils.isEmpty(key)){
+ return new ArrayList<>();
+ }
+ return imgCache.get(key);
+ }
+
+ @Override
+ public Integer getPdfImageCache(String key) {
+ return pdfImagesCache.get(key);
+ }
+
+ @Override
+ public void putPdfImageCache(String pdfFilePath, int num) {
+ pdfImagesCache.put(pdfFilePath, num);
+ }
+
+ @Override
+ public void cleanCache() {
+ initPDFCachePool(CacheService.DEFAULT_PDF_CAPACITY);
+ initIMGCachePool(CacheService.DEFAULT_IMG_CAPACITY);
+ initPdfImagesCachePool(CacheService.DEFAULT_PDFIMG_CAPACITY);
+ }
+
+ @Override
+ public void addQueueTask(String url) {
+ blockingQueue.add(url);
+ }
+
+ @Override
+ public String takeQueueTask() throws InterruptedException {
+ return blockingQueue.take();
+ }
+
@Override
public void initPDFCachePool(Integer capacity) {
pdfCache = new ConcurrentLinkedHashMap.Builder()
@@ -50,85 +116,4 @@ public class CacheServiceJDKImpl implements CacheService {
.maximumWeightedCapacity(capacity).weigher(Weighers.singleton())
.build();
}
-
- @Override
- public void putPDFCache(String key, String value) {
- if (pdfCache == null) {
- initPDFCachePool(CacheService.DEFAULT_PDF_CAPACITY);
- }
- pdfCache.put(key, value);
- }
-
- @Override
- public void putImgCache(String key, List value) {
- if (imgCache == null) {
- initIMGCachePool(CacheService.DEFAULT_IMG_CAPACITY);
- }
- imgCache.put(key, value);
- }
-
- @Override
- public Map getPDFCache() {
- if (pdfCache == null) {
- initPDFCachePool(CacheService.DEFAULT_PDF_CAPACITY);
- }
- return pdfCache;
- }
-
- @Override
- public String getPDFCache(String key) {
- if (pdfCache == null) {
- initPDFCachePool(CacheService.DEFAULT_PDF_CAPACITY);
- }
- return pdfCache.get(key);
- }
-
- @Override
- public Map> getImgCache() {
- if (imgCache == null) {
- initPDFCachePool(CacheService.DEFAULT_IMG_CAPACITY);
- }
- return imgCache;
- }
-
- @Override
- public List getImgCache(String key) {
- if (imgCache == null) {
- initPDFCachePool(CacheService.DEFAULT_IMG_CAPACITY);
- }
- return imgCache.get(key);
- }
-
- @Override
- public Integer getPdfImageCache(String key) {
- if (pdfImagesCache == null) {
- initPdfImagesCachePool(CacheService.DEFAULT_PDFIMG_CAPACITY);
- }
- return pdfImagesCache.get(key);
- }
-
- @Override
- public void putPdfImageCache(String pdfFilePath, int num) {
- if (pdfImagesCache == null) {
- initPdfImagesCachePool(CacheService.DEFAULT_PDFIMG_CAPACITY);
- }
- pdfImagesCache.put(pdfFilePath, num);
- }
-
- @Override
- public void cleanCache() {
- initPDFCachePool(CacheService.DEFAULT_PDF_CAPACITY);
- initIMGCachePool(CacheService.DEFAULT_IMG_CAPACITY);
- initPdfImagesCachePool(CacheService.DEFAULT_PDFIMG_CAPACITY);
- }
-
- @Override
- public void addQueueTask(String url) {
- blockingQueue.add(url);
- }
-
- @Override
- public String takeQueueTask() throws InterruptedException {
- return blockingQueue.take();
- }
}
diff --git a/jodconverter-web/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java b/jodconverter-web/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java
index 86257d0e..d14ffaa5 100644
--- a/jodconverter-web/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java
+++ b/jodconverter-web/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java
@@ -48,7 +48,6 @@ public class OfficeFilePreviewImpl implements FilePreview {
boolean isHtml = suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx");
String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + (isHtml ? "html" : "pdf");
String outFilePath = FILE_DIR + pdfName;
- model.addAttribute("switchDisabled", ConfigConstants.getOfficePreviewSwitchDisabled());
// 判断之前是否已转换过,如果转换过,直接返回,否则执行转换
if (!fileUtils.listConvertedFiles().containsKey(pdfName) || !ConfigConstants.isCacheEnabled()) {
String filePath;
diff --git a/jodconverter-web/src/main/java/cn/keking/service/impl/PdfFilePreviewImpl.java b/jodconverter-web/src/main/java/cn/keking/service/impl/PdfFilePreviewImpl.java
index 1abe6e54..7fabd6e6 100644
--- a/jodconverter-web/src/main/java/cn/keking/service/impl/PdfFilePreviewImpl.java
+++ b/jodconverter-web/src/main/java/cn/keking/service/impl/PdfFilePreviewImpl.java
@@ -44,7 +44,6 @@ public class PdfFilePreviewImpl implements FilePreview {
String baseUrl = BaseUrlFilter.getBaseUrl();
String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + "pdf";
String outFilePath = FILE_DIR + pdfName;
- model.addAttribute("switchDisabled", ConfigConstants.getOfficePreviewSwitchDisabled());
if (OfficeFilePreviewImpl.OFFICE_PREVIEW_TYPE_IMAGE.equals(officePreviewType) || OfficeFilePreviewImpl.OFFICE_PREVIEW_TYPE_ALL_IMAGES.equals(officePreviewType)) {
//当文件不存在时,就去下载
if (!fileUtils.listConvertedFiles().containsKey(pdfName) || !ConfigConstants.isCacheEnabled()) {
diff --git a/jodconverter-web/src/main/java/cn/keking/service/impl/PictureFilePreviewImpl.java b/jodconverter-web/src/main/java/cn/keking/service/impl/PictureFilePreviewImpl.java
index 229863a4..fd79e248 100644
--- a/jodconverter-web/src/main/java/cn/keking/service/impl/PictureFilePreviewImpl.java
+++ b/jodconverter-web/src/main/java/cn/keking/service/impl/PictureFilePreviewImpl.java
@@ -1,16 +1,14 @@
package cn.keking.service.impl;
-import cn.keking.config.ConfigConstants;
import cn.keking.model.FileAttribute;
import cn.keking.model.ReturnResponse;
import cn.keking.service.FilePreview;
import cn.keking.utils.DownloadUtils;
import cn.keking.utils.FileUtils;
-import com.google.common.collect.Lists;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;
-import org.springframework.web.context.request.RequestContextHolder;
-
+import org.springframework.util.CollectionUtils;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -32,14 +30,12 @@ public class PictureFilePreviewImpl implements FilePreview {
@Override
public String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) {
- String fileKey = (String) RequestContextHolder.currentRequestAttributes().getAttribute("fileKey",0);
- List imgUrls = Lists.newArrayList(url);
- model.addAttribute("switchDisabled", ConfigConstants.getOfficePreviewSwitchDisabled());
- try {
- imgUrls.clear();
- imgUrls.addAll(fileUtils.getImgCache(fileKey));
- } catch (Exception e){
- imgUrls = Lists.newArrayList(url);
+ List imgUrls = new ArrayList<>();
+ imgUrls.add(url);
+ String fileKey = fileAttribute.getFileKey();
+ List zipImgUrls = fileUtils.getImgCache(fileKey);
+ if (!CollectionUtils.isEmpty(zipImgUrls)) {
+ imgUrls.addAll(zipImgUrls);
}
// 不是http开头,浏览器不能直接访问,需下载到本地
if (url != null && !url.toLowerCase().startsWith("http")) {
@@ -50,7 +46,9 @@ public class PictureFilePreviewImpl implements FilePreview {
return "fileNotSupported";
} else {
String file = fileUtils.getRelativePath(response.getContent());
- model.addAttribute("imgurls", Lists.newArrayList(file));
+ imgUrls.clear();
+ imgUrls.add(file);
+ model.addAttribute("imgurls", imgUrls);
model.addAttribute("currentUrl", file);
}
} else {
diff --git a/jodconverter-web/src/main/java/cn/keking/utils/FileUtils.java b/jodconverter-web/src/main/java/cn/keking/utils/FileUtils.java
index 4d5fea32..92292df1 100644
--- a/jodconverter-web/src/main/java/cn/keking/utils/FileUtils.java
+++ b/jodconverter-web/src/main/java/cn/keking/utils/FileUtils.java
@@ -4,7 +4,6 @@ import cn.keking.config.ConfigConstants;
import cn.keking.model.FileAttribute;
import cn.keking.model.FileType;
import cn.keking.service.cache.CacheService;
-import com.google.common.collect.Lists;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
@@ -12,10 +11,7 @@ import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* @author yudian-it
@@ -125,7 +121,7 @@ public class FileUtils {
}
public List listPictureTypes() {
- List list = Lists.newArrayList();
+ List list = new LinkedList<>();
list.add("jpg");
list.add("jpeg");
list.add("png");
@@ -137,7 +133,7 @@ public class FileUtils {
}
public List listArchiveTypes() {
- List list = Lists.newArrayList();
+ List list = new LinkedList<>();
list.add("rar");
list.add("zip");
list.add("jar");
@@ -149,7 +145,7 @@ public class FileUtils {
}
public List listOfficeTypes() {
- List list = Lists.newArrayList();
+ List list = new LinkedList<>();
list.add("docx");
list.add("doc");
list.add("xls");
@@ -358,9 +354,13 @@ public class FileUtils {
attribute.setUrl(url);
if (req != null) {
String officePreviewType = req.getParameter("officePreviewType");
+ String fileKey = req.getParameter("fileKey");
if(StringUtils.hasText(officePreviewType)){
attribute.setOfficePreviewType(officePreviewType);
}
+ if(StringUtils.hasText(fileKey)){
+ attribute.setFileKey(fileKey);
+ }
}
return attribute;
}
diff --git a/jodconverter-web/src/main/java/cn/keking/utils/ZipReader.java b/jodconverter-web/src/main/java/cn/keking/utils/ZipReader.java
index 49fbdb79..f6217936 100644
--- a/jodconverter-web/src/main/java/cn/keking/utils/ZipReader.java
+++ b/jodconverter-web/src/main/java/cn/keking/utils/ZipReader.java
@@ -8,8 +8,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.junrar.Archive;
import com.github.junrar.exception.RarException;
import com.github.junrar.rarfile.FileHeader;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
@@ -47,8 +45,8 @@ public class ZipReader {
public String readZipFile(String filePath,String fileKey) {
String archiveSeparator = "/";
- Map appender = Maps.newHashMap();
- List imgUrls = Lists.newArrayList();
+ Map appender = new HashMap<>();
+ List imgUrls = new LinkedList<>();
String baseUrl = BaseUrlFilter.getBaseUrl();
String archiveFileName = fileUtils.getFileNameFromPath(filePath);
try {
@@ -56,7 +54,7 @@ public class ZipReader {
Enumeration entries = zipFile.getEntries();
// 排序
entries = sortZipEntries(entries);
- List