Java Spring-响应文件流的正确方法是什么?

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

我有一个使用ResponseEntity类返回文件流的控制器。 但是我不确定资源是否在完成方法后关闭

@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);
}