2013-12-10

스프링 파일 다운로드 가장 간단한 구현

스프링으로 파일 다운로드 구현할 때 보통 파일을 읽어서 복사하는 코드를 작성하게 된다. 하지만 한 줄로 해결하는 방법이 있더라.

@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);

}

댓글 없음:

댓글 쓰기