当文件不存在时使用InputStreamResource的Spring Boot下载文件

时间:2018-10-24 12:13:01

标签: java spring spring-boot get

我有一种有效的方法,可以使用InputStreamResource对象通过Spring Boot下载文件

有时候,我遇到不存在要下载的文件的情况,在这种情况下,当文件下载结束时,我会写出所有Java异常。 / p>

我的问题是在这种情况下如何继续拒绝用户文件下载,并收到“文件不存在”的响应?

我曾考虑过引发异常,但是如果不检查日志,用户将无法获取信息

代码如下:

@GetMapping("/downloadfile")
public ResponseEntity<InputStreamResource> getFile(@RequestParam(value = "filePath") String filePath) throws FileNotFoundException, IllegalAccessException,
            IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {

        File file = new File(filePath);
        if (!file.exists()) {
            // What should I do there?
            //throw new CustomizeException("Could not find the file"); ?
        }
        MediaType mediaType = MediaTypeUtils.getMediaTypeForFileName(this.servletContext, file);
        InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
        return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileName + "\"")
                .contentType(mediaType).contentLength(file.length()).body(resource);
    }

1 个答案:

答案 0 :(得分:2)

您可以返回404(找不到)。

    if (!file.exists()) {
       return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }

由于已经处于通话状态,因此您无需检查日志或引发异常