【发布时间】:2021-07-02 09:07:25
【问题描述】:
我有一个用于下载 CSV 文件的 API,该文件可能很大(最大 15MB)。虽然响应时间很长,但它在 Chrome 中给出了响应。但是,在 Safari 中,它会在 60 秒后显示 504 网关超时。这是代码:
public File dataToCSV(List<String[]> dataLines) throws IOException {
File csvOutputFile = new File("supply_tracker_" + LocalDateTime.now() + ".csv");
try (PrintWriter pw = new PrintWriter(csvOutputFile)) {
dataLines.stream()
.map(data -> String.join(",", data))
.forEach(pw::println);
}
return csvOutputFile;
}
public ResponseEntity<Object> getFile(File csv) throws FileNotFoundException {
if (csv != null) {
InputStreamResource resource = new InputStreamResource(new FileInputStream(csv));
long length = csv.length();
boolean delete = csv.delete();
if (delete) {
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", csv.getName()));
return ResponseEntity.ok()
.headers(headers)
.contentLength(length)
.contentType(MediaType.parseMediaType("text/csv"))
.body(resource);
}
} else {
return ResponseEntity.status(HttpStatus.NO_CONTENT).body(null);
}
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}
有哪些方法可以缩短响应时间?另外,是否有临时解决方案可以在 Safari 上进行这项工作?前端在 React 中,API 用于 axios 调用。
【问题讨论】:
-
您可以查看 Spring Boot 的请求超时配置 - 但在我看来,Safari 客户端正在超时。在返回客户端之前压缩文件会使包更小,并应减少下载时间。
标签: java spring-boot csv spring-mvc response-time