안녕하세요, 재야의 고수님들.
저는 웹개발을 Cache WAS의 Zen을 이용해 하고 있는데, fileUpload예제가 Firefox에서는 잘 되는데, IE브라우저에서 file path가 전체경로가 나와 파일이 제대로 읽히지를 않습니다.
혹시 좋은 방법이 있는지 궁금합니다.
그건 파이어폭스에서 IE와 달리, 파일의 전체 경로를 주지 않도록 하는 보안 정책 때문이라는 군요.
그래서, 우선, 특정 디렉터리는 정해져 있다고 하면, 가령 c:\temp라고 하죠.
가령, fileUpload 태그의 id를 아래와 같이 썼다고 하면,
<fileUpload id="getFile" name="getFile" />
%ZEN.Submit 클래스의 변수에서 값을 가져올 때 %GetValue("getFile") 한 다음에, CacheDB에 있는 %File 클래스의 GetFileName() 메소드를 이용해 디렉터리를 제외한 파일 이름만 가져오게 하면 됩니다. 즉, 다음과 같이 하는 거죠: ##class(%File).GetFilename(pSubmit.%GetValue("getFile"))
아래 전체 Zen Page 클래스 예제를 참고하세요.
/// Created using the page template: Default Class Threek.Support Extends %ZEN.Component.page { /// 이 페이지가 속한 어플리케이션의 클래스명. Parameter APPLICATION; /// 이 페이지의 이름. Parameter PAGENAME = "Support"; /// 로컬화에 사용된 도메인. Parameter DOMAIN; /// 이 스타일 블록은 페이지별 CSS 스타일 정의를 포함하고 있습니다. XData Style { <style type="text/css"> </style> } /// 이 XML 블록은 이 페이지의 내용을 정의합니다. XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ] { <page xmlns="http://www.intersystems.com/zen" title=""> <form id="fileForm"> <hgroup> <fileUpload id="getFile" name="getFile" /> <submit caption="Insert" action="save" /> </hgroup> </form> </page> } ClassMethod %OnSubmit(pSubmit As %ZEN.Submit) As %Status { if (pSubmit.%Action = "save") { set dir="c:\temp\" set obj=##class(Threek.DTable).%New() set ofile=##class(%File).%New() Set ofile.Name = dir_##class(%File).GetFilename(pSubmit.%GetValue("getFile")) do ofile.Open("R") set obj.p1=ofile.Name do obj.sheet.CopyFrom(ofile) do obj.%Save() do ofile.Close() } Quit $$$OK } }