SpringMvc 文件下载 详解



  最近SSM 须要用到文件下载,之前没用过,在百度上找了很久发现没有一篇博客,对于此段代码进行详细讲解,

  这里是本人的我的总结,跟你们分享一下!!!不谢/** * 文件下载 * ResponseEntity:该类实现响应头、文件数据(以字节存储)、状态封装在一块儿交给浏览器处理以实现浏览器的文件下载 * <p> * ResponseEntity 也可做为响应数据使用 与@ResponseBody 注解功能类似 * 可是ResponseEntity的优先级高于@ResponseBody * 在不是ResponseEntity的状况下才去检查有没有@ResponseBody注解。 * 若是响应类型是ResponseEntity能够不写@ResponseBody注解,写了也没有关系。 * <p> * 简单粗暴的讲,我的理解: * @ResponseBody能够直接返回Json结果, * @ResponseEntity不只能够返回json结果,还能够定义返回的HttpHeaders和HttpStatus */@RequestMapping("/download")public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam String filename) throws IOException { //文件所在位置 String downloadFilePath = request.getSession().getServletContext().getRealPath("/uploud"); //获取要下载的文件 File file = new File(downloadFilePath, filename); //http头信息 设置一些约束之类的东西 HttpHeaders headers = new HttpHeaders(); //设置编码 为了解决中文名称乱码问题 String downloadFileName = new String(filename.getBytes("UTF-8"), "iso-8859-1"); //将编码加到http头信息中 headers.setContentDispositionFormData("attachment", downloadFileName); /** * MediaType:互联网媒介类型 * contentType:具体请求中的媒体类型信息 * MediaType: 不少常量 多种类型可设置 * APPLICATION_OCTET_STREAM:二进制流数据(如常见的文件下载) * * 还有一种常见的: * MULTIPART_FORM_DATA: 须要在表单中进行文件上传时,就须要使用该格式 */ headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); /** * FileUtils.readFileToByteArray:读取文件到字节数组 * * CREATED:201状态码:建立 * * 简而言之,我的理解: * 建立/下载 一个根据http头信息约束的 字节数组(文件) */ return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);}
相关文章
相关标签/搜索