반응형
controller.java
1 2 3 4 5 6 7 8 9 10 11 12 | @RequestMapping(value = "/downLoadFile", method = RequestMethod.GET) public ModelAndView downLoadFile() { String fullPath = "D:\\fileupload\\2016\\3\\5da2e43f148146b2aa641d268ad99e47.txt"; File downloadFile = new File(fullPath); ModelAndView mav = new ModelAndView(); mav.addObject("downloadFile", downloadFile); mav.addObject("downloadFileName", "한글.txt"); mav.setViewName("downloadFileView"); return mav; } | cs |
view.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import java.io.File; import java.io.FileInputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; import org.springframework.util.FileCopyUtils; import org.springframework.web.servlet.view.AbstractView; @Component("downloadFileView") public class DownloadFileView extends AbstractView{ public DownloadFileView() { // TODO Auto-generated constructor stub setContentType("application/download; ccharset=utf-8"); } @Override protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { // TODO Auto-generated method stub File file = (File) model.get("downloadFile"); String downloadFileName = (String) model.get("downloadFileName"); response.setContentType(getContentType()); response.setContentLength((int)file.length()); setResponse(request,response,downloadFileName); response.setHeader("Content-Transfer-Encoding", "binary"); OutputStream out = response.getOutputStream(); FileInputStream fis = null; try { fis = new FileInputStream(file); FileCopyUtils.copy(fis, out); } catch (Exception e) { e.printStackTrace(); } finally { if (fis != null) { try { fis.close(); } catch (Exception e2) {}} } out.flush(); } private void setResponse(HttpServletRequest request, HttpServletResponse response, String fileName) throws UnsupportedEncodingException{ String userAgent = request.getHeader("User-Agent"); if (userAgent.indexOf("MSIE 5.5") > -1) { // MS IE 5.5 이하 response.setHeader("Content-Disposition", "filename=" + URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "\\ ") + ";"); } else if (userAgent.indexOf("MSIE") > -1) { // MS IE (보통은 6.x 이상 가정) response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "\\ ") + ";"); } else if (userAgent.indexOf("Trident") > -1) { // MS IE 11 response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "\\ ") + ";"); } else { // 모질라나 오페라 response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes("euc-kr"), "latin1").replaceAll("\\+", "\\ ") + ";"); } } } | cs |