如何在春季流式传输大型HTTP响应

我们有一个HTTP请求,当它在服务器中处理时会创建一个大小约为3GB的响应,这个数据是对数据库的6个查询的聚合,我们如何将这些数据作为单独的响应发送6个查询而不是聚合。如何在春季流式传输大型HTTP响应

回答:

我这样做:

@GetMapping("/{fileName:[0-9A-z]+}") 

@ResponseBody

public ResponseEntity<InputStreamResource> get_File(@PathVariable String fileName) throws IOException {

Files dbFile = fileRepository.findByUUID(fileName);

if (dbFile.equals(null))

return new ResponseEntity<>(HttpStatus.NOT_FOUND);

String filename = dbFile.getFileName();

Resource file = storageService.loadAsResource(dbFile.getFileName());

long len = 0;

try {

len = file.contentLength();

} catch (IOException e) {

e.printStackTrace();

}

MediaType mediaType = MediaType.valueOf(FileTypeMap.getDefaultFileTypeMap().getContentType(file.getFile()));

if (filename.toLowerCase().endsWith("mp4") || filename.toLowerCase().endsWith("mp3") ||

filename.toLowerCase().endsWith("3gp") || filename.toLowerCase().endsWith("mpeg") ||

filename.toLowerCase().endsWith("mpeg4"))

mediaType = MediaType.parseMediaType("application/octet-stream");

InputStreamResource resource = new InputStreamResource(new FileInputStream(file.getFile()));

return ResponseEntity.ok()

.contentType(mediaType)

.contentLength(len)

.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getFilename() + "\"")

.body(resource);

}

回答:

StreamingResponseBody用于异步请求处理,其中应用程序可以直接写入响应输出流。

结帐本文

http://www.logicbig.com/how-to/code-snippets/jcode-spring-mvc-streamingresponsebody/

http://shazsterblog.blogspot.in/2016/02/asynchronous-streaming-request.html

以上是 如何在春季流式传输大型HTTP响应 的全部内容, 来源链接: utcz.com/qa/263264.html

回到顶部