Ich habe einen Controller, der Datei-Stream mit ResponseEntity-Klasse zurückgibt. Aber ich bin nicht sicher, ob die Ressource nach Abschluss der Methode geschlossen ist.Spring - Was ist der richtige Weg zum Antwortdateistream?
@RequestMapping(value = "/VMS-49001/playlist/{listName:.+}")
@ResponseBody
public ResponseEntity<?> playlist(HttpServletRequest request, HttpServletResponse response,
@PathVariable String listName) throws IOException {
String hlsPath = getHLSPath(request.getParameter("dt"), listName, OtuEnum.URLType.HLS);
Path filePath = Paths.get(hlsPath);
if (filePath.toFile().exists()) {
Path fileNamePath = filePath.getFileName();
String fileName = "";
if (fileNamePath != null) {
fileName = fileNamePath.toString();
}
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData(fileName, fileName);
return ResponseEntity.ok().contentLength(filePath.toFile().length())
.contentType(MediaType.parseMediaType("application/vnd.apple.mpegurl")).headers(headers)
.body(new InputStreamResource(Files.newInputStream(filePath)));
} else {
String errorMsg = "404 file not found";
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.contentType(MediaType.parseMediaType("text/html"))
.body(errorMsg);
}
}
, wenn Sie unter Codefragment zu sehen, Files.newInputStream (filePath) implementiert Verschließbare, so sollte es nach Gebrauch verschlossen werden, aber ich kann den Code zu schließen es nicht finden. :
return ResponseEntity.ok()
.contentLength(filePath.toFile().length())
.contentType(MediaType.parseMediaType("application/vnd.apple.mpegurl"))
.headers(headers)
.body(new InputStreamResource(Files.newInputStream(filePath)));
Zum Antwortdateistream, ist es gut, die Datei mit diesem Code zu liefern? Oder gibt es einen "richtigen" Ansatz?