部署后,大文件下载报错:ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接?

使用ruoyi-vue-pro开发的,在使用文件管理时,下载上传到服务器上的文件时,当文件过大(目前大于10M)就会报错:
目前发现,会发送2次请求。

.hutool.core.io.IORuntimeException: ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
    at cn.hutool.core.io.IoUtil.write(IoUtil.java:990)
    at cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.writeAttachment(ServletUtils.java:50)
    at cn.iocoder.yudao.module.infra.controller.admin.file.FileController.getFileContent(FileController.java:85)
    at cn.iocoder.yudao.module.infra.controller.admin.file.FileController$$FastClassBySpringCGLIB$$2e43158f.invoke(<generated>)

image.png
求大神帮忙解答

阅读 2.3k
avatarAI BotBETA

这个问题可能是由于客户端在下载大文件时中断了连接,导致服务器端无法正常写入响应数据到客户端。出现这种情况的原因可能有几种:

  1. 客户端可能因为某些原因中断了连接,比如关闭了浏览器或者网络连接不稳定。这种情况下,服务器端会尝试写入响应数据,但由于连接已经中断,所以会抛出 ClientAbortException 异常。
  2. 服务器端在处理大文件时可能存在性能问题,导致响应速度变慢,客户端等待时间过长,从而中断了连接。

要解决这个问题,可以考虑以下几点:

  1. 在客户端,确保网络连接稳定,并且浏览器没有意外关闭。在下载大文件时,可以尝试使用下载工具或者在浏览器中使用特定的方法来下载文件,以避免在下载过程中中断连接。
  2. 在服务器端,可以对大文件进行分块处理,将文件分成多个小块,每次只处理一个小块,这样可以减轻服务器的负担,提高响应速度。同时,也可以考虑对服务器进行优化,比如增加内存、升级硬件等。
  3. 可以考虑使用 CDN(内容分发网络)来加速文件的传输速度。CDN 可以将文件缓存到全球各地的服务器上,用户可以从最近的服务器上获取文件,从而加速文件传输速度。
  4. 如果以上方法仍然无法解决问题,可以考虑使用其他技术方案来解决大文件下载问题,比如使用流媒体技术将文件分成多个流同时传输,或者使用分布式文件系统来存储和传输文件。

以上是一些可能的解决方案,具体方案需要根据实际情况来选择和实施。

2 个回答

你是直接是java前面没有代理的话应该是java 超时了,你配置一下超时时间

        URL url = new URL(fileUrl);
        URLConnection connection = url.openConnection();
        // 设置连接超时时间为60秒
        connection.setConnectTimeout(60000);
.....

如果还有nginx就这样配置一下

              location /api {
                        proxy_pass http://127.0.0.1:5000;
                        # nginx跟后端服务器连接超时时间
                        proxy_connect_timeout 300;
 
                        # 后端服务器数据回传超时时间
                        proxy_send_timeout 300;
 
                        # 连接成功后,后端服务器响应超时时间
                        proxy_read_timeout 300;
                        proxy_set_header Host $host:$server_port;
                }
新手上路,请多包涵

我也遇到了这个问题,我在上传视频的时候,视频超过10M了,所以我就在前台把大小改了😂
image.png
然后每次后台读取的时候都会报cn.hutool.core.io.IORuntimeException: ClientAbortException: java.io.IOException: Broken pipe
这个。
但是数据是正常的。
我是直接抛出异常了,模仿这个写的
https://blog.csdn.net/z69183787/article/details/102564384

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏