我一直有类似的问题,并用下面的代码解决了它.
我的控制器中有以下异常处理程序.如果出现错误,则负责重定向和错误消息传递.
@ExceptionHandler(FileNotFoundException.class)
public ModelAndView exceptionHandler(Exception ex) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("rescues/general");
modelAndView.addObject("message", ex.getMessage());
return modelAndView;
}
这是RequestMapping
@RequestMapping(value = "s3Download.request", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity download(@RequestParam(value = "s3key") String s3Key)
throws IOException {
HttpHeaders responseHeaders = new HttpHeaders();
InputStreamResource inputStreamResource = s3DownloadService.getS3File(s3Key, responseHeaders);
return new ResponseEntity<>(inputStreamResource, responseHeaders, HttpStatus.OK);
}
如果文件位于服务器本地,则可以使用FileSystemResource代替InputStreamResource.
服务层负责在HttpHeaders对象上设置响应头值
responseHeaders.setContentType(MediaType.parseMediaType(objectMetaData.getContentType()));
responseHeaders.setContentLength(objectMetaData.getContentLength());
responseHeaders.setContentDispositionFormData("attachment", fileName);