kkFiewView代码分析(八)

2021SC@SDUSC

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

  1. 底层集成OpenOffice替换为LibreOffice,Office文件兼容性增强,预览效果提升
  2. 新增功能:首页文件上传功能可通过配置实时开启或禁用
  3. 新增支持全局水印,并支持通过参数动态改变水印内容
  4. 支持所有配置项支持从环境变量里读取,方便Docker镜像部署和集群中大规模使用
  5. 支持配置限信任站点(只能预览来自信任点的文件源),保护预览服务不被滥用
  6. 支持配置自定义缓存清理时间(cron表达式)
  7. 全部能识别的纯文本直接预览,不用再转跳下载,如.md .java .py等

这些功能虽说与系统的核心功能无太多直接关系,但是kkFiewView是一个面向用户的软件,用户的体验也是开发环节中值得考虑的一环,这些功能的实现大多放在config文件夹下,接下来针对这些新增功能分享一些我的观点。

目录

 支持配置自定义缓存清理时间(cron表达式)

新增支持全局水印,并支持通过参数动态改变水印内容


 支持配置自定义缓存清理时间(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);

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值