2012-01-10 3 views
0

현재 Flex 3.0에서 작업 중입니다. 오류가 발생합니다 (아래 스크린 샷이 나와 있습니다). Flash Player 버전 10.0을 사용하고 있습니다.FileReference.save 메서드에서 오류 발생

현재 HTTPService를 호출 중이며 해당 HTTPService의 resultHandler에서 filereference.save() 메서드에 오류가 발생했습니다. 이 메서드는 MouseEvent 또는 Keyboard 이벤트가 발생하는 경우에만 호출되기 때문입니다.

이 상황을 극복하거나 다른 말로하면 ResultHandler에서 filereference.save 메소드를 호출하는 솔루션이 있습니까?

enter image description here

+1

MouseEvent 또는 KeyboardEvent를 "수동으로"발송하려고 했습니까? – RIAstar

+0

아니, 내가 그걸 사용하지 않았기 때문에 .. 가능하다면 나에게 그런 코드 나 URL을 알려주겠습니까? 당신의 도움은 나를 위해 소중합니다 .. –

+1

코드를 통해 MouseEvent를 전달하면 작동하지 않습니다 – OXMO456

답변

1

수 없습니다. 사용자의 클릭 버튼을 눌러야합니다. MouseEvent를 파견하는 것은 쓸모가 없다. Romi 접근 coud 도움이됩니다. 그러나 버튼 클릭으로 보안상의 이유로 인해야합니다.

내가 한 것은 결과에서 파일 위치를 검색하고 HTML 페이지처럼 열었습니다. 그런 다음 다운로드 할 수 있습니다. Romi와 같이 사용자가 버튼을 클릭하도록 강요하는 것 외에 다른 해결책은 없다고 말했다.

var u:URLRequest = new URLRequest(event.result); 
navigateToURL(u, "_blank"); 
+0

안녕하세요 저는 event.result 대신 문자열로 CSV 데이터를 가지고 있습니다. 문자열은 "a, b, c, d, e"와 비슷합니다. 내가해야 할 일은 그 문자열을 FullReport.csv라는 이름으로 .csv 파일에 저장하는 것입니다. 그것에 대해 어떤 생각을 가지고 있습니까? –

+1

서버에서 파일을 생성하는 방법은 무엇입니까? 그리고 http 서비스의 모든 문자열을 반환하는 대신 .. 내가 전에 말한 것을 적용하기 위해 파일의 URL/이름을 반환하십시오. 나는 다시 그 문제가 생겼다. 필자는 그런 식으로해야했다. 파일은 4GB와 같이 너무 클 수있다. 원격 객체 나 무언가를 통해 그것을 전송하는 것은 불가능하다. 당신은 사용자로부터 클릭이 필요합니다. 당신이 항상 그 오류를 얻을 것입니다. .save 메소드를 사용하기 위해 wnat하면, 그렇게 사용하면됩니다. –

5

그 이유는 당신이 더 이상 사용자에 의해 생성 이벤트를 통해 자동으로 실제로이를 요청하는 사용자의 경우를 제외하고, 파일 저장 팝업의 표시를 트리거 할 수 있습니다 없다는 것이다. 이 주제에 대한 자세한 정보는 다음과 같습니다. http://www.bogdanmanate.com/2010/05/12/flex-error-2176-when-using-filereference/

게시물에 설명 된 해결책을 사용하여 즉, 예/아니요 경고를 사용하여 파일로드가 완료되었음을 사용자에게 알리는 방법으로이 문제를 해결했습니다. 다운로드 준비가 끝났으며, 마지막으로 로컬에 저장하려고하는지 확인하도록 요청합니다. 당신은 사용자 친화적이지 않은 것을 생각할 수도 있지만 실제로는 보안에 관한 것입니다. 이벤트를 트리거하는 방법을 알게되면이 UI 문제를 무시할 수있는 방법을 찾아 낼 수 있습니다.

멋진 하루 보내십시오!

0

또 다른 해결책은 파일을 서버로 보낸 다음 서버가 브라우저의 저장/열기 대화 상자를 트리거해야하는 클라이언트로 다시 보내도록하는 것입니다. 그러나 파일이 flex로 작성된 경우에는 대역폭에 이상적인 것이 아닙니다.