2011-04-22 4 views
5

ExtJS를 사용하여 프로그램 용 클라이언트 측을 빌드합니다. 서버에 Ajax 요청을 보내고 응답 파일 (XLS 또는 PDF와 같은 일반 텍스트 파일이 아닌 이진 파일)을 가져 오는 상황이 있습니다. ExtJS가 반환 한 파일을 어떻게 얻을 수 있습니까? (파일을 다운로드하여 클라이언트에 저장할 수 있다는 의미입니까?) 응답에 바이너리 데이터가 포함되어 있고 디코딩 할 수 없기 때문에 var result = Ext.decode(response.responseText)을 사용하여 결과를받을 수 없습니다.응답 파일 사용 ExtJS

Ajax 호출은 매우 간단합니다 :

public void sendFile(HttpServletResponse response, String filePath) { 
     def file = new File(filePath); 
     response.setContentType("application/octet-stream"); 
     response.setHeader("Content-disposition", "attachment;filename=${file.getName()}");  
     response.outputStream << file.newInputStream(); 
    } 

너무 감사 :

Ext.Ajax.request({ 
    url : 'myController/exportFile', 
    method : 'GET', 
    success : function(response, opts) { 
     // What should I do to get the file? 
    }, 
    failure : function(response, opts) { 
     alert('Export file failed!') 
    } 
}); 

파일을 여기에 돌아가 내 서버 작업입니다!

답변

2

일반 브라우저에서 제공되는 열기/저장 대화 상자가 나타나도록 사용자에게 요청해야하는 경우 AJAX를 호출 할 필요가 없습니다.

페이지에서 myController/exportFile으로 연결하기 만하면됩니다.
예 : <a href="myController/exportFile">my file</a>

myController/exportFile의 HTTP 응답에는 브라우저에 "this is file is. open/save dialog"라고 알리는 적절한 헤더 (즉, Content-type 및 Content-disposition)가 포함되어야합니다. 미리보기, 나는 당신이 이미이 돌보는 것을 보았다.

+0

좋은 답변입니다! 너는 최고야 !! 나는이 오랜 시간을 보았고이 게시물 만이 나에게 적절한 답을 주었다! – davs

+0

@ amol 당신이 도와주세요 제발 [여기] (http://stackoverflow.com/questions/8505995/itextsharp-generated-pdf-how-to-prompt-a-user-to-choose-where-to-save) – Armance

0

당신은 서버의 파일 시스템에 파일을 저장하고 window.open ('HTTP : //your.domain/your/file')를 보낼 수 있습니다 http://your.domain/your/file -link이 파일에 클라이언트 측에 ...

+0

window.open은 모든 오류 처리를 제어하지 못합니다. 모든 브라우저 클라이언트가 window.open을 허용하지는 않습니다. –