org.apache.catalina.connector.clientAbortException:java.io.IOException: 你的主机中的软件中止了一个已建立的连接

开始好好的,突然前端查看图片就这个样子了:127.0.0.1 sent an invalid response.。但是后端不报错,前端的网络包也正常。

这个错误很奇怪之后手动try,catch手动打印才会显示。

解决方案

本来代码是这样的:

org.apache.catalina.connector.clientAbortException:java.io.IOException: 你的主机中的软件中止了一个已建立的连接_第1张图片

 改成下面的样子就好了,原因是没有设置MIME的类型。

    public void downloadAnnouncementFile(String path, HttpServletRequest request, HttpServletResponse response) {
        try (FileInputStream fileInputStream = new FileInputStream(path)) {
            String filename;
            try {
                filename = path.split("-----")[1];
            } catch (Exception e) {
                filename = path;
            }
            String contentType = determineContentType(filename);

            response.setContentType(contentType);
            response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + URLEncoder.encode(filename, "UTF-8"));
            response.setHeader("Cache-Control", "private, no-store, max-age=0, must-revalidate");

            IOUtils.copy(fileInputStream, response.getOutputStream());

            response.flushBuffer();
        } catch (IOException e) {
            System.out.println("公告文件下载出问题了");
            e.printStackTrace();
        }
    }

    private String determineContentType(String filename) {
        // 这里根据文件名后缀来确定文件的 MIME 类型
        if (filename.endsWith(".jpg")) {
            return "image/jpeg";
        } else if (filename.endsWith(".pdf")) {
            return "application/pdf";
        } else if (filename.endsWith(".exe")) {
            return "application/exe";
        }
        // 如果没有匹配到特定类型,可以返回一个默认的 MIME 类型
        return "application/octet-stream";
    }

 完。

你可能感兴趣的:(javaWeb,apache,java,开发语言)