<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="com.innorix.transfer.InnorixCustomValue"%> <%@ page import="com.innorix.transfer.InnorixTransfer" %> <%@ page import="com.innorix.transfer.InnorixDownload" %> <%@ page import="org.json.JSONArray" %> <%@ page import="org.json.JSONObject" %> <%@ page import="java.io.*" %> <% request.setCharacterEncoding("utf-8"); 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 getuniqueId = request.getParameter("uniqueId"); //유니크 아이디 String fileName = request.getParameter("fileName"); String html5 = request.getParameter("_Html5"); String sysFileName = new String(); String orgFileName = new String(); String fileFullPath = (String)session.getAttribute(getuniqueId); //파일 절대 경로 취득 session.setAttribute(getuniqueId, fileFullPath); if (fileName != null) { orgFileName = fileName; } File file = null; if (fileFullPath != null){ file = new File(fileFullPath); } // 파일명 깨짐대응 문자열 인코딩 처리 orgFileName = java.net.URLEncoder.encode(orgFileName, "UTF-8").replaceAll("\\+", "%20"); 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 { out.clear(); out=pageContext.pushBody(); 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("uniqueId \t: " + getuniqueId); 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); System.out.println("_Html5 \t : " + html5); } catch(Exception e) { e.printStackTrace(); } finally { if(output != null) { output.flush(); output.close(); } if(input != null) { input.close(); } if("true".equals(html5)){ //html5 모드 일때 session.removeAttribute(getuniqueId); //세션 삭제 File f = new File(fileFullPath); //파일 경로 System.out.println(f); if(f.exists()){ if(f.delete()){ System.out.println("파일삭제 성공"); }else{ System.out.println("파일삭제 실패"); } }else{ System.out.println("파일 없음"); } }else{ //Agent 모드 일때 session.removeAttribute(getuniqueId); File f = new File(fileFullPath); System.out.println(f); if(f.exists()){ if(f.delete()){ System.out.println("파일삭제 성공"); }else{ System.out.println("파일삭제 실패"); } }else{ System.out.println("파일 없음"); } } } %> <%! private String delimiterReplace(String fullDir) { String ret1 = fullDir.replaceAll("\\\\+", "/"); String ret2 = ret1.replaceAll("\\/+", "/"); return ret2; } %>