rest - 为什么我的 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 进行了测试。
解决方案
我认为你的问题是 output.close()。
我查看了一些样本,但没有人关闭输出。Spring 应该在请求后关闭它。
我还建议您,对您的应用程序施加压力以检测意外行为。
推荐阅读
- javascript - 将函数结果存储在全局变量中
- c++ - 使用 FFT 进行卷积会产生不好的结果
- swift - 如何在快速延迟一段时间后在循环中打印一个值
- javascript - 如何在 DOM 中包含动态 Javascript 文件而不重复相同的文件
- reactjs - React 表单提交触发两次
- android - 是否可以使用闹钟设置特定日期?
- c++ - Eigen 和 glm 产品产生不同的结果
- python - 遵循 python 学习教程,但我的代码没有显示正确的输出,我不知道为什么
- apache-flink - apache flink windows安装
- javascript - 一个字符串和数字组合正则表达式,还有一些其他要求