本文共 7244 字,大约阅读时间需要 24 分钟。
2021SC@SDUSC
阅读kkFiewView的版本迭代,发现除了单纯的获取文件之外有一些有趣的更新,对比之前v.3版本发现除了有关文件转换的修改之外,还有如下内容新增:
- 底层集成OpenOffice替换为LibreOffice,Office文件兼容性增强,预览效果提升
- 新增功能:首页文件上传功能可通过配置实时开启或禁用
- 新增支持全局水印,并支持通过参数动态改变水印内容
- 支持所有配置项支持从环境变量里读取,方便Docker镜像部署和集群中大规模使用
- 支持配置限信任站点(只能预览来自信任点的文件源),保护预览服务不被滥用
- 支持配置自定义缓存清理时间(cron表达式)
- 全部能识别的纯文本直接预览,不用再转跳下载,如.md .java .py等
这些功能虽说与系统的核心功能无太多直接关系,但是kkFiewView是一个面向用户的软件,用户的体验也是开发环节中值得考虑的一环,这些功能的实现大多放在config文件夹下,接下来针对这些新增功能分享一些我的观点。
目录
支持配置自定义缓存清理时间(cron表达式)
这个功能的实现可以释放很多被占用后没有及时回收的空间,避免造成资源浪费。这个是我们现在很多人做开发时候没有想到的,能及时回收空间可以让这个项目更友好,是我们需要学习的地方。
@ConditionalOnExpression("'${cache.clean.enabled:false}'.equals('true')")public class ShedulerClean { private final Logger logger = LoggerFactory.getLogger(ShedulerClean.class); private final CacheService cacheService; public ShedulerClean(CacheService cacheService) { this.cacheService = cacheService; } private final String fileDir = ConfigConstants.getFileDir(); //默认每晚3点执行一次 @Scheduled(cron = "${cache.clean.cron:0 0 3 * * ?}") public void clean() { logger.info("Cache clean start"); cacheService.cleanCache(); DeleteFileUtil.deleteDirectory(fileDir); logger.info("Cache clean end"); }}
通过 @Scheduled(cron = "${cache.clean.cron:0 0 3 * * ?}")实现在每晚3点执行缓存清理,用户可以在这里根据需求自定义时间。
新增支持全局水印,并支持通过参数动态改变水印内容
有一些公司或个人的文件可能涉及隐私信息,所以加上水印可以在一定程度上保护用户信息安全。水印的设置在config下的WatermarkConfigConstants中,类中变量包含:水印文本、水印的相对位置、字体、大小、颜色、宽度、高度、角度。
作者已经提取为这些除了水印内容之外的变量设计了默认设置,减少用户添加水印的操作步骤,用户使用可以更便捷。
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; }
用户想要添加水印时,开发人员会实例化一个WatermarkConfigConstants对象,通过调用这个对象的方法即可实现水印添加。具体的调用在ConfigRefreshComponent中,有一个setWatermarkConfig方法。
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); }
转载地址:https://blog.csdn.net/m0_55503427/article/details/121843546 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!