package itn.com.cmm.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;

/**
 * 
 * @author 		: 이호영
 * @fileName 	: FileUtil.java 
 * @date 		: 2023.04.06
 * @description : 파일 관련 유틸 
 * =========================================================== 
 * DATE          AUTHOR   NOTE 
 * ----------------------------------------------------------- *
 * 2023.04.06    이호영          최초 생성
 * 
 * 
 * 
 */
public final class FileUtil {
	
    /** 
     * @methodName	: downLoad 
     * @author		: 이호영
     * @date		: 2023.04.06 
     * @description	: 파일 다운로드 
     * @param response
     * @param fileInfo
     * @param fileName 
     * @throws Exception 
     */
    public static void downLoad(HttpServletResponse response, String fileInfo, String fileNameP) throws Exception {

    
        try {
        	String path = fileInfo; // 경로에 접근할 때 역슬래시('\') 사용

        	File file = new File(path);
        	
        	String fileName = "";
        	if(StringUtils.isNotEmpty(fileNameP))
        		fileName = URLEncoder.encode(fileNameP,"UTF-8").replaceAll("\\+", "%20");
        	else
        		fileName = file.getName();
        	
        	response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 다운로드 되거나 로컬에 저장되는 용도로 쓰이는지를 알려주는 헤더
        	
        	FileInputStream fileInputStream = new FileInputStream(path); // 파일 읽어오기 
        	OutputStream out = response.getOutputStream();
        	
        	int read = 0;
            byte[] buffer = new byte[1024];
            while ((read = fileInputStream.read(buffer)) != -1) { // 1024바이트씩 계속 읽으면서 outputStream에 저장, -1이 나오면 더이상 읽을 파일이 없음
                out.write(buffer, 0, read);
            }
                
        } catch (Exception e) {
            throw new Exception("download error");
        }
	}
    
    
}
