Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 628efec6bd | |||
| 6d0846a551 | |||
| 41d9015023 | |||
| 3f40b60c64 | |||
| f244054462 | |||
| 37fbc98827 |
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
<groupId>cn.keking</groupId>
|
<groupId>cn.keking</groupId>
|
||||||
<artifactId>kkFileView</artifactId>
|
<artifactId>kkFileView</artifactId>
|
||||||
<version>2.0.1</version>
|
<version>2.0.2</version>
|
||||||
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
@ -114,6 +114,12 @@
|
|||||||
<artifactId>junrar</artifactId>
|
<artifactId>junrar</artifactId>
|
||||||
<version>4.0.0</version>
|
<version>4.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- 解压(7z)-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.tukaani</groupId>
|
||||||
|
<artifactId>xz</artifactId>
|
||||||
|
<version>1.8</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.sourceforge.jchardet</groupId>
|
<groupId>net.sourceforge.jchardet</groupId>
|
||||||
<artifactId>jchardet</artifactId>
|
<artifactId>jchardet</artifactId>
|
||||||
|
|||||||
@ -4,4 +4,4 @@ cd "%KKFILEVIEW_BIN_FOLDER%"
|
|||||||
echo Using KKFILEVIEW_BIN_FOLDER %KKFILEVIEW_BIN_FOLDER%
|
echo Using KKFILEVIEW_BIN_FOLDER %KKFILEVIEW_BIN_FOLDER%
|
||||||
echo Starting kkFileView...
|
echo Starting kkFileView...
|
||||||
echo Please check log file for more information
|
echo Please check log file for more information
|
||||||
java -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider -Dspring.config.location=..\conf\application.properties -jar kkFileView-2.0.1.jar -> ..\log\kkFileView.log
|
java -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider -Dspring.config.location=..\conf\application.properties -jar kkFileView-2.0.2.jar -> ..\log\kkFileView.log
|
||||||
@ -27,4 +27,4 @@ else
|
|||||||
fi
|
fi
|
||||||
echo "Starting kkFileView..."
|
echo "Starting kkFileView..."
|
||||||
echo "Please check log file for more information"
|
echo "Please check log file for more information"
|
||||||
nohup java -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider -Dspring.config.location=../conf/application.properties -jar kkFileView-2.0.1.jar > ../log/kkFileView.log 2>&1 &
|
nohup java -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider -Dspring.config.location=../conf/application.properties -jar kkFileView-2.0.2.jar > ../log/kkFileView.log 2>&1 &
|
||||||
|
|||||||
@ -46,7 +46,8 @@ public class ConfigRefreshComponent {
|
|||||||
String officePreviewType;
|
String officePreviewType;
|
||||||
String configFilePath = OfficeUtils.getCustomizedConfigPath();
|
String configFilePath = OfficeUtils.getCustomizedConfigPath();
|
||||||
while (true) {
|
while (true) {
|
||||||
BufferedReader bufferedReader = new BufferedReader(new FileReader(configFilePath));
|
FileReader fileReader = new FileReader(configFilePath);
|
||||||
|
BufferedReader bufferedReader = new BufferedReader(fileReader);
|
||||||
properties.load(bufferedReader);
|
properties.load(bufferedReader);
|
||||||
text = properties.getProperty("simText", DEFAULT_TXT_TYPE);
|
text = properties.getProperty("simText", DEFAULT_TXT_TYPE);
|
||||||
media = properties.getProperty("media", DEFAULT_MEDIA_TYPE);
|
media = properties.getProperty("media", DEFAULT_MEDIA_TYPE);
|
||||||
@ -58,6 +59,8 @@ public class ConfigRefreshComponent {
|
|||||||
ConfigConstants.setMedia(mediaArray);
|
ConfigConstants.setMedia(mediaArray);
|
||||||
ConfigConstants.setConvertedFileCharset(convertedFileCharset);
|
ConfigConstants.setConvertedFileCharset(convertedFileCharset);
|
||||||
ConfigConstants.setOfficePreviewType(officePreviewType);
|
ConfigConstants.setOfficePreviewType(officePreviewType);
|
||||||
|
bufferedReader.close();
|
||||||
|
fileReader.close();
|
||||||
Thread.sleep(1000L);
|
Thread.sleep(1000L);
|
||||||
}
|
}
|
||||||
} catch (IOException | InterruptedException e) {
|
} catch (IOException | InterruptedException e) {
|
||||||
|
|||||||
@ -79,7 +79,7 @@ public class CacheServiceRocksDBImpl implements CacheService {
|
|||||||
@Override
|
@Override
|
||||||
public void putPDFCache(String key, String value) {
|
public void putPDFCache(String key, String value) {
|
||||||
try {
|
try {
|
||||||
Map<String, String> pdfCacheItem = new HashMap<>();
|
Map<String, String> pdfCacheItem = getPDFCache();
|
||||||
pdfCacheItem.put(key, value);
|
pdfCacheItem.put(key, value);
|
||||||
db.put(REDIS_FILE_PREVIEW_PDF_KEY.getBytes(), toByteArray(pdfCacheItem));
|
db.put(REDIS_FILE_PREVIEW_PDF_KEY.getBytes(), toByteArray(pdfCacheItem));
|
||||||
} catch (RocksDBException | IOException e) {
|
} catch (RocksDBException | IOException e) {
|
||||||
@ -90,7 +90,7 @@ public class CacheServiceRocksDBImpl implements CacheService {
|
|||||||
@Override
|
@Override
|
||||||
public void putImgCache(String key, List<String> value) {
|
public void putImgCache(String key, List<String> value) {
|
||||||
try {
|
try {
|
||||||
Map<String, List<String>> imgCacheItem = new HashMap<>();
|
Map<String, List<String>> imgCacheItem = getImgCache();
|
||||||
imgCacheItem.put(key, value);
|
imgCacheItem.put(key, value);
|
||||||
db.put(REDIS_FILE_PREVIEW_PDF_KEY.getBytes(), toByteArray(imgCacheItem));
|
db.put(REDIS_FILE_PREVIEW_PDF_KEY.getBytes(), toByteArray(imgCacheItem));
|
||||||
} catch (RocksDBException | IOException e) {
|
} catch (RocksDBException | IOException e) {
|
||||||
@ -145,6 +145,16 @@ public class CacheServiceRocksDBImpl implements CacheService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, Integer> getPdfImageCaches() {
|
||||||
|
Map<String, Integer> map = new HashMap<>();
|
||||||
|
try{
|
||||||
|
map = (Map<String, Integer>) toObject(db.get(REDIS_FILE_PREVIEW_PDF_IMGS_KEY.getBytes()));
|
||||||
|
} catch (RocksDBException | IOException | ClassNotFoundException e) {
|
||||||
|
LOGGER.error("Get from RocksDB Exception" + e);
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer getPdfImageCache(String key) {
|
public Integer getPdfImageCache(String key) {
|
||||||
Integer result = 0;
|
Integer result = 0;
|
||||||
@ -161,7 +171,7 @@ public class CacheServiceRocksDBImpl implements CacheService {
|
|||||||
@Override
|
@Override
|
||||||
public void putPdfImageCache(String pdfFilePath, int num) {
|
public void putPdfImageCache(String pdfFilePath, int num) {
|
||||||
try {
|
try {
|
||||||
Map<String, Integer> pdfImageCacheItem = new HashMap<>();
|
Map<String, Integer> pdfImageCacheItem = getPdfImageCaches();
|
||||||
pdfImageCacheItem.put(pdfFilePath, num);
|
pdfImageCacheItem.put(pdfFilePath, num);
|
||||||
db.put(REDIS_FILE_PREVIEW_PDF_IMGS_KEY.getBytes(), toByteArray(pdfImageCacheItem));
|
db.put(REDIS_FILE_PREVIEW_PDF_IMGS_KEY.getBytes(), toByteArray(pdfImageCacheItem));
|
||||||
} catch (RocksDBException | IOException e) {
|
} catch (RocksDBException | IOException e) {
|
||||||
|
|||||||
@ -47,6 +47,8 @@ public class CompressFilePreviewImpl implements FilePreview{
|
|||||||
fileTree = zipReader.readZipFile(filePath, fileName);
|
fileTree = zipReader.readZipFile(filePath, fileName);
|
||||||
} else if ("rar".equalsIgnoreCase(suffix)) {
|
} else if ("rar".equalsIgnoreCase(suffix)) {
|
||||||
fileTree = zipReader.unRar(filePath, fileName);
|
fileTree = zipReader.unRar(filePath, fileName);
|
||||||
|
} else if ("7z".equalsIgnoreCase(suffix)) {
|
||||||
|
fileTree = zipReader.read7zFile(filePath, fileName);
|
||||||
}
|
}
|
||||||
if (fileTree != null && !"null".equals(fileTree)) {
|
if (fileTree != null && !"null".equals(fileTree)) {
|
||||||
fileUtils.addConvertedFile(fileName, fileTree);
|
fileUtils.addConvertedFile(fileName, fileTree);
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package cn.keking.service.impl;
|
package cn.keking.service.impl;
|
||||||
|
|
||||||
|
import cn.keking.model.FileAttribute;
|
||||||
import cn.keking.service.FilePreview;
|
import cn.keking.service.FilePreview;
|
||||||
import cn.keking.utils.FileUtils;
|
import cn.keking.utils.FileUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -20,6 +21,11 @@ public class MediaFilePreviewImpl implements FilePreview {
|
|||||||
@Override
|
@Override
|
||||||
public String filePreviewHandle(String url, Model model) {
|
public String filePreviewHandle(String url, Model model) {
|
||||||
model.addAttribute("mediaUrl", url);
|
model.addAttribute("mediaUrl", url);
|
||||||
|
FileAttribute fileAttribute=fileUtils.getFileAttribute(url);
|
||||||
|
String suffix=fileAttribute.getSuffix();
|
||||||
|
if ("flv".equalsIgnoreCase(suffix)) {
|
||||||
|
return "flv";
|
||||||
|
}
|
||||||
return "media";
|
return "media";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,8 @@ import com.github.junrar.exception.RarException;
|
|||||||
import com.github.junrar.rarfile.FileHeader;
|
import com.github.junrar.rarfile.FileHeader;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
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;
|
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
|
||||||
import org.apache.commons.compress.archivers.zip.ZipFile;
|
import org.apache.commons.compress.archivers.zip.ZipFile;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -160,6 +162,71 @@ public class ZipReader {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解压7z文件
|
||||||
|
* @param filePath
|
||||||
|
* @param fileKey
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String read7zFile(String filePath,String fileKey) {
|
||||||
|
String archiveSeparator = "/";
|
||||||
|
Map<String, FileNode> appender = Maps.newHashMap();
|
||||||
|
List imgUrls=Lists.newArrayList();
|
||||||
|
String baseUrl= (String) RequestContextHolder.currentRequestAttributes().getAttribute("baseUrl",0);
|
||||||
|
String archiveFileName = fileUtils.getFileNameFromPath(filePath);
|
||||||
|
try {
|
||||||
|
SevenZFile zipFile = new SevenZFile(new File(filePath));
|
||||||
|
Iterable<SevenZArchiveEntry> entries = zipFile.getEntries();
|
||||||
|
// 排序
|
||||||
|
Enumeration<SevenZArchiveEntry> newEntries = sortSevenZEntries(entries);
|
||||||
|
List<Map<String, SevenZArchiveEntry>> entriesToBeExtracted = Lists.newArrayList();
|
||||||
|
while (newEntries.hasMoreElements()){
|
||||||
|
SevenZArchiveEntry entry = newEntries.nextElement();
|
||||||
|
String fullName = entry.getName();
|
||||||
|
int level = fullName.split(archiveSeparator).length;
|
||||||
|
// 展示名
|
||||||
|
String originName = getLastFileName(fullName, archiveSeparator);
|
||||||
|
String childName = level + "_" + originName;
|
||||||
|
boolean directory = entry.isDirectory();
|
||||||
|
if (!directory) {
|
||||||
|
childName = archiveFileName + "_" + originName;
|
||||||
|
entriesToBeExtracted.add(Collections.singletonMap(childName, entry));
|
||||||
|
}
|
||||||
|
String parentName = getLast2FileName(fullName, archiveSeparator, archiveFileName);
|
||||||
|
parentName = (level-1) + "_" + parentName;
|
||||||
|
FileType type=fileUtils.typeFromUrl(childName);
|
||||||
|
if (type.equals(FileType.picture)){//添加图片文件到图片列表
|
||||||
|
imgUrls.add(baseUrl+childName);
|
||||||
|
}
|
||||||
|
FileNode node = new FileNode(originName, childName, parentName, new ArrayList<>(), directory,fileKey);
|
||||||
|
addNodes(appender, parentName, node);
|
||||||
|
appender.put(childName, node);
|
||||||
|
}
|
||||||
|
// 开启新的线程处理文件解压
|
||||||
|
executors.submit(new SevenZExtractorWorker(entriesToBeExtracted, filePath));
|
||||||
|
fileUtils.setRedisImgUrls(fileKey,imgUrls);
|
||||||
|
return new ObjectMapper().writeValueAsString(appender.get(""));
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序7ZEntries(对原来列表倒序)
|
||||||
|
* @param entries
|
||||||
|
*/
|
||||||
|
private Enumeration<SevenZArchiveEntry> sortSevenZEntries(Iterable<SevenZArchiveEntry> entries) {
|
||||||
|
List<SevenZArchiveEntry> sortedEntries = Lists.newArrayList();
|
||||||
|
Iterator<SevenZArchiveEntry> iterator = entries.iterator();
|
||||||
|
while(iterator.hasNext()){
|
||||||
|
sortedEntries.add(iterator.next());
|
||||||
|
}
|
||||||
|
// Collections.sort(sortedEntries, Comparator.comparingInt(o -> o.getName().length()));
|
||||||
|
return Collections.enumeration(sortedEntries);
|
||||||
|
}
|
||||||
|
|
||||||
private void addNodes(Map<String, FileNode> appender, String parentName, FileNode node) {
|
private void addNodes(Map<String, FileNode> appender, String parentName, FileNode node) {
|
||||||
if (appender.containsKey(parentName)) {
|
if (appender.containsKey(parentName)) {
|
||||||
appender.get(parentName).getChildList().add(node);
|
appender.get(parentName).getChildList().add(node);
|
||||||
@ -402,6 +469,60 @@ public class ZipReader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 7z文件抽取线程
|
||||||
|
*/
|
||||||
|
class SevenZExtractorWorker implements Runnable {
|
||||||
|
|
||||||
|
private List<Map<String, SevenZArchiveEntry>> entriesToBeExtracted;
|
||||||
|
private String filePath;
|
||||||
|
|
||||||
|
public SevenZExtractorWorker(List<Map<String, SevenZArchiveEntry>> entriesToBeExtracted, String filePath) {
|
||||||
|
this.entriesToBeExtracted = entriesToBeExtracted;
|
||||||
|
this.filePath = filePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
System.out.println("解析压缩文件开始《《《《《《《《《《《《《《《《《《《《《《《");
|
||||||
|
try {
|
||||||
|
SevenZFile sevenZFile = new SevenZFile(new File(filePath));
|
||||||
|
SevenZArchiveEntry entry = sevenZFile.getNextEntry();
|
||||||
|
while (entry != null) {
|
||||||
|
if (entry.isDirectory()) {
|
||||||
|
entry = sevenZFile.getNextEntry();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String childName = "default_file";
|
||||||
|
SevenZArchiveEntry entry1 = null;
|
||||||
|
for (Map<String, SevenZArchiveEntry> entryMap : entriesToBeExtracted) {
|
||||||
|
childName = entryMap.keySet().iterator().next();
|
||||||
|
entry1 = entryMap.values().iterator().next();
|
||||||
|
if (entry.getName().equals(entry1.getName())) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FileOutputStream out = new FileOutputStream(fileDir + childName);
|
||||||
|
byte[] content = new byte[(int) entry.getSize()];
|
||||||
|
sevenZFile.read(content, 0, content.length);
|
||||||
|
out.write(content);
|
||||||
|
out.close();
|
||||||
|
entry = sevenZFile.getNextEntry();
|
||||||
|
}
|
||||||
|
sevenZFile.close();
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (new File(filePath).exists()) {
|
||||||
|
new File(filePath).delete();
|
||||||
|
}
|
||||||
|
System.out.println("解析压缩文件结束《《《《《《《《《《《《《《《《《《《《《《《");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Rar文件抽取
|
* Rar文件抽取
|
||||||
*/
|
*/
|
||||||
|
|||||||
7
jodconverter-web/src/main/resources/static/js/flv.min.js
vendored
Normal file
7
jodconverter-web/src/main/resources/static/js/flv.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
30
jodconverter-web/src/main/resources/web/flv.ftl
Normal file
30
jodconverter-web/src/main/resources/web/flv.ftl
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>多媒体文件预览</title>
|
||||||
|
</head>
|
||||||
|
<style>
|
||||||
|
body{background-color: #262626}
|
||||||
|
.m{ margin-left: auto; margin-right: auto; width:1024px; margin-top: 100px; }
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<div class="m">
|
||||||
|
<video width="1024" id="videoElement"></video>
|
||||||
|
</div>
|
||||||
|
<script src="js/flv.min.js"></script>
|
||||||
|
<script>
|
||||||
|
if (flvjs.isSupported()) {
|
||||||
|
var videoElement = document.getElementById('videoElement');
|
||||||
|
var flvPlayer = flvjs.createPlayer({
|
||||||
|
type: 'flv',
|
||||||
|
url: '${mediaUrl}'
|
||||||
|
});
|
||||||
|
flvPlayer.attachMediaElement(videoElement);
|
||||||
|
flvPlayer.load();
|
||||||
|
flvPlayer.play();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user