FileDialog 소개
FileDialog 컴포넌트는 사용자가 가지고 있는 파일을 선택할 때 파일 선택 대화상자를 표시하는 기능을 제공합니다. 실행되는 파일 대화상자는 시스템에서 제공하는 대화상자를 표시합니다. FileDialog 컴포넌트에서는 대화상자를 표시하고 파일 선택 범위를 줄일 수 있는 필터링 기능 등을 제공합니다.
지원 범위
웹브라우저 지원은 17.0.0.1900 버전부터 지원합니다.
FileDialog 컴포넌트는 운영체제와 실행환경의 영향을 받기 때문에 각 속성, 메소드, 이벤트의 지원 범위가 다를 수 있으며, 파라미터별로도 차이가 있을 수 있습니다.
아래 표는 17.0.0.1900 버전 기준의 지원 범위입니다. 이후 버전에서는 지원 범위가 변경될 수 있습니다.
nexacro Browser (desktop) | nexacro Browser (mobile) | IE10, 11, Chome, Firefox, Opera | Android, iOS default Web Browser | Edge, Safari | |
---|---|---|---|---|---|
속성 | |||||
accept | X | X | O | O | X |
defaultextension | O | O | X | X | X |
dialogtype | X | O | X | X | X |
filter | O | O | X | X | X |
filterindex | O | O | X | X | X |
메소드 | |||||
open | O | O | O | O | O |
이벤트 | |||||
onclose | O | O | O | O | O |
FileDialogEventInfo | |||||
path | O | O | X | X | X |
reason | O | O | O | O | O |
virtualfiles | O | O | O | O | O |
FileDialog 실행하고 선택한 파일 표시하기
파일 선택 대화 상자를 선택한 옵션에 따라 실행하고 선택한 파일을 표시합니다.
예제
여러 개 파일을 선택할지, 파일 확장자로 필터링을 할지 선택한 후에 [open] 버튼을 클릭하면 파일 선택 대화상자를 표시합니다. 파일을 선택하고 파일 선택 대화상자를 닫으면 TextArea 영역에 선택한 파일명과 크기를 표시합니다.
예제에서 사용한 핵심 기능
- open
파일 선택 대화상자를 표시합니다. 파라미터로 strTitle(파일 선택 대화상자 타이틀), constOpenMode(파일 선택 옵션)을 지정할 수 있는데, strTitle 파라미터는 웹브라우저 실행 시 적용되지 않으며 constOpenMode도 웹브라우저 실행 시에는 2가지만 사용할 수 있습니다.
- virtualfiles
파일 선택 대화상자를 닫으면 onclose 이벤트가 발생하고 FileDialogEventInfo 오브젝트의 virtualfiles 속성에서 선택한 파일 정보를 확인할 수 있습니다. virtualfiles 속성에는 VirtualFile 오브젝트가 배열 형태로 담겨져 있습니다. 웹브라우저 환경에서는 VirtualFile 오브젝트를 직접 생성해 사용할 수는 없습니다.
- accept
파일 확장자 또는 MIME 타입 형태로 파일 형식을 지정할 수 있습니다.
MIME 타입 목록은 아래 링크를 참고하세요.
예제 구현 방법
1
화면에 Button 컴포넌트를 배치하고 Button 컴포넌트 아래에 Radio 컴포넌트를 2개 배치합니다. 그리고 오른쪽에 선택한 파일 목록을 표시할 TextArea 컴포넌트를 배치합니다.
2
툴바에서 FileDialog를 선택하고 화면에 추가합니다. FileDialog는 Invisible Object 영역에 표시됩니다.
3
Radio 컴포넌트의 innerdataset을 아래와 같이 편집합니다. 하나는 open 메소드의 constOpenMode 파라미터를 지정하고 다른 하나는 accept 속성값을 지정합니다.
4
Radio 컴포넌트의 onitemchanged 이벤트 함수를 아래와 같이 작성합니다. 첫 번째 Radio 컴포넌트에서 선택한 항목을 open 메소드의 파라미터로 지정하고 두 번째 Radio 컴포넌트에서 선택한 항목은 accept 속성값으로 지정합니다.
var constOpenMode = FileDialog.LOAD; this.Radio00_onitemchanged = function(obj:nexacro.Radio,e:nexacro.ItemChangeEventInfo) { if(e.postvalue==0) { constOpenMode = FileDialog.LOAD; } else { constOpenMode = FileDialog.MULTILOAD; } }; this.Radio01_onitemchanged = function(obj:nexacro.Radio,e:nexacro.ItemChangeEventInfo) { this.FileDialog00.set_accept(e.postvalue); };
5
Button 컴포넌트의 onclick 이벤트 함수를 아래와 같이 작성합니다.
this.Button00_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo) { this.FileDialog00.open('nexacro17', constOpenMode); };
6
FileDialog 오브젝트의 onclose 이벤트 함수를 아래와 같이 작성합니다.
웹브라우저에서는 파일을 선택하지 않고 파일 선택 대화상자를 닫았을때 이벤트가 발생하지 않지만 넥사크로 브라우저에서는 이벤트가 발생하기 때문에 예외 처리를 해주어야 합니다. 아래 예제에서는 예외 처리를 해주지 않았습니다.
this.FileDialog00_onclose = function(obj:nexacro.FileDialog,e:nexacro.FileDialogEventInfo) { this.TextArea00.set_value("selectfiles: "+e.virtualfiles.length+"\n"); for (var i = 0, len = e.virtualfiles.length, vFile; i < len; i++) { vFile = e.virtualfiles[i]; vFile.addEventHandler("onsuccess", this.FileDialog_VirtualFile_onsuccess, this); vFile.open(null, VirtualFile.openRead); } }; this.FileDialog_VirtualFile_onsuccess = function(obj:nexacro.VirtualFile, e:nexacro.VirtualFileEventInfo) { switch (e.reason) { case 1: obj.getFileSize(); break; case 9: this.TextArea00.set_value(this.TextArea00.value+obj.filename+"("+e.filesize+")\n"); obj.close(); break; } }
onclose 이벤트가 발생하면 FileDialogEventInfo 오브젝트의 virtualfiles 속성에서 선택한 파일 정보를 확인할 수 있습니다. 파일명만 필요한 경우에는 filename 속성값을 사용하며, 파일 크기를 확인해야 하는 경우에는 getFileSize 메소드를 실행하고 VirtualFile 오브젝트의 onsuccess 이벤트 함수 내에서 파일 크기를 확인합니다.
VirtualFile 오브젝트의 getFileSize 메소드를 사용하기 위해서는 먼저 open 메소드를 실행해주어야 하고 onsuccess 이벤트를 등록해주어야 합니다. open 메소드가 성공하면 그 다음 getFileSize 메소드를 실행합니다.
FileDialogEventInfo 오브젝트의 virtualfiles 속성에서 가져온 VirtualFile 오브젝트는 사용할 수 있는 기능 제한이 있습니다. open 메소드를 사용할 때 strFileName 파라미터를 지정할 수 없으며, constOptions 파라미터는 VirtualFile.openRead 만 사용할 수 있습니다.
7
QuickView(Ctrl + F6)를 실행하여 결과를 확인합니다. FileDialog.LOAD 옵션을 선택하면 파일을 하나만 선택할 수 있고, FileDialog.MULTILOAD 옵션을 선택하면 여러 파일을 선택할 수 있습니다.