설명
다운로드란, 대상을 HTTP GET으로 요청했을 때, 서버에서 보내는 응답 데이터가 브라우저 또는 외부 플러그인에서 열리지 않고, 바로 디스크에 파일로 저장되는 것을 말한다.
일반적으로 다운로드할 대상이 브라우저가 해석할 수 없는 형식인 경우, 특이 사항이 없는 이상 브라우저는 대상을 첨부 파일처럼 다운로드한다. 그러나 JPG 확장자를 갖는 이미지 파일처럼 해석할 수 있는 파일이라면 대상은 다운로드가 되지 않고, 브라우저 창을 통하여 출력된다. (DEXTUploadX5에서는 구조상 출력되는 대상이 감춰짐.)
대상을 열지 않고 바로 다운로드하려면 브라우저 자체 기능(컨텍스트 메뉴 - 다른 이름으로 저장)에 의존하거나 서버에서 응답 데이터를 보낼 때, 브라우저가 강제로 다운로드 하도록 지시하는 응답 헤더(Content-Disposition: attachment)를 실어 보내야 한다.
DEXTUploadX5는 웹브라우저의 기술을 그대로 사용하기 때문에, 다운로드 되지않고 파일이 그대로 열릴 수 있다. 그러므로 파일을 일관되게 다운로드하기 위해서는 서버나 DEXTUploadJK와 같은 서버 파일 업/다운로드 컴포넌트를 사용해서, 파일을 열리지 않고 다운로드 될 수 있도록 응답 헤더를 설정해야 한다.
이 샘플은 파일 다운로드 처리를 컨트롤러(FileServiceController 클래스)가 담당하며 download-file로 매핑되어 있다.
# Server side
@GetMapping("/download-file")
public ModelAndView downloadFile(@RequestParam(value = "key") String key) {
File target = null;
// 다운로드할 대상 파일을 선택한다.
...
// 파일을 다운로드 하기 위해서 JKFileDownloadView 객체를 생성한다.
JKFileDownloadView view = new JKFileDownloadView(target);
view.setCharsetName("UTF-8");
// DEXTUploadX5를 사용하여 다운로드할 때는 Attachment로 설정하는 것이 좋다.
view.setContentDisposition(FileResponseContentDisposition.Attachment);
view.setAllowingWeakRange(true);
// 다운로드가 시작된다.
return new ModelAndView(view);
}
DEXTUploadX5는 단일 파일 다운로드와 제한적 다중 파일 다운로드(1.1.0.0 버전 이후부터)를 지원한다.
스크립트에서 개별 파일을 다운로드하려면 downloadById, download 함수를 사용한다.
다중 파일 다운로드를 하려면 download 함수의 두 번째 파라미터 값을 true로 설정한다.
다운로드 가능한 대상은 반드시 downUrl(또는 url) 속성 값을 가지고 있는 가상 파일이어야 한다.
var dx = dx5.get("component-id");
// downUrl 속성에 다운로드 웹 경로가 존재해야 한다.
dx.addVirtualFile({ ... name: "서강대교_509147.jpg", downUrl: "http://domain/path/download-file?key=F0001" });
// 가상 파일의 고유 아이디를 사용하여 단일 파일 다운로드를 수행한다.
dx.downloadById("다운로드할 가상 파일의 고유 아이디");
// 플래그 값에 따라 단일 파일 다운로드를 수행한다.
// AUTO: 첫 번째 가상 파일을 다운로드한다.
// SELECTED: 선택된 대상 중에 첫 번째 가상 파일을 다운로드한다.
// CHECKED: 체크된 대상 중에 첫 번째 가상 파일을 다운로드한다.
dx.download("SELECTED");
// 플래그 값에 따라 다중 파일 다운로드를 수행한다.
// AUTO: 가상 파일을 모두 다운로드한다.
// SELECTED: 선택된 대상 중에 가상 파일을 모두 다운로드한다.
// CHECKED: 체크된 대상 중에 가상 파일을 모두 다운로드한다.
dx.download("SELECTED", true);
단일 파일 다운로드와 달리 다중 파일 다운로드는 브라우저 성능 문제로 인하여 다운로드하는 파일의 크기에 제한을 두었다.
기본값은 100MB이며, 파일 크기를 그 이상 허용하려면 setLimitMultiDownloadSize 함수를 사용하여 제한된 크기를 변경하면 된다.
그러나 이 함수는 다운로드를 허용되는 파일의 크기를 변경하는 것이지, 브라우저의 성능에 상관없이 다운로드가 가능하도록 기능을 제공하는 것이 아니다. HTML5의 기능을 사용하여 파일을 연속적으로 다운로드하려면, 일시적으로 다운로드 대상을 메모리에 로드하기 때문에, 동영상 파일과 같이 용량이 큰 파일들은 적절한 다중 파일 다운로드 대상이 아니다. 그러므로 대용량 다운로드, 이어 받기와 같은 기능이 필요하다면, HD 응용프로그램을 권장한다.
// 다운로드 제한 크기를 300MB로 설정한다. dx.setLimitMultiDownloadSize(1024 * 1024 * 300);
예제
단일 파일 다운로드 |
|
|
|
다중 파일 다운로드 |
|
(브라우저가 최종적으로 파일을 저장하는 단계(제품이 관여할 수 없는)가 존재하기 때문에, 다운로드가 완료되었다 하더라도 브라우저에서 자체적으로 질의하는 메시지들이 늦게 보여지거나, 추가 질의가 있을 수 있다.) |