From 20f328906caf9b6a840746150bd0d7cdb1a7187c Mon Sep 17 00:00:00 2001
From: BearBen <2575200500@qq.com>
Date: Fri, 17 Dec 2021 09:23:32 +0800
Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=8E=8B=E6=96=B9=E6=A1=88=E6=96=B0?=
=?UTF-8?q?=E7=89=88=E6=B5=8B=E8=AF=95=E4=BF=AE=E5=A4=8D=E4=B9=B1=E7=A0=81?=
=?UTF-8?q?Linux=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
server/pom.xml | 11 ++
.../java/cn/keking/model/FileAttribute.java | 17 +-
.../cn/keking/service/CompressFileReader.java | 186 +++++++++++++++---
.../cn/keking/service/FileHandlerService.java | 3 +
.../service/impl/CompressFilePreviewImpl.java | 13 +-
.../java/cn/keking/utils/DownloadUtils.java | 24 +--
.../java/cn/keking/utils/FileHeaderRar.java | 28 +++
7 files changed, 227 insertions(+), 55 deletions(-)
create mode 100644 server/src/main/java/cn/keking/utils/FileHeaderRar.java
diff --git a/server/pom.xml b/server/pom.xml
index 72a1941a..485f0424 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -28,6 +28,17 @@
org.springframework.boot
spring-boot-starter-freemarker
+
+
+ net.sf.sevenzipjbinding
+ sevenzipjbinding
+ 16.02-2.01
+
+
+ net.sf.sevenzipjbinding
+ sevenzipjbinding-all-platforms
+ 16.02-2.01
+
org.springframework.boot
spring-boot-starter-web
diff --git a/server/src/main/java/cn/keking/model/FileAttribute.java b/server/src/main/java/cn/keking/model/FileAttribute.java
index 036bef9a..6ba903b7 100644
--- a/server/src/main/java/cn/keking/model/FileAttribute.java
+++ b/server/src/main/java/cn/keking/model/FileAttribute.java
@@ -15,6 +15,7 @@ public class FileAttribute {
private String fileKey;
private String officePreviewType = ConfigConstants.getOfficePreviewType();
private String tifPreviewType;
+ private Boolean skipDownLoad = false;
public FileAttribute() {
}
@@ -34,15 +35,6 @@ public class FileAttribute {
this.officePreviewType = officePreviewType;
}
- public FileAttribute(FileType type, String suffix, String name, String url, String officePreviewType, String tifPreviewType) {
- this.type = type;
- this.suffix = suffix;
- this.name = name;
- this.url = url;
- this.officePreviewType = officePreviewType;
- this.tifPreviewType = tifPreviewType;
- }
-
public String getFileKey() {
return fileKey;
}
@@ -90,7 +82,13 @@ public class FileAttribute {
public void setUrl(String url) {
this.url = url;
}
+ public Boolean getSkipDownLoad() {
+ return skipDownLoad;
+ }
+ public void setSkipDownLoad(Boolean skipDownLoad) {
+ this.skipDownLoad = skipDownLoad;
+ }
public String getTifPreviewType() {
return tifPreviewType;
}
@@ -98,5 +96,4 @@ public class FileAttribute {
public void setTifPreviewType(String previewType) {
this.tifPreviewType = previewType;
}
-
}
diff --git a/server/src/main/java/cn/keking/service/CompressFileReader.java b/server/src/main/java/cn/keking/service/CompressFileReader.java
index c11e5909..e73751a5 100644
--- a/server/src/main/java/cn/keking/service/CompressFileReader.java
+++ b/server/src/main/java/cn/keking/service/CompressFileReader.java
@@ -2,6 +2,7 @@ package cn.keking.service;
import cn.keking.config.ConfigConstants;
import cn.keking.model.FileType;
+import cn.keking.utils.FileHeaderRar;
import cn.keking.utils.KkFileUtils;
import cn.keking.web.filter.BaseUrlFilter;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -9,10 +10,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.junrar.Archive;
import com.github.junrar.exception.RarException;
import com.github.junrar.rarfile.FileHeader;
+import net.sf.sevenzipjbinding.*;
+import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream;
+import net.sf.sevenzipjbinding.simple.ISimpleInArchive;
import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipFile;
+import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Component;
import java.io.*;
@@ -24,6 +29,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
/**
* @author yudian-it
@@ -99,44 +105,84 @@ public class CompressFileReader {
List imgUrls = new ArrayList<>();
String baseUrl = BaseUrlFilter.getBaseUrl();
try {
- Archive archive = new Archive(new FileInputStream(filePath));
- List headers = archive.getFileHeaders();
- headers = sortedHeaders(headers);
+ List items = getRar4Paths(filePath);
String archiveFileName = fileHandlerService.getFileNameFromPath(filePath);
- List