当前位置: 首页 > 知识库问答 >
问题:

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

王英彦
2023-11-15

使用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个答案

邓子濯
2023-11-15

你是直接是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;                }
於宾白
2023-11-15

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

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

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

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

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

 类似资料:
  • 我正在使用laravel的邮件发送电子邮件到gmail帐户的测试目的,但有问题 fwrite():发送249字节失败,错误号为10053。主机中的软件中止了已建立的连接。。

  • 从过去3个星期开始,我们一直在使用Liveay和Portlet。 我下载了捆绑的增殖服务器,并将其放在本地驱动器上。我做了设置,能够正确地访问localhost:8080。 我还创建了一些自定义portlet,在eclipse中构建它们时,war文件被部署在路径C:/liferay/deploy中。 现在,我改变了服务器的位置,我想让服务器在D:/drive中。当我进行转换时,从D:/lifera

  • 使用docker container inspect xxx,我可以找到装载信息。 在docker exec-it xxx bash之后,就会出现部署/应用/日志目录,其中的文件也会更新 但是,主机上没有创建主/应用程序日志目录,我仔细检查了源代码是否正确,例如部署/应用程序/日志 这个问题与我的情况非常接近,因为讨论使用目录装载的答案可以解决这个问题,这意味着不是我的问题。Docker bind

  • Webapp在我的项目中提供基于最终用户搜索的下载CSV文件功能,它正在做以下工作: 打开一个文件“download.csv”(不使用file.createTempFile(字符串前缀、字符串后缀、文件目录);但始终只使用“download.csv”),从Sql记录集中写入数据行,然后使用FileUtils将该文件的内容复制到servlet的outputStream。 记录集基于搜索条件,比如1月

  • 我对这个问题很困惑。在运行这段代码的前几次,它没有发生,但在那之后,我无法让它再次运行。它只有在使用我的Java代码下载后才会崩溃。我的代码从我的网站下载了一个jar文件,然后使用ProcessBuilder运行它。最初几次都很好,但我又运行了几次,它开始给我带来了好处 没有主清单属性,在。。。\AppData\Local\GDRQ\bin\launch\u gdbotbin。罐子 下面是我用来下

  • 我有一个执行数据下载的函数。它会产生一个新的结果。xlsx文件。它按预期工作。功能是 问题是,完成后,无论我在应用程序中做什么,它都会抛出一个错误 RangeError:UINT16数组的字节长度应为2的倍数 而且, SyntaxError:意外标记筛 在JSON中的位置0 记录在下面 不知何故,似乎以下对API的调用已损坏。 任何帮助都将不胜感激。