修复 视频格式 转换模式和预览模式 特征码通用的问题 修复压缩包创建带文件名的文件夹

This commit is contained in:
gaoxiongzaq 2023-10-25 10:05:51 +08:00
parent a057808624
commit be4080c80d
3 changed files with 18 additions and 13 deletions

View File

@ -19,6 +19,7 @@ public enum FileType {
CODE("codeFilePreviewImpl"), CODE("codeFilePreviewImpl"),
OTHER("otherFilePreviewImpl"), OTHER("otherFilePreviewImpl"),
MEDIA("mediaFilePreviewImpl"), MEDIA("mediaFilePreviewImpl"),
MEDIACONVERT("mediaFilePreviewImpl"),
MARKDOWN("markdownFilePreviewImpl"), MARKDOWN("markdownFilePreviewImpl"),
XML("xmlFilePreviewImpl"), XML("xmlFilePreviewImpl"),
CAD("cadFilePreviewImpl"), CAD("cadFilePreviewImpl"),
@ -50,7 +51,7 @@ public enum FileType {
private static final String[] SSIM_TEXT_TYPES = ConfigConstants.getSimText(); 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[] 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(); 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<String, FileType> FILE_TYPE_MAPPER = new HashMap<>(); private static final Map<String, FileType> FILE_TYPE_MAPPER = new HashMap<>();
static { static {
@ -69,8 +70,8 @@ public enum FileType {
for (String media : MEDIA_TYPES) { for (String media : MEDIA_TYPES) {
FILE_TYPE_MAPPER.put(media, FileType.MEDIA); FILE_TYPE_MAPPER.put(media, FileType.MEDIA);
} }
for (String media : MEDIA_TYPES_CONVERT) { for (String MEDIACONVERT : MEDIACONVERT_TYPES_CONVERT) {
FILE_TYPE_MAPPER.put(media, FileType.MEDIA); FILE_TYPE_MAPPER.put( MEDIACONVERT, FileType. MEDIACONVERT);
} }
for (String tif : TIFF_TYPES) { for (String tif : TIFF_TYPES) {
FILE_TYPE_MAPPER.put(tif, FileType.TIFF); FILE_TYPE_MAPPER.put(tif, FileType.TIFF);

View File

@ -475,7 +475,7 @@ public class FileHandlerService implements InitializingBean {
cacheName = cacheUnifyName +(isHtml ? "html" : "pdf"); //生成文件添加类型后缀 防止同名文件 cacheName = cacheUnifyName +(isHtml ? "html" : "pdf"); //生成文件添加类型后缀 防止同名文件
}else if(type.equals(FileType.PDF)){ }else if(type.equals(FileType.PDF)){
cacheName = fileName; cacheName = fileName;
}else if(type.equals(FileType.MEDIA)){ }else if(type.equals(FileType.MEDIACONVERT)){
cacheName = cacheUnifyName +"mp4" ; cacheName = cacheUnifyName +"mp4" ;
}else if(type.equals(FileType.CAD)){ }else if(type.equals(FileType.CAD)){
String cadPreviewType = ConfigConstants.getCadPreviewType(); String cadPreviewType = ConfigConstants.getCadPreviewType();

View File

@ -12,6 +12,7 @@ import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.Frame;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.util.ObjectUtils;
import java.io.File; import java.io.File;
@ -38,8 +39,9 @@ public class MediaFilePreviewImpl implements FilePreview {
String cacheName = fileAttribute.getcacheName(); String cacheName = fileAttribute.getcacheName();
String outFilePath = fileAttribute.getoutFilePath(); String outFilePath = fileAttribute.getoutFilePath();
boolean forceUpdatedCache=fileAttribute.forceUpdatedCache(); boolean forceUpdatedCache=fileAttribute.forceUpdatedCache();
String fileKey = fileAttribute.getFileKey();
FileType type = fileAttribute.getType(); FileType type = fileAttribute.getType();
String[] mediaTypesConvert = FileType.MEDIA_TYPES_CONVERT; //获取支持的转换格式 String[] mediaTypesConvert = FileType.MEDIACONVERT_TYPES_CONVERT; //获取支持的转换格式
boolean mediaTypes = false; boolean mediaTypes = false;
for(String temp : mediaTypesConvert){ for(String temp : mediaTypesConvert){
if (suffix.equals(temp)) { if (suffix.equals(temp)) {
@ -57,7 +59,7 @@ public class MediaFilePreviewImpl implements FilePreview {
String convertedUrl = null; String convertedUrl = null;
try { try {
if(mediaTypes){ if(mediaTypes){
convertedUrl=convertToMp4(filePath,outFilePath); convertedUrl=convertToMp4(filePath,outFilePath,fileKey);
}else { }else {
convertedUrl =outFilePath; //其他协议的 不需要转换方式的文件 直接输出 convertedUrl =outFilePath; //其他协议的 不需要转换方式的文件 直接输出
} }
@ -94,7 +96,7 @@ public class MediaFilePreviewImpl implements FilePreview {
} }
return false; 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); FFmpegFrameGrabber frameGrabber = FFmpegFrameGrabber.createDefault(filePath);
Frame captured_frame; Frame captured_frame;
FFmpegFrameRecorder recorder = null; FFmpegFrameRecorder recorder = null;
@ -104,12 +106,14 @@ public class MediaFilePreviewImpl implements FilePreview {
if(desFile.exists()){ if(desFile.exists()){
return outFilePath; return outFilePath;
} }
int index = outFilePath.lastIndexOf("."); if (!ObjectUtils.isEmpty(fileKey)) { //判断 是压缩包的创建新的目录
String folder = outFilePath.substring(0, index); int index = outFilePath.lastIndexOf("/"); //截取最后一个斜杠的前面的内容
File path = new File(folder); String folder = outFilePath.substring(0, index);
//目录不存在 创建新的目录 File path = new File(folder);
if (!path.exists()) { //目录不存在 创建新的目录
path.mkdirs(); if (!path.exists()) {
path.mkdirs();
}
} }
frameGrabber.start(); frameGrabber.start();
recorder = new FFmpegFrameRecorder(outFilePath, frameGrabber.getImageWidth(), frameGrabber.getImageHeight(), frameGrabber.getAudioChannels()); recorder = new FFmpegFrameRecorder(outFilePath, frameGrabber.getImageWidth(), frameGrabber.getImageHeight(), frameGrabber.getAudioChannels());