Intro.
넥사크로플랫폼은 사용자가 화면에서 파일을 업로드하고 다운로드 할 수 있는 기능을 제공합니다.
이전 제품의 경우 컴포넌트로 제공하였지만 자유도 높은 화면의 구성을 위하여 파일 업로드 다운로드의 오브젝트를 제공합니다. 이는 넥사크로플랫폼17에서 새로 추가된 File Up Transfer 와 File Down Transfer 오브젝트이며 17.0.0.1900 버전부터 지원합니다.
(현재 게시물에서 사용되는 오브젝트는 기능상의 추가로 17.0.0.2100 버전부터 사용가능합니다.)
What will help?
upload(), download() 메소드를 통해서 url을 호출합니다. upload는 추가된 VirtualFile들을 서버로 올리고, download는 경로와 파일명을 이용하여 파일들을 화면으로 내려줍니다. 이때 postdata를 설정하여 파일의 정보를 전달 할 수 있습니다.
fileUpTransfer
upload() 메소드를 사용 시 addFile()로 추가된 VirtualFile 리스트의 파일들을 HTTP/HTTPS 프로토콜의 POST 방식으로 업로드 합니다. upload시 서비스 url을 지정하며 호출 된 서비스로 전송된 파일들은 MultipartRequest를 사용하여 지정된 서버 및 폴더에 저장됩니다.
fileDownTransfer
다운받을 파일들의 경로와 파일명을 조회하여 download() 메소드로 파일을 다운로드 합니다. 이때 다운로드 받은 파일이 저장될 경로와 파일명을 설정할 수 있습니다.
How to Upload & download files?
fileUpTransfer, fileDownTransfer는 화면에서 보이지 않는 형태의 오브젝트로 화면에서 사용자가 직접 실행하기 위해서는 추가적으로 컴포넌트를 사용해야합니다. 또한 업로드 시 드래그앤드랍하거나 파일다이얼로그창을 띄우기 위한 이벤트 추가가 필요합니다.
1. 컴포넌트 추가
필요한 컴포넌트는 그리드와 데이터셋, 버튼 정도가 있으며 화면 동작을 위한 virtualfile, filedialog 오브젝트가 필요합니다.
#1. 그리드 & 데이터셋 : 화면에서 업로드하거나 다운로드 할 리스트를 표현합니다.
#2. 버튼 : 파일을 선택하여 파일다이얼로그 창을 띄우거나 현재 파일 리스트의 삭제 기타 업로드나 다운로드를 위하여 사용합니다.
#3. 프로그레스바 : 업로드시의 현재 진행상황을 알 수 있습니다.
2. 업로드 파일 리스트 추가/삭제/업로드 하기
로컬환경에서 파일을 드래그앤드랍하거나 파일다이얼로그창으로 파일을 선택하여 전송할 파일 리스트를 추가한 후 서버로 전송합니다.
#1. 파일 드래그앤드랍 : ondrop이벤트는 로컬에서 드래그한 파일들을 virtualfile형태의 파일로 전달받습니다.
#2. 파일다이얼로그 : 파일다이얼로그창을 open하여 선택한 파일들은 onclose이벤트를 통해 virtualfile형태의 파일을 전달받습니다.
#3. 파일리스트 추가 : fileUpTransfer 오브젝트의 addFile() 메소드를 통하여 전달된 virtualfile들을 리스트에 담습니다.
#4. 파일리스트 삭제 : removeFile() 메소드로 담겨진 리스트 중 선택된 파일을 삭제합니다.
#5. 파일 업로드하기 : upload()메소드에 호출할 url 즉, 서비스 파일의 경로를 지정하여 virtualfile들을 서버로 전달합니다.
#6. 업로드시 프로그레스바 사용하기 : 파일이 업로드 중일 때 일정간격으로 발생하는 onprogress 이벤트를 이용하여 현재의 진행상황을 나타냅니다.
#7. 업로드 완료 : 파일 업로드가 완료된 후 성공코드 값이 전달 되었을때 발생하는 onsuccess 이벤트를 사용하여 전송이 완료됨을 확인합니다. 전송을 완료하지 못하고 오류가 발생 했을 때는 onerror이벤트가 발생하게 됩니다.
3. 현재 저장된 파일 리스트 확인 및 다운로드하기
트랜잭션으로 파일들의 리스트를 화면에서 조회하고 리스트들의 경로 및 파일명을 이용하여 서버에서 다운로드 합니다.
#1. 파일리스트 조회 : 트렌젝션으로 지정된 위치의 파일리스트를 조회합니다. 이때, 파일의 실제 경로 및 파일명을 화면으로 전달받습니다.
#2. 리스트의 파일 다운로드 : 리스트 중 하나의 파일을 다운로드 받거나 전체 파일들을 zip파일로 묶어서 다운로드 합니다.
서비스 로직에서 BufferedInputStream과 ZipEntry를 사용하여 압축파일을 생성할 수 있습니다.
#3. 다운로드 완료 : onsucccess 이벤트에서는 다운로드 받은 파일이 저장된 경로와 파일명을 확인 할 수 있습니다.(e.targetfullpath)
4. 주의사항
#1. 샌드박스(SandBox) 옵션 설정
Windows nexacro Browser 환경의 경우 사용자의 경로 접근 허용을 위하여 Environment 의 filesecurelevel 속성값을 “all”로 변경해야 합니다. 또한 런타임의 경우 아래와 같은 접근 진행 안내창이 실행됩니다.
#2. Cross Domain
어플리케이션의 Domain과 파일을 수신 할 서버페이지의 Domain 이 다를 경우 Cross Domain 문제로 에러가 발생할 수 있습니다. 해당 경우 Cross domain 처리 작업이 필요합니다.
#3. Upload시 파라메터 값 사용
nexacro platform은 파일이나 이미지를 서버로 전송하기 위하여 폼의 enctype속성이multipart/form-data 값으로 사용되며 메소드가 포스트(post)값으로 설정됩니다. 이 때 postdatalist에 추가된 데이터는 MultipartRequest 객체를 사용하여 전달받게 됩니다. FileDownTransfer의 postdatalist는 request객체를 통하여 전달됩니다.
postdatalist의 경우 같은 키 값이 여러번 전달되지 않기 때문에 MultipartRequest에서는 1번만 확인 가능합니다. 폴더의 위치와 같은 정보 전달을 위해서는 get값으로 매개변수를 전달 할 수도 있습니다.
#4. 서비스 파일
실제 화면에서 전달받은 파일들을 서버에서 업로드/다운로드 수행하기 위해서는 해당 서비스 로직이 필요합니다. 첨부된 파일의 경우 jsp로 구현된 샘플입니다.
'Learn' 카테고리의 다른 글
그리드 Row의 높이를 자동으로 조절하는 방법 (0) | 2019.12.02 |
---|---|
expr 고급지게 사용하는 노하우 2 - 그리드에서 데이터셋 사용자함수 활용 (0) | 2019.12.02 |
expr 고급지게 사용하는 노하우 (0) | 2019.12.02 |
원하는 데이터만 쉽게 추출하는 방법 feat. 필터링 가이드 (0) | 2019.12.02 |
트리 그리드 잘 사용하고 잘 활용하는 방법 - 트리 그리드 셀 컨트롤 가이드 (0) | 2019.11.27 |