java 자바 파일 다운로드 예제

스프링 자바 파일 다운로드 java file download 예제

자바 스프링에서 파일을 다운로드 하는 예제를 올려보겠습니다. 저는 각종 문서 템플릿을 사용자들이 다운받을 수 있도록 JSP페이지에 기능을 추가 하였습니다. 파일 다운로드 로직을 유틸자바파일로 생성하고, 컨트롤러단에서 사용하였습니다. JSP 에서 url로 호출하여 사용하였습니다. 순서대로 진행하시면, 자연스럽게 이해되실꺼에요. 


1. 자바파일다운로드 코딩로직 (DownloadView.java 파일을 생성해준다.)

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.util.FileCopyUtils;

public class DownloadView {
	public void filDown(HttpServletRequest request,
			HttpServletResponse response, String filePath, String realFilNm,
			String viewFileNm) throws IOException {
		 
		File file = new File( filePath + realFilNm);
		System.out.println("root = " + filePath + realFilNm);
		if (file.exists() && file.isFile()) {
			response.setContentType("application/octet-stream; charset=utf-8");
			response.setContentLength((int) file.length());
			String browser = getBrowser(request);
			String disposition = getDisposition(viewFileNm, browser);
			response.setHeader("Content-Disposition", disposition);
			response.setHeader("Content-Transfer-Encoding", "binary");
			OutputStream out = response.getOutputStream();
			FileInputStream fis = null;
			fis = new FileInputStream(file);
			FileCopyUtils.copy(fis, out);
			if (fis != null)
				fis.close();
			out.flush();
			out.close();
		}
	}

	private String getBrowser(HttpServletRequest request) {
		String header = request.getHeader("User-Agent");
		if (header.indexOf("MSIE") > -1 || header.indexOf("Trident") > -1)
			return "MSIE";
		else if (header.indexOf("Chrome") > -1)
			return "Chrome";
		else if (header.indexOf("Opera") > -1)
			return "Opera";
		return "Firefox";
	}

	private String getDisposition(String filename, String browser)
			throws UnsupportedEncodingException {
		String dispositionPrefix = "attachment;filename=";
		String encodedFilename = null;
		if (browser.equals("MSIE")) {
			encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll(
					"\\+", "%20");
		} else if (browser.equals("Firefox")) {
			encodedFilename = "\""
					+ new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
		} else if (browser.equals("Opera")) {
			encodedFilename = "\""
					+ new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
		} else if (browser.equals("Chrome")) {
			StringBuffer sb = new StringBuffer();
			for (int i = 0; i < filename.length(); i++) {
				char c = filename.charAt(i);
				if (c > '~') {
					sb.append(URLEncoder.encode("" + c, "UTF-8"));
				} else {
					sb.append(c);
				}
			}
			encodedFilename = sb.toString();
		}
		return dispositionPrefix + encodedFilename;
	}
}


2. 컨트롤러단에서 객체를 생성하고 호출한다. (여기는 컨트롤러에서 서블릿 하나를 추가해줍니다.)


	// 문서템플릿 파일 다운로드
	@RequestMapping(value = "/document/fileDownload.do")
	public  void fileDownload(
			  @RequestParam("document_nm") String document_nm
			, HttpSession session
			, HttpServletRequest req
			, HttpServletResponse res
			, ModelAndView mav) throws Throwable 
	{
		try {
			DownloadView fileDown = new DownloadView(); //파일다운로드 객체생성
			fileDown.filDown(req, res, "파일경로입력" + "/" , "파일이름이력", "다운받았을때출력되는파일이름입력"); //파일다운로드 

			
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(e.toString());
		}
	}

위에 한글로 표기해 논거처럼 객체를 생성한 후에, 알맞게 입력해줍니다. 파일경로입력 과 파일이름입력 은 사용자들에게 서버에서 다운시켜주고 싶은 파일경로와 파일명을 입력하면 됩니다. 마지막 다운받았을때출력되는파일이름은 말 그대로 사용자들이 다운했을때, 보여지는 파일명 입니다. 


3. JSP 파일에서 RequestMapping 으로 값을 준 url로 컨트롤러 서블릿(위에2번)을 호출한다.

  //문서다운로드
  function fn_downfile(document_nm){ 
    location.href="/document/fileDownload.do?document_nm=" + document_nm); 
  }

위와 같이 JSP파일에서 스크립트로 추가 해준 다음에, 버튼을 하나 생성하여 fn_downfile()을 호출하시면 됩니다.

document_nm 은 변수에요. 스크립트가 호출되면서 저 문서에 맞는 파라미터값을 서블릿에서 처리하며, 원하는 파일이 다운로드 되겠죠? 

이 글을 공유하기

댓글

Designed by JB FACTORY