From be4080c80d6d1656febf38ae293cb799fb352639 Mon Sep 17 00:00:00 2001 From: gaoxiongzaq Date: Wed, 25 Oct 2023 10:05:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=20=E8=BD=AC=E6=8D=A2=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E5=92=8C=E9=A2=84=E8=A7=88=E6=A8=A1=E5=BC=8F=20=E7=89=B9?= =?UTF-8?q?=E5=BE=81=E7=A0=81=E9=80=9A=E7=94=A8=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20=20=20=E4=BF=AE=E5=A4=8D=E5=8E=8B=E7=BC=A9=E5=8C=85=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E5=B8=A6=E6=96=87=E4=BB=B6=E5=90=8D=E7=9A=84=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/keking/model/FileType.java | 7 +++--- .../cn/keking/service/FileHandlerService.java | 2 +- .../service/impl/MediaFilePreviewImpl.java | 22 +++++++++++-------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/server/src/main/java/cn/keking/model/FileType.java b/server/src/main/java/cn/keking/model/FileType.java index ac48be56..e5870e2d 100644 --- a/server/src/main/java/cn/keking/model/FileType.java +++ b/server/src/main/java/cn/keking/model/FileType.java @@ -19,6 +19,7 @@ public enum FileType { CODE("codeFilePreviewImpl"), OTHER("otherFilePreviewImpl"), MEDIA("mediaFilePreviewImpl"), + MEDIACONVERT("mediaFilePreviewImpl"), MARKDOWN("markdownFilePreviewImpl"), XML("xmlFilePreviewImpl"), CAD("cadFilePreviewImpl"), @@ -50,7 +51,7 @@ public enum FileType { private static final String[] SSIM_TEXT_TYPES = ConfigConstants.getSimText(); private static final String[] CODES = {"java", "c", "php", "go", "python", "py", "js", "html", "ftl", "css", "lua", "sh", "rb", "yaml", "yml", "json", "h", "cpp", "cs", "aspx", "jsp", "sql"}; private static final String[] MEDIA_TYPES = ConfigConstants.getMedia(); - public static final String[] MEDIA_TYPES_CONVERT = ConfigConstants.getConvertMedias(); + public static final String[] MEDIACONVERT_TYPES_CONVERT = ConfigConstants.getConvertMedias(); private static final Map FILE_TYPE_MAPPER = new HashMap<>(); static { @@ -69,8 +70,8 @@ public enum FileType { for (String media : MEDIA_TYPES) { FILE_TYPE_MAPPER.put(media, FileType.MEDIA); } - for (String media : MEDIA_TYPES_CONVERT) { - FILE_TYPE_MAPPER.put(media, FileType.MEDIA); + for (String MEDIACONVERT : MEDIACONVERT_TYPES_CONVERT) { + FILE_TYPE_MAPPER.put( MEDIACONVERT, FileType. MEDIACONVERT); } for (String tif : TIFF_TYPES) { FILE_TYPE_MAPPER.put(tif, FileType.TIFF); diff --git a/server/src/main/java/cn/keking/service/FileHandlerService.java b/server/src/main/java/cn/keking/service/FileHandlerService.java index 855bd95c..a199da8b 100644 --- a/server/src/main/java/cn/keking/service/FileHandlerService.java +++ b/server/src/main/java/cn/keking/service/FileHandlerService.java @@ -475,7 +475,7 @@ public class FileHandlerService implements InitializingBean { cacheName = cacheUnifyName +(isHtml ? "html" : "pdf"); //生成文件添加类型后缀 防止同名文件 }else if(type.equals(FileType.PDF)){ cacheName = fileName; - }else if(type.equals(FileType.MEDIA)){ + }else if(type.equals(FileType.MEDIACONVERT)){ cacheName = cacheUnifyName +"mp4" ; }else if(type.equals(FileType.CAD)){ String cadPreviewType = ConfigConstants.getCadPreviewType(); diff --git a/server/src/main/java/cn/keking/service/impl/MediaFilePreviewImpl.java b/server/src/main/java/cn/keking/service/impl/MediaFilePreviewImpl.java index b5df72ac..1842b8a6 100644 --- a/server/src/main/java/cn/keking/service/impl/MediaFilePreviewImpl.java +++ b/server/src/main/java/cn/keking/service/impl/MediaFilePreviewImpl.java @@ -12,6 +12,7 @@ import org.bytedeco.javacv.FFmpegFrameRecorder; import org.bytedeco.javacv.Frame; import org.springframework.stereotype.Service; import org.springframework.ui.Model; +import org.springframework.util.ObjectUtils; import java.io.File; @@ -38,8 +39,9 @@ public class MediaFilePreviewImpl implements FilePreview { String cacheName = fileAttribute.getcacheName(); String outFilePath = fileAttribute.getoutFilePath(); boolean forceUpdatedCache=fileAttribute.forceUpdatedCache(); + String fileKey = fileAttribute.getFileKey(); FileType type = fileAttribute.getType(); - String[] mediaTypesConvert = FileType.MEDIA_TYPES_CONVERT; //获取支持的转换格式 + String[] mediaTypesConvert = FileType.MEDIACONVERT_TYPES_CONVERT; //获取支持的转换格式 boolean mediaTypes = false; for(String temp : mediaTypesConvert){ if (suffix.equals(temp)) { @@ -57,7 +59,7 @@ public class MediaFilePreviewImpl implements FilePreview { String convertedUrl = null; try { if(mediaTypes){ - convertedUrl=convertToMp4(filePath,outFilePath); + convertedUrl=convertToMp4(filePath,outFilePath,fileKey); }else { convertedUrl =outFilePath; //其他协议的 不需要转换方式的文件 直接输出 } @@ -94,7 +96,7 @@ public class MediaFilePreviewImpl implements FilePreview { } return false; } - private static String convertToMp4(String filePath,String outFilePath)throws Exception { + private static String convertToMp4(String filePath,String outFilePath,String fileKey)throws Exception { FFmpegFrameGrabber frameGrabber = FFmpegFrameGrabber.createDefault(filePath); Frame captured_frame; FFmpegFrameRecorder recorder = null; @@ -104,12 +106,14 @@ public class MediaFilePreviewImpl implements FilePreview { if(desFile.exists()){ return outFilePath; } - int index = outFilePath.lastIndexOf("."); - String folder = outFilePath.substring(0, index); - File path = new File(folder); - //目录不存在 创建新的目录 - if (!path.exists()) { - path.mkdirs(); + if (!ObjectUtils.isEmpty(fileKey)) { //判断 是压缩包的创建新的目录 + int index = outFilePath.lastIndexOf("/"); //截取最后一个斜杠的前面的内容 + String folder = outFilePath.substring(0, index); + File path = new File(folder); + //目录不存在 创建新的目录 + if (!path.exists()) { + path.mkdirs(); + } } frameGrabber.start(); recorder = new FFmpegFrameRecorder(outFilePath, frameGrabber.getImageWidth(), frameGrabber.getImageHeight(), frameGrabber.getAudioChannels());