直接上代码:
第一种写法:
@RequestMapping(value = "download_cumstoms_declaration") public ModelAndView downloadCustomsDeclaration(@RequestParam(value = "batchId", required=false) Integer batchId, HttpServletResponse response) throws Exception { //下载 File file = new File("D:" + File.separator + "VV" + File.separator + "EclipseWorkspace" + File.separator + "GRYB_WEB" + File.separator + "WebContent" + File.separator + "WEB-INF" + File.separator + "files" + File.separator + "test.pdf"); InputStream inputStream = new BufferedInputStream(new FileInputStream(file)); response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment; filename="+ file.getName());// +".pdf" OutputStream outputStream = response.getOutputStream(); IOUtils.copy(inputStream, outputStream); response.flushBuffer(); inputStream.close(); outputStream.close(); }
第二种写法:使用ResponseEntity<byte[]>作为返回值
public class SpringDownloadUtils { public static ResponseEntity<byte[]> getResponseEntity(String fileName, File file) throws IOException { HttpHeaders headers = new HttpHeaders(); String fileNameAtferEncoding = new String((fileName).getBytes("UTF-8"),"iso-8859-1");//为了解决中文名称乱码问题 headers.setContentDispositionFormData("attachment", fileNameAtferEncoding); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED); } }
注意,如果是显示PDF,让浏览器处理,则是如下的写法(类似于css文件,也是直接在controller返回一个ModelAndView对象,如果以如上的方式返回css文件,在浏览器端应该会是下载)
@RequestMapping(value = "download_cumstoms_declaration") public ModelAndView downloadCustomsDeclaration(@RequestParam(value = "batchId", required=false) Integer batchId, HttpServletResponse response) throws Exception { //网页显示 ModelAndView mav = new ModelAndView("test.pdf"); return mav; }