본문 바로가기

Language/Java / JSP

[JSP] 파일 다운로드 구현하기

반응형

지난번 파일 업로드 구현하기에 이어서 오늘은 Jsp에서 파일 다운로드 기능을 구현해 보자.
파일 다운로드는 특별한 라이브러리 없이 사용이 가능하다.



1. 파일 다운로드(filedown.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8" %>

<%@ page import="java.io.*"%>
<%@ page import="java.text.*" %>
<%@ page import="java.lang.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.net.*" %>


<%
	request.setCharacterEncoding("UTF-8");


	// 파일 업로드된 경로
	String root = request.getSession().getServletContext().getRealPath("/");
	String savePath = root + "upload";

	// 서버에 실제 저장된 파일명
	String filename = "20140819151221.zip" ;
	
	// 실제 내보낼 파일명
	String orgfilename = "테스트.zip" ;
	 

	InputStream in = null;
	OutputStream os = null;
	File file = null;
	boolean skip = false;
	String client = "";


	try{
		

		// 파일을 읽어 스트림에 담기
		try{
			file = new File(savePath, filename);
			in = new FileInputStream(file);
		}catch(FileNotFoundException fe){
			skip = true;
		}



		
		client = request.getHeader("User-Agent");

		// 파일 다운로드 헤더 지정
		response.reset() ;
		response.setContentType("application/octet-stream");
		response.setHeader("Content-Description", "JSP Generated Data");


		if(!skip){

			
			// IE
			if(client.indexOf("MSIE") != -1){
				response.setHeader ("Content-Disposition", "attachment; filename="+new String(orgfilename.getBytes("KSC5601"),"ISO8859_1"));

			}else{
				// 한글 파일명 처리
				orgfilename = new String(orgfilename.getBytes("utf-8"),"iso-8859-1");

				response.setHeader("Content-Disposition", "attachment; filename=\"" + orgfilename + "\"");
				response.setHeader("Content-Type", "application/octet-stream; charset=utf-8");
			}  
			
			response.setHeader ("Content-Length", ""+file.length() );


	  
			os = response.getOutputStream();
			byte b[] = new byte[(int)file.length()];
			int leng = 0;
			
			while( (leng = in.read(b)) > 0 ){
				os.write(b,0,leng);
			}

		}else{
			response.setContentType("text/html;charset=UTF-8");
			out.println("<script language='javascript'>alert('파일을 찾을 수 없습니다');history.back();</script>");

		}
		
		in.close();
		os.close();

	}catch(Exception e){
	  e.printStackTrace();
	}
%>




response.setHeader("Content-Disposition", "attachment; filename=파일명.doc") 에서 filename을 지정하면 해당 파일명대로 사용자에게 보여진다.



2. 파일 다운로드 링크걸기

파일 다운받기