package froala.editor.utils.view; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.tika.Tika; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.util.FileCopyUtils; import org.springframework.web.servlet.view.AbstractView; import egovframework.com.cmm.util.EgovResourceCloseHelper; import egovframework.rte.fdl.cmmn.exception.EgovBizException; @Component public class DownloadView extends AbstractView { private final static Logger LOGGER = LoggerFactory.getLogger(DownloadView.class); @Override protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException, IOException { String path = (String) model.get("path"); String mime = (String) model.get("mime"); File file = new File(path); response.setContentLength((int)file.length()); String filename = (String) model.get("origin_file_nm"); String userAgent = request.getHeader("User-Agent"); String conVstr = null; if (userAgent.contains("MSIE")) { conVstr = URLEncoder.encode(filename,"UTF-8"); } else if (userAgent.contains("Trident")) { conVstr = URLEncoder.encode(filename,"UTF-8"); } else if(userAgent.contains("Chrome")) { conVstr = new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); } else if(userAgent.contains("Opera")) { conVstr = new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); } else if (userAgent.contains("Mozilla")){ conVstr = new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); } else { conVstr = new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); } // PDF 파일일 경우 바로 열기 Tika tika = new Tika(); mime = mime == null ? tika.detect(file) : mime; switch (mime) { // pdf로 다운로드 받도록 하기 위해 주석 // case "application/pdf": // response.setContentType("application/pdf"); // break; default: response.setHeader("Content-Disposition", "attachment; fileName=\"" + conVstr + "\";"); response.setContentType("application/octet-stream;charset=UTF-8"); break; } response.setHeader("Content-Transfer-Encoding", "binary"); OutputStream out = response.getOutputStream(); FileInputStream fis = null; try{ fis = new FileInputStream(file); FileCopyUtils.copy(fis, out); } finally { EgovResourceCloseHelper.close(fis); } out.flush(); } }