mirror of
https://gitee.com/kekingcn/file-online-preview.git
synced 2025-09-18 09:44:37 +08:00
新功能点:支持全局水印
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
package cn.keking.config;
|
||||
|
||||
import cn.keking.service.impl.OfficeFilePreviewImpl;
|
||||
import org.artofsolving.jodconverter.office.OfficeUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -70,6 +69,7 @@ public class ConfigRefreshComponent {
|
||||
ConfigConstants.setFtpControlEncoding(ftpControlEncoding);
|
||||
ConfigConstants.setBaseUrl(baseUrl);
|
||||
ConfigConstants.setTrustHost(trustHost);
|
||||
setWatermarkConfig(properties);
|
||||
bufferedReader.close();
|
||||
fileReader.close();
|
||||
Thread.sleep(1000L);
|
||||
@@ -78,5 +78,29 @@ public class ConfigRefreshComponent {
|
||||
LOGGER.error("读取配置文件异常", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void setWatermarkConfig(Properties properties) {
|
||||
String watermarkTxt = properties.getProperty("watermark.txt", WatermarkConfigConstants.DEFAULT_WATERMARK_TXT);
|
||||
String watermarkXSpace = properties.getProperty("watermark.x.space", WatermarkConfigConstants.DEFAULT_WATERMARK_X_SPACE);
|
||||
String watermarkYSpace = properties.getProperty("watermark.y.space", WatermarkConfigConstants.DEFAULT_WATERMARK_Y_SPACE);
|
||||
String watermarkFont = properties.getProperty("watermark.font", WatermarkConfigConstants.DEFAULT_WATERMARK_FONT);
|
||||
String watermarkFontsize = properties.getProperty("watermark.fontsize", WatermarkConfigConstants.DEFAULT_WATERMARK_FONTSIZE);
|
||||
String watermarkColor = properties.getProperty("watermark.color", WatermarkConfigConstants.DEFAULT_WATERMARK_COLOR);
|
||||
String watermarkAlpha = properties.getProperty("watermark.alpha", WatermarkConfigConstants.DEFAULT_WATERMARK_ALPHA);
|
||||
String watermarkWidth = properties.getProperty("watermark.width", WatermarkConfigConstants.DEFAULT_WATERMARK_WIDTH);
|
||||
String watermarkHeight = properties.getProperty("watermark.height", WatermarkConfigConstants.DEFAULT_WATERMARK_HEIGHT);
|
||||
String watermarkAngle = properties.getProperty("watermark.angle", WatermarkConfigConstants.DEFAULT_WATERMARK_ANGLE);
|
||||
WatermarkConfigConstants.setWatermarkTxtValue(watermarkTxt);
|
||||
WatermarkConfigConstants.setWatermarkXSpaceValue(watermarkXSpace);
|
||||
WatermarkConfigConstants.setWatermarkYSpaceValue(watermarkYSpace);
|
||||
WatermarkConfigConstants.setWatermarkFontValue(watermarkFont);
|
||||
WatermarkConfigConstants.setWatermarkFontsizeValue(watermarkFontsize);
|
||||
WatermarkConfigConstants.setWatermarkColorValue(watermarkColor);
|
||||
WatermarkConfigConstants.setWatermarkAlphaValue(watermarkAlpha);
|
||||
WatermarkConfigConstants.setWatermarkWidthValue(watermarkWidth);
|
||||
WatermarkConfigConstants.setWatermarkHeightValue(watermarkHeight);
|
||||
WatermarkConfigConstants.setWatermarkAngleValue(watermarkAngle);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,164 @@
|
||||
package cn.keking.config;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
|
||||
/**
|
||||
* @author chenjh
|
||||
* @since 2020/5/13 17:44
|
||||
*/
|
||||
public class WatermarkConfigConstants {
|
||||
|
||||
private static String WATERMARK_TXT;
|
||||
private static String WATERMARK_X_SPACE;
|
||||
private static String WATERMARK_Y_SPACE;
|
||||
private static String WATERMARK_FONT;
|
||||
private static String WATERMARK_FONTSIZE;
|
||||
private static String WATERMARK_COLOR;
|
||||
private static String WATERMARK_ALPHA;
|
||||
private static String WATERMARK_WIDTH;
|
||||
private static String WATERMARK_HEIGHT;
|
||||
private static String WATERMARK_ANGLE;
|
||||
|
||||
public static String DEFAULT_WATERMARK_TXT = "";
|
||||
public static String DEFAULT_WATERMARK_X_SPACE = "10";
|
||||
public static String DEFAULT_WATERMARK_Y_SPACE = "10";
|
||||
public static String DEFAULT_WATERMARK_FONT = "微软雅黑";
|
||||
public static String DEFAULT_WATERMARK_FONTSIZE = "18px";
|
||||
public static String DEFAULT_WATERMARK_COLOR = "black";
|
||||
public static String DEFAULT_WATERMARK_ALPHA = "0.2";
|
||||
public static String DEFAULT_WATERMARK_WIDTH = "240";
|
||||
public static String DEFAULT_WATERMARK_HEIGHT = "80";
|
||||
public static String DEFAULT_WATERMARK_ANGLE = "10";
|
||||
|
||||
public static String getWatermarkTxt() {
|
||||
return WATERMARK_TXT;
|
||||
}
|
||||
|
||||
public static void setWatermarkTxtValue(String watermarkTxt) {
|
||||
WATERMARK_TXT = watermarkTxt;
|
||||
}
|
||||
|
||||
@Value("${watermark.txt:}")
|
||||
public void setWatermarkTxt(String watermarkTxt) {
|
||||
setWatermarkTxtValue(watermarkTxt);
|
||||
}
|
||||
|
||||
public static String getWatermarkXSpace() {
|
||||
return WATERMARK_X_SPACE;
|
||||
}
|
||||
|
||||
public static void setWatermarkXSpaceValue(String watermarkXSpace) {
|
||||
WATERMARK_X_SPACE = watermarkXSpace;
|
||||
}
|
||||
|
||||
@Value("${watermark.x.space:10}")
|
||||
public void setWatermarkXSpace(String watermarkXSpace) {
|
||||
setWatermarkXSpaceValue(watermarkXSpace);
|
||||
}
|
||||
|
||||
public static String getWatermarkYSpace() {
|
||||
return WATERMARK_Y_SPACE;
|
||||
}
|
||||
|
||||
public static void setWatermarkYSpaceValue(String watermarkYSpace) {
|
||||
WATERMARK_Y_SPACE = watermarkYSpace;
|
||||
}
|
||||
|
||||
@Value("${watermark.y.space:10}")
|
||||
public void setWatermarkYSpace(String watermarkYSpace) {
|
||||
setWatermarkYSpaceValue(watermarkYSpace);
|
||||
}
|
||||
|
||||
public static String getWatermarkFont() {
|
||||
return WATERMARK_FONT;
|
||||
}
|
||||
|
||||
public static void setWatermarkFontValue(String watermarkFont) {
|
||||
WATERMARK_FONT = watermarkFont;
|
||||
}
|
||||
|
||||
@Value("${watermark.font:微软雅黑}")
|
||||
public void setWatermarkFont(String watermarkFont) {
|
||||
setWatermarkFontValue(watermarkFont);
|
||||
}
|
||||
|
||||
public static String getWatermarkFontsize() {
|
||||
return WATERMARK_FONTSIZE;
|
||||
}
|
||||
|
||||
public static void setWatermarkFontsizeValue(String watermarkFontsize) {
|
||||
WATERMARK_FONTSIZE = watermarkFontsize;
|
||||
}
|
||||
|
||||
@Value("${watermark.fontsize:18px}")
|
||||
public void setWatermarkFontsize(String watermarkFontsize) {
|
||||
setWatermarkFontsizeValue(watermarkFontsize);
|
||||
}
|
||||
|
||||
public static String getWatermarkColor() {
|
||||
return WATERMARK_COLOR;
|
||||
}
|
||||
|
||||
public static void setWatermarkColorValue(String watermarkColor) {
|
||||
WATERMARK_COLOR = watermarkColor;
|
||||
}
|
||||
|
||||
@Value("${watermark.color:black}")
|
||||
public void setWatermarkColor(String watermarkColor) {
|
||||
setWatermarkColorValue(watermarkColor);
|
||||
}
|
||||
|
||||
public static String getWatermarkAlpha() {
|
||||
return WATERMARK_ALPHA;
|
||||
}
|
||||
|
||||
public static void setWatermarkAlphaValue(String watermarkAlpha) {
|
||||
WATERMARK_ALPHA = watermarkAlpha;
|
||||
}
|
||||
|
||||
@Value("${watermark.alpha:0.2}")
|
||||
public void setWatermarkAlpha(String watermarkAlpha) {
|
||||
setWatermarkAlphaValue(watermarkAlpha);
|
||||
}
|
||||
|
||||
public static String getWatermarkWidth() {
|
||||
return WATERMARK_WIDTH;
|
||||
}
|
||||
|
||||
public static void setWatermarkWidthValue(String watermarkWidth) {
|
||||
WATERMARK_WIDTH = watermarkWidth;
|
||||
}
|
||||
|
||||
@Value("${watermark.width:240}")
|
||||
public void setWatermarkWidth(String watermarkWidth) {
|
||||
WATERMARK_WIDTH = watermarkWidth;
|
||||
}
|
||||
|
||||
public static String getWatermarkHeight() {
|
||||
return WATERMARK_HEIGHT;
|
||||
}
|
||||
|
||||
public static void setWatermarkHeightValue(String watermarkHeight) {
|
||||
WATERMARK_HEIGHT = watermarkHeight;
|
||||
}
|
||||
|
||||
@Value("${watermark.height:80}")
|
||||
public void setWatermarkHeight(String watermarkHeight) {
|
||||
WATERMARK_HEIGHT = watermarkHeight;
|
||||
}
|
||||
|
||||
public static String getWatermarkAngle() {
|
||||
return WATERMARK_ANGLE;
|
||||
}
|
||||
|
||||
public static void setWatermarkAngleValue(String watermarkAngle) {
|
||||
WATERMARK_ANGLE = watermarkAngle;
|
||||
}
|
||||
|
||||
@Value("${watermark.angle:10}")
|
||||
public void setWatermarkAngle(String watermarkAngle) {
|
||||
WATERMARK_ANGLE = watermarkAngle;
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -8,7 +8,7 @@ import cn.keking.utils.CadToPdf;
|
||||
import cn.keking.utils.DownloadUtils;
|
||||
import cn.keking.utils.FileUtils;
|
||||
import cn.keking.utils.PdfUtils;
|
||||
import cn.keking.web.filter.ChinesePathFilter;
|
||||
import cn.keking.web.filter.BaseUrlFilter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.ui.Model;
|
||||
@@ -45,7 +45,7 @@ public class CadFilePreviewImpl implements FilePreview {
|
||||
public String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) {
|
||||
// 预览Type,参数传了就取参数的,没传取系统默认
|
||||
String officePreviewType = model.asMap().get("officePreviewType") == null ? ConfigConstants.getOfficePreviewType() : model.asMap().get("officePreviewType").toString();
|
||||
String baseUrl = ChinesePathFilter.getBaseUrl();
|
||||
String baseUrl = BaseUrlFilter.getBaseUrl();
|
||||
String suffix=fileAttribute.getSuffix();
|
||||
String fileName=fileAttribute.getName();
|
||||
String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + "pdf";
|
||||
|
@@ -8,7 +8,7 @@ import cn.keking.utils.DownloadUtils;
|
||||
import cn.keking.utils.FileUtils;
|
||||
import cn.keking.utils.OfficeToPdf;
|
||||
import cn.keking.utils.PdfUtils;
|
||||
import cn.keking.web.filter.ChinesePathFilter;
|
||||
import cn.keking.web.filter.BaseUrlFilter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.ui.Model;
|
||||
@@ -45,7 +45,7 @@ public class OfficeFilePreviewImpl implements FilePreview {
|
||||
public String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) {
|
||||
// 预览Type,参数传了就取参数的,没传取系统默认
|
||||
String officePreviewType = model.asMap().get("officePreviewType") == null ? ConfigConstants.getOfficePreviewType() : model.asMap().get("officePreviewType").toString();
|
||||
String baseUrl = ChinesePathFilter.getBaseUrl();
|
||||
String baseUrl = BaseUrlFilter.getBaseUrl();
|
||||
String suffix=fileAttribute.getSuffix();
|
||||
String fileName=fileAttribute.getName();
|
||||
boolean isHtml = suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx");
|
||||
|
@@ -7,7 +7,7 @@ import cn.keking.service.FilePreview;
|
||||
import cn.keking.utils.DownloadUtils;
|
||||
import cn.keking.utils.FileUtils;
|
||||
import cn.keking.utils.PdfUtils;
|
||||
import cn.keking.web.filter.ChinesePathFilter;
|
||||
import cn.keking.web.filter.BaseUrlFilter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.ui.Model;
|
||||
@@ -38,7 +38,7 @@ public class PdfFilePreviewImpl implements FilePreview{
|
||||
String suffix=fileAttribute.getSuffix();
|
||||
String fileName=fileAttribute.getName();
|
||||
String officePreviewType = model.asMap().get("officePreviewType") == null ? ConfigConstants.getOfficePreviewType() : model.asMap().get("officePreviewType").toString();
|
||||
String baseUrl = ChinesePathFilter.getBaseUrl();
|
||||
String baseUrl = BaseUrlFilter.getBaseUrl();
|
||||
model.addAttribute("pdfUrl", url);
|
||||
String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + "pdf";
|
||||
String outFilePath = fileDir + pdfName;
|
||||
|
@@ -48,7 +48,7 @@ public class SimTextFilePreviewImpl implements FilePreview{
|
||||
model.addAttribute("fileType",fileAttribute.getSuffix());
|
||||
return "fileNotSupported";
|
||||
}
|
||||
model.addAttribute("ordinaryUrl", response.getMsg() + ".txt");
|
||||
model.addAttribute("ordinaryUrl", response.getMsg());
|
||||
return "txt";
|
||||
}
|
||||
|
||||
|
@@ -251,7 +251,7 @@ public class FileUtils {
|
||||
// 添加sheet控制头
|
||||
sb.append("<script src=\"js/jquery-3.0.0.min.js\" type=\"text/javascript\"></script>");
|
||||
sb.append("<script src=\"js/excel.header.js\" type=\"text/javascript\"></script>");
|
||||
sb.append("<link rel=\"stylesheet\" href=\"css/bootstrap/bootstrap.min.css\">");
|
||||
sb.append("<link rel=\"stylesheet\" href=\"bootstrap/css/bootstrap.min.css\">");
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
|
@@ -2,7 +2,8 @@ package cn.keking.utils;
|
||||
|
||||
import cn.keking.config.ConfigConstants;
|
||||
import cn.keking.model.FileType;
|
||||
import cn.keking.web.filter.ChinesePathFilter;
|
||||
import cn.keking.web.filter.BaseUrlFilter;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.github.junrar.Archive;
|
||||
@@ -62,7 +63,7 @@ public class ZipReader {
|
||||
String archiveSeparator = "/";
|
||||
Map<String, FileNode> appender = Maps.newHashMap();
|
||||
List imgUrls=Lists.newArrayList();
|
||||
String baseUrl = ChinesePathFilter.getBaseUrl();
|
||||
String baseUrl = BaseUrlFilter.getBaseUrl();
|
||||
String archiveFileName = fileUtils.getFileNameFromPath(filePath);
|
||||
try {
|
||||
ZipFile zipFile = new ZipFile(filePath, fileUtils.getFileEncodeUTFGBK(filePath));
|
||||
@@ -120,7 +121,7 @@ public class ZipReader {
|
||||
public String unRar(String filePath,String fileKey){
|
||||
Map<String, FileNode> appender = Maps.newHashMap();
|
||||
List imgUrls=Lists.newArrayList();
|
||||
String baseUrl = ChinesePathFilter.getBaseUrl();
|
||||
String baseUrl = BaseUrlFilter.getBaseUrl();
|
||||
try {
|
||||
Archive archive = new Archive(new FileInputStream(new File(filePath)));
|
||||
List<FileHeader> headers = archive.getFileHeaders();
|
||||
@@ -172,7 +173,7 @@ public class ZipReader {
|
||||
String archiveSeparator = "/";
|
||||
Map<String, FileNode> appender = Maps.newHashMap();
|
||||
List imgUrls=Lists.newArrayList();
|
||||
String baseUrl= ChinesePathFilter.getBaseUrl();
|
||||
String baseUrl= BaseUrlFilter.getBaseUrl();
|
||||
String archiveFileName = fileUtils.getFileNameFromPath(filePath);
|
||||
try {
|
||||
SevenZFile zipFile = new SevenZFile(new File(filePath));
|
||||
|
@@ -0,0 +1,58 @@
|
||||
package cn.keking.web.filter;
|
||||
|
||||
import cn.keking.config.ConfigConstants;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author chenjh
|
||||
* @since 2020/5/13 18:27
|
||||
*/
|
||||
public class BaseUrlFilter implements Filter {
|
||||
|
||||
private static String BASE_URL;
|
||||
|
||||
public static String getBaseUrl() {
|
||||
String baseUrl;
|
||||
try {
|
||||
baseUrl = (String) RequestContextHolder.currentRequestAttributes().getAttribute("baseUrl",0);
|
||||
} catch (Exception e) {
|
||||
baseUrl = BASE_URL;
|
||||
}
|
||||
return baseUrl;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void init(FilterConfig filterConfig) throws ServletException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
|
||||
String baseUrl;
|
||||
StringBuilder pathBuilder = new StringBuilder();
|
||||
pathBuilder.append(request.getScheme()).append("://").append(request.getServerName()).append(":")
|
||||
.append(request.getServerPort()).append(((HttpServletRequest) request).getContextPath()).append("/");
|
||||
String baseUrlTmp = ConfigConstants.getBaseUrl();
|
||||
if (baseUrlTmp != null && !ConfigConstants.DEFAULT_BASE_URL.equals(baseUrlTmp.toLowerCase())) {
|
||||
if (!baseUrlTmp.endsWith("/")) {
|
||||
baseUrlTmp = baseUrlTmp.concat("/");
|
||||
}
|
||||
baseUrl = baseUrlTmp;
|
||||
} else {
|
||||
baseUrl = pathBuilder.toString();
|
||||
}
|
||||
BASE_URL = baseUrl;
|
||||
request.setAttribute("baseUrl", baseUrl);
|
||||
filterChain.doFilter(request, response);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
|
||||
}
|
||||
}
|
@@ -38,4 +38,29 @@ public class FilterConfiguration {
|
||||
registrationBean.setUrlPatterns(filterUri);
|
||||
return registrationBean;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public FilterRegistrationBean getBaseUrlFilter() {
|
||||
Set<String> filterUri = new HashSet<>();
|
||||
filterUri.add("/index");
|
||||
filterUri.add("/onlinePreview");
|
||||
filterUri.add("/picturesPreview");
|
||||
BaseUrlFilter filter = new BaseUrlFilter();
|
||||
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
|
||||
registrationBean.setFilter(filter);
|
||||
registrationBean.setUrlPatterns(filterUri);
|
||||
return registrationBean;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public FilterRegistrationBean getWatermarkConfigFilter() {
|
||||
Set<String> filterUri = new HashSet<>();
|
||||
filterUri.add("/onlinePreview");
|
||||
filterUri.add("/picturesPreview");
|
||||
WatermarkConfigFilter filter = new WatermarkConfigFilter();
|
||||
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
|
||||
registrationBean.setFilter(filter);
|
||||
registrationBean.setUrlPatterns(filterUri);
|
||||
return registrationBean;
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,39 @@
|
||||
package cn.keking.web.filter;
|
||||
|
||||
import cn.keking.config.WatermarkConfigConstants;
|
||||
|
||||
import javax.servlet.*;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author chenjh
|
||||
* @since 2020/5/13 18:34
|
||||
*/
|
||||
public class WatermarkConfigFilter implements Filter {
|
||||
|
||||
@Override
|
||||
public void init(FilterConfig filterConfig) throws ServletException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
|
||||
String watermarkTxt = request.getParameter("watermarkTxt");
|
||||
request.setAttribute("watermarkTxt", watermarkTxt != null ? watermarkTxt : WatermarkConfigConstants.getWatermarkTxt());
|
||||
request.setAttribute("watermarkXSpace", WatermarkConfigConstants.getWatermarkXSpace());
|
||||
request.setAttribute("watermarkYSpace", WatermarkConfigConstants.getWatermarkYSpace());
|
||||
request.setAttribute("watermarkFont", WatermarkConfigConstants.getWatermarkFont());
|
||||
request.setAttribute("watermarkFontsize", WatermarkConfigConstants.getWatermarkFontsize());
|
||||
request.setAttribute("watermarkColor", WatermarkConfigConstants.getWatermarkColor());
|
||||
request.setAttribute("watermarkAlpha", WatermarkConfigConstants.getWatermarkAlpha());
|
||||
request.setAttribute("watermarkWidth", WatermarkConfigConstants.getWatermarkWidth());
|
||||
request.setAttribute("watermarkHeight", WatermarkConfigConstants.getWatermarkHeight());
|
||||
request.setAttribute("watermarkAngle", WatermarkConfigConstants.getWatermarkAngle());
|
||||
filterChain.doFilter(request, response);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user