<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.innorix.transfer.InnorixDownload" %> <%@ page import="java.io.*" %> <% out.clear(); out = pageContext.pushBody(); String saveDir = delimiterReplace(request.getRealPath(request.getServletPath())); String filePath = saveDir.substring(0, saveDir.lastIndexOf("/") + 1); /* filePath 파일이 저장된 스토리지 전체경로 디렉토리 구분은 윈도우, 유닉스 모두 "/" 문자 사용 윈도우 - C:/storage/path1/path2/data 유닉스 - /storage/path1/path2/data */ // downloadType : "stream" 설정시 자동 전달되는 GET Param 값 String szStartOffset = request.getParameter("_StartOffset"); String szEndOffset = request.getParameter("_EndOffset"); // 파일 스트림 데이터 참조용 GET Param 값, 파라메터 명은 자유 형식 String fileID = request.getParameter("fileID"); String fileName = request.getParameter("fileName"); String sysFileName = new String(); String orgFileName = new String(); String htmlMode = request.getParameter("_Html5"); if (fileID != null) { if (fileID.equals("1")) { sysFileName = "sample-file.pdf"; // 시스템 저장 파일명 orgFileName = "INNORIX WP 브로셔.pdf"; // 원본 파일명 } if (fileID.equals("2")) { sysFileName = "sample-file.pdf"; orgFileName = "INNORIX WP Brochure.pdf"; } if (fileID.equals("3")) { sysFileName = "sample-file.pdf"; orgFileName = "INNORIX WP パンフレット.pdf"; } } if (fileName != null) { sysFileName = "data/" + fileName; orgFileName = fileName; } // 파일명 깨짐대응 문자열 인코딩 처리 orgFileName = java.net.URLEncoder.encode(orgFileName, "UTF-8").replaceAll("\\+", "%20"); File file = new File(filePath + sysFileName); response.setContentType("application/octet-stream"); response.setHeader("Accept-Ranges", "bytes"); response.setHeader("Content-Disposition", "attachment; filename=\"" + orgFileName +"\""); long startOffset = 0; long endOffset = 0; if (szStartOffset != null) { startOffset = Long.parseLong(szStartOffset); } if (szEndOffset != null) { endOffset = Long.parseLong(szEndOffset); } long contentLength = 0; if(szStartOffset != null || szEndOffset != null) { // 컨트롤 다운로드 요청시 contentLength = endOffset - startOffset + 1; } else { // html 일반 다운로드 요청시 contentLength = file.length(); } response.setHeader("Content-Length", "" + contentLength); byte b[] = new byte[8192]; BufferedInputStream input = null; BufferedOutputStream output = null; try { input = new BufferedInputStream(new FileInputStream(file)); output = new BufferedOutputStream(response.getOutputStream()); int read = 0; if (startOffset != 0) { long n = input.skip(startOffset); if (n == -1) read = -1; } if(contentLength > 0) { while (contentLength > 0) { if(contentLength < 8192) { b = new byte[(int)contentLength]; } read = input.read(b); if(read == -1) { break; } output.write(b, 0, read); contentLength = contentLength - read; } } System.out.println("========== innorix transfer " + System.currentTimeMillis() + " =========="); System.out.println("fileID \t: " + fileID); System.out.println("sysFilePath \t: " + filePath + sysFileName); System.out.println("orgFileName \t: " + java.net.URLDecoder.decode(orgFileName, "UTF-8")); System.out.println("totalLength \t: " + file.length() ); System.out.println("startOffset \t: " + startOffset); System.out.println("endOffset \t: " + endOffset); } catch(Exception e) { e.printStackTrace(); } finally { if(output != null) { output.flush(); output.close(); } if(input != null) { input.close(); } } %> <%! private String delimiterReplace(String fullDir) { String ret1 = fullDir.replaceAll("\\\\+", "/"); String ret2 = ret1.replaceAll("\\/+", "/"); return ret2; } %>