diff --git a/README.md b/README.md
index 90af76a54c27fc1ad8c5c544ffe8ee7780077659..6af42ed8588652fe834f8274892a257c074ed1f0 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
com.github.wb04307201
file-preview-spring-boot-starter
- 1.2.7
+ 1.2.8
```
diff --git a/pom.xml b/pom.xml
index 96b479904562a72aa341be8ad97b76f9dd2c054c..622bf5780383a46425c15fa7442f272dc5178620 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,14 +18,14 @@
org.springframework.boot
spring-boot-dependencies
- 3.2.5
+ 3.3.1
pom
import
org.projectlombok
lombok
- 1.18.32
+ 1.18.34
ch.qos.logback
@@ -61,7 +61,7 @@
org.apache.commons
commons-compress
- 1.26.1
+ 1.26.2
@@ -119,6 +119,12 @@
io.fusionauth
fusionauth-jwt
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
diff --git a/src/main/java/cn/wubo/file/preview/core/FilePreviewService.java b/src/main/java/cn/wubo/file/preview/core/FilePreviewService.java
index 2782dfdfc834a0728cf7728a5dd03bd602ddd66b..6f5b56889f332f38c7010d05aa8b2353700bc45c 100644
--- a/src/main/java/cn/wubo/file/preview/core/FilePreviewService.java
+++ b/src/main/java/cn/wubo/file/preview/core/FilePreviewService.java
@@ -1,5 +1,6 @@
package cn.wubo.file.preview.core;
+import cn.wubo.file.preview.exception.PreviewRuntimeException;
import cn.wubo.file.preview.office.IOfficeConverter;
import cn.wubo.file.preview.record.IFilePreviewRecord;
import cn.wubo.file.preview.storage.IFileStorage;
@@ -34,27 +35,38 @@ public class FilePreviewService {
}
/**
- * 将输入流中的文件转换为预览信息。
+ * 转换输入流中的文件内容,生成预览信息。
+ * 该方法接收一个输入流和文件名,通过officeConverter将文件内容转换为新的格式,
+ * 并保存转换后的文件,最后返回包含预览信息的对象。
*
- * @param is 输入流,代表待转换的文件。
- * @param fileName 原文件名称。
- * @return FilePreviewInfo 文件预览信息对象,包含转换后的文件存储信息和记录。
+ * @param is 输入流,代表待转换的文件内容。
+ * @param fileName 原文件名。
+ * @return 返回包含转换后文件名、文件路径、原文件名和创建时间的文件预览信息对象。
*/
public FilePreviewInfo covert(InputStream is, String fileName) {
- // 转换文件
+ // 用于存储转换后的文件字节内容
byte[] bytes;
+ // 存储转换后的新文件名
String newFileName;
+
try (FastByteArrayOutputStream os = new FastByteArrayOutputStream()) {
+ // 使用officeConverter进行文件转换,同时获取新文件名
newFileName = officeConverter.convert(is, os, fileName);
+ // 将转换后的文件内容保存到字节数组中
bytes = os.toByteArray();
}
- // 存储转换后的文件
- FilePreviewInfo filePreviewInfo = fileStorage.save(bytes, newFileName);
-
- // 保存文件预览记录
+ // 创建文件预览信息对象
+ FilePreviewInfo filePreviewInfo = new FilePreviewInfo();
+ // 设置新文件名
+ filePreviewInfo.setFileName(newFileName);
+ // 保存转换后的文件到文件存储系统,并获取保存后的文件路径
+ filePreviewInfo.setFilePath(fileStorage.save(bytes, newFileName));
+ // 设置原文件名
filePreviewInfo.setOriginalFilename(fileName);
+ // 设置文件的创建时间
filePreviewInfo.setCreateTime(new Date());
+ // 将文件预览信息保存到数据库,并返回保存后的对象
filePreviewInfo = filePreviewRecord.save(filePreviewInfo);
return filePreviewInfo;
}
@@ -80,7 +92,7 @@ public class FilePreviewService {
// 根据ID查找文件预览信息
FilePreviewInfo filePreviewInfo = filePreviewRecord.findById(id);
// 尝试删除文件及其预览信息,并返回操作结果
- return fileStorage.delete(filePreviewInfo) && filePreviewRecord.delete(filePreviewInfo);
+ return fileStorage.delete(filePreviewInfo.getFilePath()) && filePreviewRecord.delete(filePreviewInfo);
}
/**
@@ -102,8 +114,7 @@ public class FilePreviewService {
// 设置原始文件名,如果压缩文件名中还包含"@",则取到最后一个"@"为止的字符串,且去除路径部分
String subFileName = compressFileName.contains("@") ? compressFileName.substring(0, compressFileName.lastIndexOf("@") + 1) : compressFileName;
- if (subFileName.contains("/"))
- subFileName = subFileName.substring(subFileName.lastIndexOf("/") + 1);
+ if (subFileName.contains("/")) subFileName = subFileName.substring(subFileName.lastIndexOf("/") + 1);
filePreviewInfo.setOriginalFilename(subFileName);
filePreviewInfo.setFileName(subFileName);
} else {
@@ -128,7 +139,7 @@ public class FilePreviewService {
try {
FilePreviewInfo compressFilePreviewInfo = findById(filePreviewInfo.getId());
// 首先将文件从存储服务中读取出来,然后写入到临时文件
- Path path = FileUtils.writeTempFile(compressFilePreviewInfo.getFileName(), fileStorage.getBytes(compressFilePreviewInfo));
+ Path path = FileUtils.writeTempFile(compressFilePreviewInfo.getFileName(), fileStorage.getBytes(compressFilePreviewInfo.getFilePath()));
// 对临时文件进行解压,获取最终需要的文件
for (String compressFileName : compressFileNames)
path = FileUtils.getSubCompressFile(path, compressFileName);
@@ -136,11 +147,11 @@ public class FilePreviewService {
return IoUtils.toByteArray(new BufferedInputStream(Files.newInputStream(path)));
} catch (IOException | ArchiveException e) {
// 如果处理过程中出现异常,则抛出运行时异常
- throw new RuntimeException(e);
+ throw new PreviewRuntimeException(e.getMessage(), e);
}
} else {
// 如果没有压缩文件名,则直接通过文件存储服务获取指定文件预览信息对应的字节码
- return fileStorage.getBytes(filePreviewInfo);
+ return fileStorage.getBytes(filePreviewInfo.getFilePath());
}
}
}
diff --git a/src/main/java/cn/wubo/file/preview/page/PageFactory.java b/src/main/java/cn/wubo/file/preview/page/PageFactory.java
index 45fa33890340b2685555d3fb1695dbe5ab447c81..411d1231b71401f9a3f5219aefbf2f962dbc8de8 100644
--- a/src/main/java/cn/wubo/file/preview/page/PageFactory.java
+++ b/src/main/java/cn/wubo/file/preview/page/PageFactory.java
@@ -4,7 +4,6 @@ import cn.wubo.file.preview.config.FilePreviewProperties;
import cn.wubo.file.preview.core.FilePreviewInfo;
import cn.wubo.file.preview.core.FilePreviewService;
import cn.wubo.file.preview.exception.PageRuntimeException;
-import cn.wubo.file.preview.page.impl.PdfPage;
import cn.wubo.file.preview.utils.FileUtils;
import java.lang.reflect.InvocationTargetException;
diff --git a/src/main/java/cn/wubo/file/preview/storage/IFileStorage.java b/src/main/java/cn/wubo/file/preview/storage/IFileStorage.java
index 0401b47369af07bafaba61687b5a249dc24b9cd9..8b43cf30cfa413762027f4fe8f5b47f7eb82d66b 100644
--- a/src/main/java/cn/wubo/file/preview/storage/IFileStorage.java
+++ b/src/main/java/cn/wubo/file/preview/storage/IFileStorage.java
@@ -1,7 +1,5 @@
package cn.wubo.file.preview.storage;
-import cn.wubo.file.preview.core.FilePreviewInfo;
-
public interface IFileStorage {
/**
@@ -10,21 +8,21 @@ public interface IFileStorage {
* @param fileName
* @return
*/
- FilePreviewInfo save(byte[] bytes, String fileName);
+ String save(byte[] bytes, String fileName);
/**
* 删除文件
- * @param filePreviewInfo
+ * @param path
* @return
*/
- Boolean delete(FilePreviewInfo filePreviewInfo);
+ Boolean delete(String path);
/**
* 获取文件bytes
- * @param filePreviewInfo
+ * @param path
* @return
*/
- byte[] getBytes(FilePreviewInfo filePreviewInfo);
+ byte[] getBytes(String path);
/**
* 初始化
diff --git a/src/main/java/cn/wubo/file/preview/storage/impl/LocalFileStorageImpl.java b/src/main/java/cn/wubo/file/preview/storage/impl/LocalFileStorageImpl.java
index 859ab1ab3a98b0c9c89bd67a48131e0b6d7a7476..e5211811f69b9d15753dbb0d46c100f0c5808acd 100644
--- a/src/main/java/cn/wubo/file/preview/storage/impl/LocalFileStorageImpl.java
+++ b/src/main/java/cn/wubo/file/preview/storage/impl/LocalFileStorageImpl.java
@@ -1,6 +1,5 @@
package cn.wubo.file.preview.storage.impl;
-import cn.wubo.file.preview.core.FilePreviewInfo;
import cn.wubo.file.preview.exception.StorageRuntimeException;
import cn.wubo.file.preview.storage.IFileStorage;
@@ -14,26 +13,22 @@ public class LocalFileStorageImpl implements IFileStorage {
private String basePath = "temp";
@Override
- public FilePreviewInfo save(byte[] bytes, String fileName) {
- FilePreviewInfo filePreviewInfo = new FilePreviewInfo();
- filePreviewInfo.setFileName(fileName);
-
+ public String save(byte[] bytes, String fileName) {
Path filePath = Paths.get(basePath, fileName);
- filePreviewInfo.setFilePath(filePath.toString());
try {
Files.createDirectories(filePath.getParent());
if (Files.exists(filePath)) Files.delete(filePath);
Files.createFile(filePath);
Files.write(filePath, bytes);
- return filePreviewInfo;
+ return filePath.toString();
} catch (IOException e) {
throw new StorageRuntimeException(e.getMessage(), e);
}
}
@Override
- public Boolean delete(FilePreviewInfo filePreviewInfo) {
- Path filePath = Paths.get(filePreviewInfo.getFilePath());
+ public Boolean delete(String path) {
+ Path filePath = Paths.get(path);
try {
Files.delete(filePath);
} catch (IOException e) {
@@ -43,9 +38,9 @@ public class LocalFileStorageImpl implements IFileStorage {
}
@Override
- public byte[] getBytes(FilePreviewInfo filePreviewInfo) {
+ public byte[] getBytes(String path) {
try {
- return Files.readAllBytes(Paths.get(filePreviewInfo.getFilePath()));
+ return Files.readAllBytes(Paths.get(path));
} catch (IOException e) {
throw new StorageRuntimeException(e.getMessage(), e);
}