gpt4 book ai didi

java - StreamingResponseBody 返回空文件

转载 作者:太空宇宙 更新时间:2023-11-04 09:37:36 24 4
gpt4 key购买 nike

我正在尝试使用 Springboot 创建一个休息服务来从存储库下载文件。

我试图返回一个带有 StreamingResponseBody 的 ResponseEntity,以返回我从存储库获取的文件作为 InputStream。

这是我当前的代码:


@GetMapping(path = "/downloadFile")
public ResponseEntity<StreamingResponseBody> downloadFile(@RequestParam(value = "documentId") String documentId,
HttpServletRequest request, HttpServletResponse response) throws InterruptedException, IOException {

InputStream is = downloadService.getDocument(documentId);

StreamingResponseBody out = outputStream -> {

outputStream.write(IOUtils.toByteArray(is));
};

HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "text/csv");
headers.add("Content-Disposition", "attachment; filename=" + documentId);
headers.add("Pragma", "no-cache");
headers.add("Cache-Control", "no-cache");

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

}

当我直接使用浏览器或 postman 使用此端点时,下载的文件为空。我知道 OutputStream 是异步写入的(在配置类中启用了异步)。

我如何使用此服务并完全写入文件,就像它来 self 正在使用的存储库的方式一样? (如果可能的话使用 Postman,仅用于测试目的)

我是否正确构建了服务?

最佳答案

我对代码做了一点修改,我的documentId是要下载的文件的名称。我已经测试过,它工作正常。检查下面的代码。

@GetMapping(path = "/downloadFile")
public ResponseEntity<StreamingResponseBody> downloadFile(
@RequestParam(value = "documentId") String documentId,
HttpServletRequest request,
HttpServletResponse response)
throws InterruptedException, IOException {
String dirPath = "E:/sure-delete/"; //Directory having the files
InputStream inputStream = new FileInputStream(new File(dirPath + documentId));
final StreamingResponseBody out =
outputStream -> {
int nRead;
byte[] data = new byte[1024];
while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
System.out.println("Writing some bytes of file...");
outputStream.write(data, 0, nRead);
}
};
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "text/csv");
headers.add("Content-Disposition", "attachment; filename=" + documentId);
headers.add("Pragma", "no-cache");
headers.add("Cache-Control", "no-cache");
return ResponseEntity.ok().headers(headers).body(out);
}

关于java - StreamingResponseBody 返回空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56313714/

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