스프링으로 파일 다운로드 구현할 때 보통 파일을 읽어서 복사하는 코드를 작성하게 된다. 하지만 한 줄로 해결하는 방법이 있더라.
@RequestMapping(value="/{id}/download", method=RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) @ResponseBody public FileSystemResource download(@PathVariable("id") SomeObj obj, HttpServletResponse response) { File file = myService.toFile(obj); response.setHeader("Content-Disposition", "attachment; filename=" + file.getName()); /** 보통 아래와 같이 구현했었다. 이것도 간단하긴 한데... try { FileCopyUtils.copy(new FileInputStream(file), response.getOutputStream()); response.flushBuffer(); } catch (IOException e) { log.info("Error writing file to output stream. Filename was '" + file.getName() + "'"); throw new RuntimeException("IOError writing file to output stream"); } */ /* 그냥 객체 하나만 던져주면 된다. */ return new FileSystemResource(file); }
댓글 없음:
댓글 쓰기