kkFileView4.0.0向下兼容修改实现统一对外服务

简介: kkFileView 的一个使用场景优化

前言

公司存在多个项目需要使用 kk 的预览服务,但是使用的版本并不一致。部分项目因为上线时间较早,所以使用的是旧版的 kk,比如 2.x。kk 本身也在迭代,所以造成了旧项目在接入新版 kk 服务的时候产生了不兼容的现象。

问题原因

部分项目使用的 2.x 版本 kk 是使用的未 base64 编码的 url,而新版 4.0.0 的则是需要传入编码过的 url 才可以支持预览。新版的 kk 在很早前因为需要彻底解决各种奇葩文件名预览问题,所以 url 采用了 base64+urlencode 双编码。
旧项目当中在接入预览服务时需要传入明文地址,这样就导致预览服务无法使用了。

解决方案

可选的处理办法有两种。

额外传参

一个是增加一个参数告诉预览服务是使用的明文地址,预览服务需要根据额外的参数做兼容处理,初始版本是使用的这种办法,保证服务可用。

这种方法的缺点就是预览服务和使用方需要同时修改代码,但是使用方的修改量较小。

不额外传参

利用 url 本身的内容是否是经过 base64 编码的来区分处理。

好处就是不需要接入方做任何额外的改动,用户感觉不到变化。

修改方法

修改的关键就是判断字符串是否是经过 base64 加密的:将字符串解密后再将解密字符串加密回去与原来的值做比较,如果相同就是 base64。网上存在较多文章但是并不适用,所以这里结合 kk 的实际情况需要修改判断方法。

  1. 修改工具类文件 server/src/main/java/cn/keking/utils/WebUtils.java ,在后面追加判断 url 是否 base64 编码的方法。

/**
 * url是否base64编码
 *
 * @param str str
 * @return boolean
 */
public static boolean isBase64(String str) {
    // 将字符串解密后再将解密字符串加密回去与原来的值做比较 如果相同就是base64
    try {
        String decodeStr = new String(Base64Utils.decodeFromString(str), StandardCharsets.UTF_8);
        return str.equals(Base64Utils.encodeToString(decodeStr.getBytes(StandardCharsets.UTF_8)));
    } catch (Exception e) {
        return false;
    }
}
  1. 修改过滤器 server/src/main/java/cn/keking/web/filter/TrustHostFilter.java,追加对 url 参数的判断。

doFilter 方法中处理:


if (WebUtils.isBase64(url)) {
    url = new String(Base64Utils.decodeFromString(url), StandardCharsets.UTF_8);
}
  1. 修改主程序 server/src/main/java/cn/keking/web/controller/OnlinePreviewController.java ,在
    onlinePreview 方法中追加判断。

if (WebUtils.isBase64(url)){
    fileUrl = new String(Base64.decodeBase64(url), StandardCharsets.UTF_8);
} else {
    fileUrl = url;
}

然后重新编译项目就可以使用了。

总结

本次修改是为了向下兼容非 base64 编码的文件地址,所以是服务降级,有可能出现奇葩文件名预览问题。因为需要统一服务的原因所以才会产生这个临时修改方案,总体还是建议在合适时间适配到新版的 kk 服务,保证用户体验。

参考资料

相关文章
|
3月前
|
人工智能 Java Scala
Springboot捕获feign抛出的异常
本文探讨了在使用Springboot与Feign客户端时,如何有效捕获接口异常的问题。由于全局异常无法直接捕获Feign抛出的异常,文章提供了具体解决方案:通过定义自定义异常类`BusinessException`,结合`ErrorDecoder`对Feign请求异常进行处理,或在全局异常捕获中添加特定处理器。示例代码详细展示了配置与实现步骤,帮助开发者更好地应对Feign客户端的异常处理需求。
223 2
|
Rust Ubuntu Java
用PyPy加速Python程序
我们可以用更好的Python运行环境或运行时优化来提升Python的速度,其中最成熟、使用最简单的当属PyPy。用PyPy,可以在不改变源代码的情况下,获得平均3-4倍的性能提升。本文将带大家学习如何用PyPy加速Python程序。
939 0
用PyPy加速Python程序
|
JavaScript 前端开发 IDE
程序员必知:WPSJSA宏编程(JS):1.初识
程序员必知:WPSJSA宏编程(JS):1.初识
1353 0
|
存储 编译器 C语言
C陷阱:数组越界遍历,不报错却出现死循环?从内存解析角度看数组与局部变量之“爱恨纠葛”
在代码练习中,通常会避免数组越界访问,但如果运行了这样的代码,可能会导致未定义行为,例如死循环。当循环遍历数组时,如果下标超出数组长度,程序可能会持续停留在循环体内。这种情况的发生与数组和局部变量(如循环变量)在内存中的布局有关。在某些编译器和环境下,数组和局部变量可能在栈上相邻存储,数组越界访问可能会修改到循环变量的值,导致循环条件始终满足,从而形成死循环。理解这种情况有助于我们更好地理解和预防这类编程错误。
415 0
|
Java Maven
The JAVA_HOME environment variable is not defined correctly 解决方法
解决措施:去设置里把JAVA8卸载掉,注意右击卸载,不要直接删根目录,然后把环境变量JAVA8_HOME也删掉,JAVA8 再见
1049 0
The JAVA_HOME environment variable is not defined correctly 解决方法
|
前端开发 Java Maven
Java代码生成二维码
Java代码生成二维码
308 0
|
Linux
kkfileview Word文件预览乱码异常问题
kkfileview Word文件预览乱码异常问题
1422 0
|
Java Linux Apache
win环境-maven的安装以及配置(idea中的配置,setting文件修改,环境变量配置)
win环境-maven的安装以及配置(idea中的配置,setting文件修改,环境变量配置)
527 2
|
关系型数据库 MySQL
mysql日期和字符串相互转换方法
mysql日期和字符串相互转换方法
解决 idea中SVN一直 looking for xxx working copy root 或者performing vcs refresh
解决 idea中SVN一直 looking for xxx working copy root 或者performing vcs refresh
623 0

热门文章

最新文章