2.8K Star 20.5K Fork 8.1K

GVPkeking / kkFileView

 / 详情

Bug String.substring() 4.0.0 不支持http下载流了?

已完成
创建于  
2022-03-02 18:17

官方文档显示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中 麻烦给出回答!!!!

评论 (9)

施嘉宏 创建了任务
施嘉宏 修改了描述
施嘉宏 修改了描述
展开全部操作日志

encodeUrlFileName这个方法逻辑有问题

很明显是数组越界了

我也发现这个问题了,你解决了吗

自己把源码下载下来,把处理文件的那块逻辑重写一下,重新打镜像,就好了。 :smile: 自己动手,丰衣足食。

主要是打docker镜像这个东西麻烦,老哥有打好的docker镜像吗

最新代码已经修复了,参考编译文档可自行打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 这是我打包的

施嘉宏 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(7)
4895640 zyp0910 1621498841 528790 gitchenjh 1588580140 5510896 dalivk 1697097985 7739324 sjh838239178 1635590204
Java
1
https://gitee.com/kekingcn/file-online-preview.git
git@gitee.com:kekingcn/file-online-preview.git
kekingcn
file-online-preview
kkFileView

搜索帮助