首页 > 解决方案 > 为什么我的 API 会抛出 ERR_INCOMPLETE_CHUNKED_ENCODING 错误?

问题描述

我有一个使用 Java 8 和 Spring Boot 构建的 REST API。该 API 用于下载文件。我正在使用 Spring Boot 的StreamingResponseBody类将文件作为数据流发送。

完整的代码片段可以在下面找到:

StreamingResponseBody resp = new StreamingResponseBody() { @Override public void writeTo(final OutputStream output) throws IOException { try { Files.copy(myFile.toPath(), output); } finally { output.close(); boolean check = myFile.delete(); log.info("File {} deletion status : {}", myFile.getAbsolutePath(), check); } } };

HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + myFile.getName()); headers.add("Content-Type", "application/octet-stream");

return new ResponseEntity<StreamingResponseBody>(resp, headers, HttpStatus.OK);

API 对某些请求给出了正确的响应,但在少数情况下它会引发ERR_INCOMPLETE_CHUNKED_ENCODING错误。我尝试查看很多地方,但无法解决此问题。我正在尝试从 Angular 8 Web App 调用 API 来下载文件。这个问题出现在所有可用的主要浏览器上,我使用 IE 11、Chrome、Firefox、Edge 进行了测试。

标签: restspring-boot

解决方案


我认为你的问题是 output.close()。

我查看了一些样本,但没有人关闭输出。Spring 应该在请求后关闭它。

我还建议您,对您的应用程序施加压力以检测意外行为。


推荐阅读