@Deprecated @RequestMapping("/download2/{suffix}/{filename}") public String download2(HttpServletRequest request, HttpServletResponse response, @PathVariable("suffix") String suffix, @PathVariable("filename") String filename) { String filenameWithSuffix = filename + "." +suffix; try { String path=request.getSession().getServletContext().getRealPath("download"); File file = new File(path + File.separator + filenameWithSuffix); // 以流的形式下载文件。 InputStream fis = new BufferedInputStream(new FileInputStream(file)); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); response.reset(); // 清空response // 设置response的Header //response.addHeader("Content-Disposition", "attachment;filename=" + new String(filenameWithSuffix.getBytes(),"utf-8")); response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filenameWithSuffix, "UTF-8")); response.addHeader("Content-Length", "" + file.length()); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); toClient.write(buffer); toClient.flush(); toClient.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 返回值要注意,要不然就出现下面这句错误! //java+getOutputStream() has already been called for this response return null; } @RequestMapping("/download/{suffix}/{filename}") public ResponseEntity<byte[]> download(HttpServletRequest request, @PathVariable("suffix") String suffix, @PathVariable("filename") String filename) { String filenameWithSuffix = filename + "." +suffix; HttpHeaders headers = new HttpHeaders(); try { headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", URLEncoder.encode(filenameWithSuffix, "UTF-8")); String path=request.getSession().getServletContext().getRealPath("download"); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(new File(path + File.separator + filenameWithSuffix)), headers, HttpStatus.CREATED); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; }
第一个方法太low ^_^
本文介绍了两种不同的文件下载方法实现方式,一种使用了传统的输入输出流处理,另一种则利用了Spring框架提供的ResponseEntity来完成文件的下载操作。文章通过具体代码展示了如何从服务器获取指定路径下的文件,并将其发送给客户端。
432

被折叠的 条评论
为什么被折叠?



