【方案探讨】 出现java.io.IOException解决方法

这篇具有很好参考价值的文章主要介绍了【方案探讨】 出现java.io.IOException解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

解决问题的博客:探索新思路,共同成长 🌱

欢迎来到我的博客!在这里,我将分享我对问题的独特见解和解决方案。通过这篇博客,我希望能够为您带来新的思考方式,启发您寻找问题的不同角度,并探索创新的解决方案。

每个问题都是一个机会,是一个学习的过程。在这里,我将分享我对问题的思考过程和解决方案,希望能够激发您思考,激励您不断进步。

我非常期待听到您的想法、建议和反馈!请随时在评论区分享您的观点,让我们一起交流,一起学习,共同成长。

让我们开始探索问题的世界吧!一起迎接挑战,一起前行!✨

壹、出现背景

在前端上传文件之后,业务工作流程发起失败。当时定位问题①文件问题②流程出现问题。登录正式服K8S看后端报错,发现出现java.io.IOException报错。

2024-04-17 15:45:58.504 [http-nio-9091-exec-8] ERROR c.b.c.w.e.GlobalExceptionHandler - Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: java.io.EOFException: Unexpected EOF read on the socket
org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure(StandardMultipartHttpServletRequest.java:124) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:115) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init>(StandardMultipartHttpServletRequest.java:88) org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:87)
org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1178) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1012)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
.....

贰、排查方向

通过请教大佬同事和查询网上资料,三个方向①minio上传出现问题②前端单次请求后端发送文件数量太多③前端多次请求后端发送文件数据很多

叁、场景复现

1、放单个大文件

#之前的后端配置
spring.servlet.multipart.max-file-size=30MB
spring.servlet.multipart.max-request-size=35MB

出现

the request was rejected because its size (168076944) exceeds the configured maximum (36700160)

排除这个问题引发文件EOF的问题

2、修改后端请求其他服务器时间

可能是spring tomcat 请求时间超时

#Ⅰ:修改后端配置 模拟文件上传远程minio
spring.servlet.multipart.max-file-size=2048MB
spring.servlet.multipart.max-request-size=2048MB
server.connectionTimeout =180000

#Ⅱ:修改上传Minio接口
Thread.sleep(1700000);

由于前端超时设置为3分钟,所以决定后端线程睡2min50sec,再上传大文件,没问题
发现,不是后端请求minio服务器的文件上传出现问题

3、多次请求多个文件

前端请求23次uploadfile接口,没问题

4、单词请求多个文件

尝试了很多次文件排列,
最后前端更改请求超时时间为10秒,
调用一次uploadfile文件先放13个小文件(<100kb),7个中文件(≤ <10mb),3个大文件(≤ <200mb)
成功出现

2024-04-17 19:45:33.333 [http-nio-9091-exec-8] ERROR c.b.c.w.e.GlobalExceptionHandler - Failed to parse multipart servlet request; nested exception is java.io.IOException:

复现成功!

肆、解决方案

①防止流程出现其他错误,增大后端服务器接受前端文件的总大小

spring.servlet.multipart.max-file-size=200MB
spring.servlet.multipart.max-request-size=200MB

②修改前端一次请求等待时间延长到3分钟


感谢您阅读我的解决问题的博客!我希望这篇文章能为您提供有价值的见解,并帮助您解决面临的挑战。我非常欢迎您就我的方案提出任何意见、建议或纠正,因为您的反馈对我来说非常宝贵。

如果您发现任何错误或有任何疑问,请随时在评论区留言,我将非常乐意与您交流并改进我的观点。您的支持和鼓励是我不断前行的动力,希望您能继续关注我的博客,并与我分享您的想法。文章来源地址https://www.toymoban.com/news/detail-857235.html

谢谢您的阅读和支持!一起学习,一起成长!🌟

到了这里,关于【方案探讨】 出现java.io.IOException解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包