Java Spring-响应文件流的正确方法是什么?
我有一个使用ResponseEntity类返回文件流的控制器。 但是我不确定资源是否在完成方法后关闭Java Spring-响应文件流的正确方法是什么?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有一个使用ResponseEntity类返回文件流的控制器。 但是我不确定资源是否在完成方法后关闭 @RequestMapping(value = "/VMS-49001/playlist/{listName:.+}") @ResponseBody public ResponseEntity<?> playlist(HttpServletRequest request, HttpServletResponse response, @PathVariable Stri
@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);
}
}
为了响应文件流,使用此代码为文件提供服务好吗?或者有更好的方法吗?对于Spring 4.1,您的方法将起作用,没有任何问题。 下面是另一种方法,如果您想查看:
@RequestMapping(value = "/VMS-49001/playlist/{listName:.+}")
public ResponseEntity<byte[]> testphoto() throws IOException {
InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/vnd.apple.mpegurl"));
headers.setContentDispositionFormData(fileName, fileName);
return new ResponseEntity<byte[]>(IOUtils.toByteArray(in), headers, HttpStatus.CREATED);
}
@RequestMapping(value=“/VMS-49001/playlist/{listName:.+}”)
public ResponseEntity testphoto()引发IOException{
InputStream in=servletContext.getResourceAsStream(“/images/no_image.jpg”);
最终HttpHeaders=新HttpHeaders();
headers.setContentType(MediaType.parseMediaType(“application/vnd.apple.mpegur”);
headers.setContentDispositionFormData(文件名、文件名);
返回新的ResponseEntity(IOUtils.toByteArray(in),headers,HttpStatus.CREATED);
}
@RequestMapping(value = "/VMS-49001/playlist/{listName:.+}")
public ResponseEntity<byte[]> testphoto() throws IOException {
InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/vnd.apple.mpegurl"));
headers.setContentDispositionFormData(fileName, fileName);
return new ResponseEntity<byte[]>(IOUtils.toByteArray(in), headers, HttpStatus.CREATED);
}