我有一种有效的方法,可以使用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);
}
答案 0 :(得分:2)
您可以返回404(找不到)。
if (!file.exists()) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
由于已经处于通话状态,因此您无需检查日志或引发异常