官方文档显示3.0.0版本支持使用id方式获取文件( http/https下载流url预览)
4.1.0 版本报错当url=http://ip:port/file/id?fullfilename=test.txt
时
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -34
file_view | at java.lang.String.substring(String.java:1967) ~[na:1.8.0_251]
file_view | at cn.keking.utils.WebUtils.encodeUrlFileName(WebUtils.java:123) ~[classes!/:na]
file_view | at cn.keking.service.FileHandlerService.getFileAttribute(FileHandlerService.java:279) ~[classes!/:na]
file_view | at cn.keking.web.controller.OnlinePreviewController.onlinePreview(OnlinePreviewController.java:71) ~[classes!/:na]
file_view | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_251]
file_view | at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_251]
file_view | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_251]
file_view | at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_251]
file_view | at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.3.jar!/:5.3.3]
file_view | at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.3.jar!/:5.3.3]
file_view | at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.3.jar!/:5.3.3]
file_view | at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.3.jar!/:5.3.3]
file_view | at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.3.jar!/:5.3.3]
file_view | at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.3.jar!/:5.3.3]
file_view | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.3.jar!/:5.3.3]
file_view | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.3.jar!/:5.3.3]
file_view | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.3.jar!/:5.3.3]
file_view | ... 63 common frames omitted
源码中 cn.keking.utils.WebUtils.encodeUrlFileName(WebUtils.java:123) 处对url中的文件名进行utf8编码后返回,但是上述模式中url中没有文件名,文件名再fullfilename中 麻烦给出回答!!!!
encodeUrlFileName这个方法逻辑有问题
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
很明显是数组越界了
我也发现这个问题了,你解决了吗
自己把源码下载下来,把处理文件的那块逻辑重写一下,重新打镜像,就好了。 自己动手,丰衣足食。
最新代码已经修复了,参考编译文档可自行打docker包: https://kkfileview.keking.cn/zh-cn/docs/build.html
你好,我感觉你这个修改方式有一些局限性,假如我的url为 http://127.0.0.1:8888/filelook?filepath=/test/测试.doc& fullfilename=测试.doc,这样的话url就会出现问题未编码前面的中文,建议使用pr第36条这种方式
Matcher matcher = pattern.matcher(url);
while (matcher.find()) {
int b = matcher.start();
int e = matcher.end();
url = url.substring(0, b) + URLEncoder.encode(url.substring(b, e), "utf-8") + url.substring(e);
matcher = pattern.matcher(url);
}
return url;
有时间的话同步更新一下docker镜像吧,刚好这块遇到相同的问题排查了一阵,暂时先拉代码本地打包吧
其实我很早之前就自己修复打包了 今天才看到有这么多回复 shjh/kkfile 这是我打包的
登录 后才可以发表评论