Local 디렉토리에 있는 파일을 다운로드하는 예제 소스


** 컨트롤러

@RequestMapping(value="/demo/download.do")

public void download(

 HttpServletRequest request

, HttpServletResponse response) throws Exception {

// 다운로드 파일 정보 조회

String downloadFilePath = "/tmp/original.jpg";

InputStream inputStream = getFileInputStream(downloadFilePath);

// HTTP 다운로드 프로토콜 정의

ServletContext context = request.getSession().getServletContext();

int contentLengt = inputStream.available();

setHttpDowndloadProtocol(context, response , downloadFilePath, contentLengt);

// 다운로드 파일 쓰기

OutputStream outStream = response.getOutputStream();

writeToResponse(inputStream, outStream);


inputStream.close();

outStream.close();

}



- 다운로드 파일 조회

private InputStream getFileInputStream(String downloadFilePath) throws FileNotFoundException {

File downloadFile = new File(downloadFilePath);

return new FileInputStream(downloadFile);

}


- HTTP 다운로드 프로토콜 정의

private void setHttpDowndloadProtocol(

 ServletContext context

, HttpServletResponse response

, String downloadFilePath

, int contentLength) {

String mimeType = getMimeType(context, downloadFilePath);

response.setContentType(mimeType);

response.setContentLength(contentLength);


String contentDisposition = String.format("attachment; filename=\"%s\"", "download.jpg");

response.setHeader("Content-Disposition", contentDisposition);

}


private String getMimeType(

  ServletContext context

, String downloadFilePath) {

String mimeType = context.getMimeType(downloadFilePath);

if (mimeType == null) {

  mimeType = "application/octet-stream";

}

return mimeType;

}


- 다운로드 파일 쓰기

private void writeToResponse(

  InputStream inputStream

, OutputStream outStream) throws IOException {

byte[] buffer = new byte[1024];

int bytesRead = -1;


while ((bytesRead = inputStream.read(buffer)) != -1) {

  outStream.write(buffer, 0, bytesRead);

}

}


Posted by 짱가쟁이