- 설명
-
DEXTUploadX5 멀티 버전은 멀티 다운로드 기능을 제공하지 않습니다.
멀티 다운로드를 하려면 특정 위치에 여러 파일을 동시(순차적으로)에 기록해야 하지만, HTML5 기술로는 구현이 쉽지 않습니다.
간혹, 스크립트로 다운로드 요청을 여러 번 하거나, 서버 측에서 zip 파일로 압축하여 다운로드를 하는 방법이 있지만, 일종의 편법으로써 브라우저 별 일관성이 떨어지거나, UX가 매우 불편하거나, 과도한 서버 리소스 소비로 인해 많은 문제점이 발생할 수 있습니다.
그런 이유로 인해 DEXTUploadX5 멀티 버전은 멀티 다운로드 기능을 제거했으며, 대신 IE 버전을 사용하면 멀티 다운로드 기능을 제공받을 수 있습니다.
스크립트에서 파일을 다운로드하려면 download 함수를 사용합니다.
다운로드 가능한 대상은 반드시 downUrl 속성 값을 가지고 있는 가상 파일이어야 합니다.
var dx = dx5.get("컴포넌트 아이디"); // downUrl 속성에 다운로드 웹 경로가 존재해야 합니다. dx.addVirtualFile({ ... name: "서강대교_509147.jpg", downUrl: "http://.../service/common-download.do?key=FID0001" }); // 가상 파일의 고유 아이디를 사용하여 다운로드를 수행합니다. dx.downloadById("다운로드할 가상 파일의 고유 아이디"); // 플래그 값에 따라 다운로드를 수행합니다. // AUTO: 첫 번째 가상 파일을 다운로드합니다. // SELECTED: 선택된 대상 중에 첫 번째 가상 파일을 다운로드합니다. // CHECKED: 체크된 대상 중에 첫 번째 가상 파일을 다운로드합니다. dx.download("SELECTED");
IE, Edge, Safari 같은 브라우저는 HTML5 요소인 download 속성을 지원하지 않습니다.
이 속성이 없다면, 파일을 다운로드가 되지 않고 새 창으로 열리는 문제가 있으며, XHR2를 사용하여 다운로드하는 경우에는, (작은 파일이 아닌 용량이 큰 파일의 경우) 메모리에 문제가 발생할 수 있습니다.
그러므로 일관성이 있는 파일 다운로드를 수행하기 위해서는 서버 측에서 DEXTUploadNJ를 사용하여 attachment 형식으로 파일을 전송토록 작성해야 합니다.
이 샘플은 파일 다운로드 처리를 서블릿(CommonFileDownload 클래스)이 담당하며 web.xml에 common-download.do로 매핑되어 있습니다.
# 서버 측 설정입니다. File target = null; String key = request.getParameter("key"); if (key.equals("FID0001")) target = new File(fileRoot, "서강대교_509147.jpg"); else if (key.equals("FID0002")) target = new File(fileRoot, "우도해변_239826.jpg"); else if (key.equals("FID0003")) target = new File(fileRoot, "코스모스 (빈공간) 195779.jpg"); if (target == null || target.exists() == false || target.isFile() == false) { response.sendError(HttpServletResponse.SC_NOT_FOUND, "주어진 키에 해당하는 파일 정보가 없습니다."); return; } try { // FileDownload 객체를 생성합니다. FileDownload dextnj = new FileDownload(); // 인코딩을 UTF-8로 설정합니다. response.setCharacterEncoding("UTF-8"); // 파일을 첨부 파일 형식으로 다운로드합니다. dextnj.download(request, response, target); } catch (Exception e) { throw new ServletException(e); }
- 예제
-
멀티 버전은 동시에 여러 파일을 다운로드할 수 없으며, 한 번에 하나의 파일만 다운로드 가능합니다.