kkFiewView代码分析(八)
发布日期:2022-03-08 21:50:39 浏览次数:1 分类:技术文章

本文共 7244 字,大约阅读时间需要 24 分钟。

2021SC@SDUSC

阅读kkFiewView的版本迭代,发现除了单纯的获取文件之外有一些有趣的更新,对比之前v.3版本发现除了有关文件转换的修改之外,还有如下内容新增:

  1. 底层集成OpenOffice替换为LibreOffice,Office文件兼容性增强,预览效果提升
  2. 新增功能:首页文件上传功能可通过配置实时开启或禁用
  3. 新增支持全局水印,并支持通过参数动态改变水印内容
  4. 支持所有配置项支持从环境变量里读取,方便Docker镜像部署和集群中大规模使用
  5. 支持配置限信任站点(只能预览来自信任点的文件源),保护预览服务不被滥用
  6. 支持配置自定义缓存清理时间(cron表达式)
  7. 全部能识别的纯文本直接预览,不用再转跳下载,如.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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:kkFiewView代码分析(九)——office插件相关
下一篇:kkFileview代码分析(十一)——文件转换相关

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年03月25日 02时51分01秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mysql 1364 hy000_mysql SQL Error: 1364, SQLState: HY000 保存错误 2019-04-21
mysqli拓展还能用mysql_最近在学习php,其中使用了MYSQLi扩展,注意是MYSQLi不是MYSQL(因PHP7已经不支持MYSQL扩展了)。... 2019-04-21
java中gui_java中GUI是什么意思?详细图解 2019-04-21
java iso 8601_如何在iOS上获得ISO 8601日期? 2019-04-21
windows8怎么下载python_win8怎么安装python 2019-04-21
linux猜数字程序,用linux实现猜数字小游戏源码 2019-04-21
linux下堆栈溢出实例,堆栈溢出在Linux上沉默? 2019-04-21
python创建nc文件_工具箱第2期 用python玩转NC 2019-04-21
拆分文件_文件拆分与合并 2019-04-21
开发优势_小程序开发优势好处有哪些 2019-04-21
4光影补丁_我的世界seus光影包 2019-04-21
aria手机下载_Aria2App 2019-04-21
汇编指令msr_ARM汇编:MRS和MSR指令 2019-04-21
慕课python第五周测试答案_中国大学MOOC(慕课)_python+_满分章节测试答案 2019-04-21
lsof查看占用高_lsof解决磁盘占用过高,查询却无大文件处理一例! 2019-04-21
python调用oracle过程 权限不足_oracle-存储过程提示 ORA-01031: 权限不足 2019-04-21
java ee6教程_Java EE 极简教程(六):框架的选择 2019-04-21
java io流过滤流_IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流 2019-04-21
java预处理指令_Java程序员学C++_1_C++中的预处理命令 | 学步园 2019-04-21
java分词支持拼音_java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍... 2019-04-21