gpt4 book ai didi

java - 从性能角度来看,使用 Spring Rest api 从服务器读取较大尺寸的文件

转载 作者:行者123 更新时间:2023-12-01 16:15:27 25 4
gpt4 key购买 nike

我能够从服务器读取日志文件,并能够通过 Spring Rest API 成功下载相同的日志文件,现在我的查询操作系统现在我在服务器上的输入文件大小为 500 MB,但无论如何,如果我的文件达到1 GB,那么在这种情况下我需要在下面的代码中进行哪些修改来提高性能

  @GetMapping("/download/{filename}")
public ResponseEntity<Resource> download(@RequestParam String filename) throws IOException {
File file = new File(SERVER_LOCATION + File.separator + filename + EXTENSION);

HttpHeaders header = new HttpHeaders();
header.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename + EXTENSION);
header.add("Cache-Control", "no-cache, no-store, must-revalidate");
header.add("Pragma", "no-cache");
header.add("Expires", "0");

Path path = get(file.getAbsolutePath());
ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(path));

final ResponseEntity<Resource> resourceResponseEntity = ResponseEntity.ok()
.headers(header)
.contentLength(file.length())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(resource);
return resourceResponseEntity;
}

最佳答案

您当前的代码正在使用Files.readAllBytes(path)将整个文件读入内存。虽然这可能适用于小文件,但它会因大文件或大量打开的文件而中断。您应该做的不是读取它,而是使用 FileInputStream 等。

File file = new File(SERVER_LOCATION + File.separator + filename + EXTENSION);
Resource resource = new FileSystemResource(file);

Path path = get(file.getAbsolutePath());
Resource resource = new InputStreamResource(Files.newInputStream(path));

这只会在需要时加载并直接传输结果。

关于java - 从性能角度来看,使用 Spring Rest api 从服务器读取较大尺寸的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62405034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com